ไดเรกทอรีที่เปิดเผยอย่างไม่ถูกต้องไปยัง FileProvider
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
หมวดหมู่ OWASP: MASVS-STORAGE: พื้นที่เก็บข้อมูล
ภาพรวม
FileProvider
ที่กําหนดค่าไม่ถูกต้องอาจเปิดเผยไฟล์และไดเรกทอรีต่อผู้โจมตีโดยไม่ตั้งใจ ผู้โจมตีสามารถอ่านหรือเขียนลงในไฟล์ที่เปิดเผยเหล่านี้ได้ ทั้งนี้ขึ้นอยู่กับการกำหนดค่า ซึ่งอาจนำไปสู่การลักลอบนำข้อมูลที่ละเอียดอ่อนออก หรือในกรณีที่ร้ายแรงที่สุดคือการเรียกใช้โค้ดที่ไม่ได้รับอนุญาต ตัวอย่างเช่น แอปพลิเคชันที่มีการตั้งค่า <root-path>
ในการกำหนดค่าอาจทำให้ผู้โจมตีเข้าถึงข้อมูลที่ละเอียดอ่อนที่จัดเก็บไว้ในฐานข้อมูลหรือเขียนทับไลบรารีเนทีฟของแอปพลิเคชันได้ ซึ่งนำไปสู่การเรียกใช้โค้ดตามอำเภอใจ
ผลกระทบ
ผลลัพธ์จะแตกต่างกันไปตามการกำหนดค่าและเนื้อหาของไฟล์ แต่โดยทั่วไปจะนำไปสู่การรั่วไหลของข้อมูล (เมื่ออ่าน) หรือการเขียนทับ (เมื่อเขียน) ไฟล์
การลดปัญหา
อย่าใช้องค์ประกอบเส้นทาง <root-path> ในการกำหนดค่า
<root-path>
สอดคล้องกับไดเรกทอรีรูทของอุปกรณ์ (/
) การอนุญาตการดำเนินการนี้ในการกําหนดค่าจะเป็นการให้สิทธิ์เข้าถึงไฟล์และโฟลเดอร์แบบไม่จํากัด รวมถึงแซนด์บ็อกซ์และไดเรกทอรี /sdcard
ของแอป ซึ่งเปิดโอกาสให้นักจู่โจมโจมตีได้กว้างมาก
แชร์ช่วงเส้นทางแคบ
ในไฟล์การกําหนดค่าเส้นทาง ให้หลีกเลี่ยงการแชร์ช่วงเส้นทางที่กว้าง เช่น .
หรือ /
เนื่องจากอาจทำให้ไฟล์ที่มีความละเอียดอ่อนถูกเปิดเผยโดยไม่ตั้งใจ แชร์เฉพาะช่วงเส้นทางที่จำกัด/แคบลง และตรวจสอบว่ามีเฉพาะไฟล์ที่ต้องการแชร์อยู่ในเส้นทางนี้ ซึ่งจะช่วยป้องกันไม่ให้ไฟล์ที่มีความละเอียดอ่อนแสดงโดยไม่ได้ตั้งใจ
ไฟล์การกําหนดค่าทั่วไปที่มีการตั้งค่าที่ปลอดภัยยิ่งขึ้นอาจมีลักษณะดังนี้
Xml
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
ตรวจสอบและตรวจสอบความถูกต้องของ URI ภายนอก
ตรวจสอบ URI ภายนอก (โดยใช้สคีมา content
) และตรวจสอบว่า URI ดังกล่าวไม่ได้ชี้ไปยังไฟล์ในเครื่องของแอปพลิเคชัน ซึ่งจะช่วยป้องกันไม่ให้ข้อมูลรั่วไหลโดยไม่ตั้งใจ
ให้สิทธิ์การเข้าถึงขั้นต่ำ
content URI
มีทั้งสิทธิ์การเข้าถึงระดับอ่านและเขียน ตรวจสอบว่าได้ให้สิทธิ์การเข้าถึงขั้นต่ำที่จำเป็นเท่านั้น
ตัวอย่างเช่น หากต้องมีสิทธิ์อ่านเท่านั้น ให้ให้สิทธิ์ FLAG_GRANT_READ_URI_PERMISSION
อย่างชัดเจน
ไม่ควรจัดเก็บข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) ไว้นอกคอนเทนเนอร์แอปพลิเคชันหรือพื้นที่เก็บข้อมูลเข้าสู่ระบบของระบบ ดังนั้น โปรดหลีกเลี่ยงการใช้องค์ประกอบ <external-path>
เว้นแต่คุณจะยืนยันอย่างชัดเจนว่าข้อมูลที่จัดเก็บ/แชร์นั้นไม่ใช่ข้อมูลที่ละเอียดอ่อน
แหล่งข้อมูล
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-26 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-26 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)"]]