Android靜態安全檢測 -> Content Provider元件暴露 阿新 • • 發佈:2019-02-12 Content Provider元件暴露 - exported屬性 一、android:exported 該屬性指示了content provider是否可以被其他應用程式使用 1. true 代表該content provider可以被其他應用程式使用,其他所有的應用程式都可以通過該content provider提供的URI訪問由該content provider提供的資料,在訪問的時候,只需要遵循相應的許可權就行 2. false 代表該content provider對其他應用程式來說是不可見的,將android:exported設定為false,用於限制其他應用程式來訪問由該content provider提供的資料,只有當應用程式的UID和該content provider的UID相同時,才可以訪問 3. 預設值 當minSdkVersion或者targetSdkVersion小於16時該屬性的預設值是true;當大於17時,該屬性預設值為false 4. 許可權控制 【1】可以通過設定該屬性的值為false或者通過訪問許可權來控制該content provider是否可以被其他應用程式使用 【2】android:permission 指定讀寫該content provider資料的許可權名稱 5. 參考連結 二、觸發條件 1. 定位AndroidManifest.xml檔案中的content provider元件 【1】對應的特徵:<provider 2. exported屬性的判斷 【1】android:permission 如果設定許可權控制,就認為不存在安全風險 【2】android:exported="true" 未設定許可權控制的情況下,exported屬性設定為true (預設也是true) 三、漏洞原理 【1】匯出的Content Provider元件可以被第三方app任意呼叫,導致敏感資訊洩露,並可能受到目錄遍歷、SQL注入等攻擊風險 【2】詳細的原理&POC 四、修復建議 【1】如果應用的Content Provider元件不必要匯出,建議顯式設定元件的“android:exported”屬性為false 【2】如果必須要有資料提供給外部應用使用,建議對元件進行許可權控制