Các thư mục bị tiết lộ không đúng cách cho FileProvider

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

Tổng quan

FileProvider được định cấu hình không đúng cách có thể vô tình tiết lộ các tệp và thư mục cho kẻ tấn công. Tuỳ vào cấu hình, kẻ tấn công có thể đọc hoặc ghi vào các tệp bị tiết lộ này, dẫn đến việc đánh cắp thông tin nhạy cảm hoặc trong trường hợp xấu nhất là thực thi mã tuỳ ý. Ví dụ: một ứng dụng có <root-path> được đặt trong cấu hình có thể cho phép kẻ tấn công truy cập vào thông tin nhạy cảm được lưu trữ trong cơ sở dữ liệu hoặc ghi đè thư viện gốc của ứng dụng, dẫn đến việc thực thi mã tuỳ ý.

Mức độ tác động

Mức độ tác động sẽ khác nhau tuỳ theo cấu hình và nội dung tệp, nhưng thường dẫn đến việc rò rỉ dữ liệu (khi đọc tệp) hoặc ghi đè tệp (khi ghi tệp).

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

Không sử dụng phần tử đường dẫn <root-path> trong cấu hình

<root-path> tương ứng với thư mục gốc của thiết bị (/). Việc cho phép đường dẫn này trong cấu hình sẽ cấp quyền truy cập tuỳ ý vào các tệp và thư mục, bao gồm cả hộp cát và thư mục /sdcard của ứng dụng, từ đó tạo ra bề mặt tấn công rất rộng cho kẻ tấn công.

Chia sẻ phạm vi đường dẫn hẹp

Trong tệp cấu hình đường dẫn, tránh chia sẻ phạm vi đường dẫn rộng như . hoặc /. Việc này có thể khiến các tệp nhạy cảm bị tiết lộ do nhầm lẫn. Chỉ chia sẻ phạm vi đường dẫn hẹp/giới hạn hơn và đảm bảo chỉ các tệp bạn muốn chia sẻ mới nằm trong đường dẫn này. Việc này giúp tránh tiết lộ các tệp nhạy cảm do nhầm lẫn.

Một tệp cấu hình thông thường có chế độ cài đặt an toàn hơn có thể có dạng như sau:

XML

<paths>
    <files-path name="images" path="images/" />
    <files-path name="docs" path="docs" />
    <cache-path name="cache" path="net-export/" />
</paths>

Kiểm tra và xác thực các URI bên ngoài

Xác thực các URI bên ngoài (bằng lược đồ content) và đảm bảo rằng các URI này không trỏ đến tệp cục bộ của ứng dụng. Việc này giúp tránh trường hợp thông tin bị rò rỉ do vô tình.

Cấp quyền truy cập tối thiểu

content URI có thể có cả quyền truy cập đọc và ghi. Hãy nhớ chỉ cấp quyền truy cập tối thiểu cần thiết. Ví dụ: nếu chỉ yêu cầu có quyền đọc, bạn chỉ cần cấp FLAG_GRANT_READ_URI_PERMISSION một cách rõ ràng.

Tránh sử dụng <external-path> để lưu trữ/chia sẻ thông tin nhạy cảm

Không được lưu trữ dữ liệu nhạy cảm như thông tin nhận dạng cá nhân (PII) bên ngoài vùng chứa ứng dụng hoặc cơ sở lưu trữ thông tin xác thực trên hệ thống. Do đó, hãy tránh sử dụng phần tử <external-path>, trừ phi bạn đã xác minh rõ ràng rằng thông tin đang được lưu trữ/chia sẻ không phải là thông tin nhạy cảm.

Tài nguyên