หมวดหมู่ OWASP: MASVS-STORAGE: 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 เหล่านั้นไม่ได้ชี้ไปยังไฟล์ในเครื่องของแอปพลิเคชัน ซึ่งจะช่วยป้องกันการรั่วไหลของข้อมูลโดยไม่ได้ตั้งใจ
ให้สิทธิ์เข้าถึงขั้นต่ำ
A content URI สามารถมีทั้งสิทธิ์เข้าถึงแบบอ่านและเขียน ตรวจสอบว่าได้ให้สิทธิ์เข้าถึงที่จำเป็นขั้นต่ำเท่านั้น
ตัวอย่างเช่น หากจำเป็นต้องมีสิทธิ์อ่าน เท่านั้น ให้ให้สิทธิ์ FLAG_GRANT_READ_URI_PERMISSION อย่างชัดเจน
หลีกเลี่ยงการใช้ <external-path> สำหรับจัดเก็บ/แชร์ข้อมูลที่ละเอียดอ่อน
ไม่ควรจัดเก็บข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) นอกคอนเทนเนอร์ของแอปพลิเคชันหรือสิ่งอำนวยความสะดวกในการจัดเก็บข้อมูลเข้าสู่ระบบของระบบ ดังนั้น ให้หลีกเลี่ยงการใช้องค์ประกอบ <external-path> เว้นแต่คุณจะยืนยันอย่างชัดเจนว่าข้อมูลที่จัดเก็บ/แชร์นั้นไม่ละเอียดอ่อน