Truyền tải qua đường dẫn

Danh mục OWASP: MASVS-STORAGE: Bộ nhớ

Tổng quan

Lỗ hổng bảo mật truyền tải qua đường dẫn xảy ra khi kẻ tấn công có thể kiểm soát một phần đường dẫn, phần này sau đó được truyền đến các API hệ thống tệp mà không cần xác thực. Điều này có thể dẫn đến các hoạt động trái phép đối với hệ thống tệp. Ví dụ: kẻ tấn công có thể sử dụng các ký tự đặc biệt như ../ để thay đổi đột ngột mục tiêu tài nguyên, bằng cách truyền tải bên ngoài thư mục mục tiêu.

Mức độ tác động

Mức độ tác động sẽ thay đổi tuỳ theo từng hoạt động và nội dung tệp, nhưng thường dẫn đến việc ghi đè tệp (khi ghi tệp), rò rỉ dữ liệu (khi đọc tệp) hoặc thay đổi quyền (khi thay đổi quyền đối với tệp/thư mục).

Giải pháp giảm thiểu

Chuẩn hoá đường dẫn bằng cách sử dụng File.getCanonicalPath() và so sánh tiền tố với thư mục dự kiến:

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;
}

Một phương pháp hiệu quả khác là sử dụng tính năng xác thực để đảm bảo chỉ xảy ra kết quả dự kiến. Một số ví dụ bao gồm:

  • Kiểm tra xem tệp đã tồn tại hay chưa để ngăn việc vô tình ghi đè.
  • Kiểm tra xem tệp mục tiêu có phải là mục tiêu dự kiến hay không, nhằm ngăn chặn rò rỉ dữ liệu hoặc thay đổi nhầm các quyền.
  • Kiểm tra xem thư mục hiện tại của hoạt động có hoàn toàn như dự kiến trong giá trị trả về từ đường dẫn chuẩn hoá hay không.
  • Đảm bảo hệ thống quyền truy cập có phạm vi rõ ràng chỉ dành cho hoạt động đó, chẳng hạn như kiểm tra để chắc chắn hoạt động đó không chạy các dịch vụ ở cấp độ gốc, đồng thời đảm bảo rằng các quyền đối với thư mục cũng có phạm vi chỉ dành cho dịch vụ hoặc lệnh được chỉ định.