Path traversal

Kategori OWASP: MASVS-STORAGE: Storage

Ringkasan

Kerentanan path traversal terjadi saat penyerang dapat mengontrol bagian jalur yang kemudian diteruskan ke API sistem file tanpa validasi. Hal ini dapat menyebabkan operasi sistem file tanpa izin. Misalnya, penyerang dapat menggunakan karakter khusus seperti ../ untuk mengubah target resource secara tidak terduga dengan melintas ke luar direktori yang ditargetkan.

Dampak

Dampak dapat bervariasi, bergantung pada operasi dan konten file, tetapi umumnya menyebabkan file ditimpa (saat menulis file), kebocoran data (saat membaca file), atau izin berubah (saat mengubah izin file/direktori).

Mitigasi

Melakukan kanonikalisasi jalur menggunakan File.getCanonicalPath() dan membandingkan awalan dengan direktori yang diharapkan:

Kotlin

@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
    val f = File(path)
    val canonicalPath = f.canonicalPath
    require(canonicalPath.startsWith(expectedDir!!))
    return f
}

Java

public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
  File f = new File(path);
  String canonicalPath = f.getCanonicalPath();
  if (!canonicalPath.startsWith(expectedDir)) {
    throw new IllegalArgumentException();
  }
  return f;
}

Praktik terbaik lainnya adalah menggunakan validasi untuk memastikan bahwa hanya hasil yang diharapkan yang akan terjadi. Contohnya mencakup:

  • Memeriksa apakah file sudah ada atau belum untuk mencegah timpaan yang tidak disengaja.
  • Memeriksa apakah file yang ditargetkan adalah target yang diharapkan atau bukan untuk mencegah kebocoran data atau mengubah izin secara tidak benar.
  • Memeriksa apakah direktori operasi saat ini sudah sama persis dengan direktori yang diharapkan dalam nilai yang ditampilkan dari jalur kanonis.
  • Memastikan sistem izin untuk operasi tersebut sudah secara eksplisit dicakup, seperti memeriksa bahwa sistem tidak menjalankan layanan sebagai root dan memastikan izin direktori disertakan ke layanan atau perintah yang ditentukan.