دسته 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
) اعتبارسنجی کنید و مطمئن شوید که به فایل های محلی برنامه شما اشاره نمی کنند. این از هرگونه درز اطلاعات سهوی جلوگیری می کند.
اعطای حداقل مجوزهای دسترسی
یک content URI
میتواند هم مجوز دسترسی خواندن و نوشتن داشته باشد. اطمینان حاصل کنید که فقط حداقل مجوز دسترسی لازم داده شده است. برای مثال، اگر فقط مجوز خواندن مورد نیاز است، صراحتاً فقط FLAG_GRANT_READ_URI_PERMISSION
اعطا کنید.
از استفاده از <external-path> برای ذخیره/اشتراک گذاری اطلاعات حساس خودداری کنید
دادههای حساس، مانند اطلاعات شناسایی شخصی (PII)، نباید خارج از ظرف برنامه یا امکانات ذخیرهسازی اعتبار سیستم ذخیره شوند. بنابراین، از استفاده از عنصر <external-path>
خودداری کنید، مگر اینکه صریحاً تأیید کرده باشید که اطلاعات ذخیره شده/اشتراکگذاری شده حساس نیستند.