1. 程式人生 > >Android靜態安全檢測 -> Content Provider元件暴露

Android靜態安全檢測 -> Content Provider元件暴露

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】如果必須要有資料提供給外部應用使用,建議對元件進行許可權控制