Các thư mục bị tiết lộ không đúng cách cho FileProvider
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
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.
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
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2023-12-13 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2023-12-13 UTC."],[],[],null,["# Improperly Exposed Directories to FileProvider\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-STORAGE: Storage](https://mas.owasp.org/MASVS/05-MASVS-STORAGE)\n\nOverview\n--------\n\nAn improperly configured `FileProvider` can unintentionally expose files and directories to an attacker. Depending on the configuration, an attacker can read from or write to these exposed files, which in turn can lead to the exfiltration of sensitive information or, in the worst case, arbitrary code execution. For example, an application with `\u003croot-path\u003e` set in the configuration could enable an attacker to access sensitive information stored in databases or to overwrite the application's native libraries, leading to arbitrary code execution.\n\nImpact\n------\n\nThe impact varies depending on the configuration and file content, but generally leads to data leakage (when reading) or overwriting (when writing) files.\n\nMitigations\n-----------\n\n### Do not use the \\\u003croot-path\\\u003e path element in the configuration\n\n`\u003croot-path\u003e` corresponds to the root directory of the device (`/`). Allowing this in the configuration provides arbitrary access to files and folders, including the app's sandbox and `/sdcard` directory, which offers a very broad attack surface to an attacker.\n\n### Share narrow path ranges\n\nIn the path configuration file, avoid sharing a broad path range like `.` or `/`. Doing so can lead to exposing sensitive files by mistake. Share only a limited/narrower path range and ensure only files you want to share are under this path. This will prevent exposing sensitive files by mistake.\n\nA typical configuration file with safer settings could look like this: \n\n### Xml\n\n \u003cpaths\u003e\n \u003cfiles-path name=\"images\" path=\"images/\" /\u003e\n \u003cfiles-path name=\"docs\" path=\"docs\" /\u003e\n \u003ccache-path name=\"cache\" path=\"net-export/\" /\u003e\n \u003c/paths\u003e\n\n### Check and validate the external URIs\n\nValidate the external URIs (using a `content` scheme) and ensure they are not pointing to your application's local files. This prevents any inadvertent information leak.\n\n### Grant minimum access permissions\n\nA [`content URI`](/guide/topics/providers/content-provider-basics#ContentURIs) can have both read and write access permissions. Ensure only the minimum required access permission is granted.\nFor example, if *only* read permission is required, then explicitly grant only [`FLAG_GRANT_READ_URI_PERMISSION`](/reference/android/content/Intent#FLAG_GRANT_READ_URI_PERMISSION).\n\n### Avoid usage of \\\u003cexternal-path\\\u003e for storing/sharing sensitive information\n\nSensitive data, like personally identifiable information (PII), should not be stored outside of the application container or system credential storage facilities. Thus, avoid the usage of the`\u003cexternal-path\u003e` element, unless you have explicitly verified that the information being stored/shared is not sensitive.\n\nResources\n---------\n\n- [FileProvider Documentation](/reference/androidx/core/content/FileProvider)\n\n- [Vulnerability on using \\\u003croot-path\\\u003e](https://hackerone.com/reports/876192)"]]