หมวดหมู่ 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>
เว้นแต่คุณจะยืนยันอย่างชัดเจนว่าข้อมูลที่จัดเก็บ/แชร์นั้นไม่ใช่ข้อมูลที่ละเอียดอ่อน