ไดเรกทอรีที่เปิดเผยอย่างไม่ถูกต้องไปยัง 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 อย่างชัดเจน

หลีกเลี่ยงการใช้ <external-path> สำหรับจัดเก็บ/แชร์ข้อมูลที่ละเอียดอ่อน

ไม่ควรจัดเก็บข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) ไว้นอกคอนเทนเนอร์แอปพลิเคชันหรือพื้นที่เก็บข้อมูลเข้าสู่ระบบของระบบ ดังนั้น โปรดหลีกเลี่ยงการใช้องค์ประกอบ <external-path> เว้นแต่คุณจะยืนยันอย่างชัดเจนว่าข้อมูลที่จัดเก็บ/แชร์นั้นไม่ใช่ข้อมูลที่ละเอียดอ่อน

แหล่งข้อมูล