Activity組件暴露導致本地拒絕服務


這幾天團隊打算一起學習Android App漏洞挖掘方面的知識,於是乎拿了一個app當測試例子,爭取在上面找到漏洞。在學習過程中發現Android四大組件的安全性還是占有較大的比重,另外比較關心的是數據的安全性。數據泄漏、明文存儲等和數據相關都是比較重要的。但是今天找到的一個漏洞是關於Activity組件的,本地拒絕服務漏洞

 

同時學習了drozer的使用方法,利用drozer幫忙找漏洞。

 

下面總結一些常用的drozer命令:

run app.package.info -f xxx

xxx是包名的一部分,運行這條命令之后會顯示完整的包名

run app.package.info -a <包名>

運行這條命令會打印出包相關的信息,包括版本、路徑、權限、uid、gid等

run app.package.attacksurface <包名>  

運行這條命令之后會打印出這個應用四大組件的攻擊面,Activity, Service, Content Provider, Broadcast是否有暴露的風險

run app.activity.info -a <包名>

運行這條命令會打印出exported的activity,並且顯示是否需要相應的權限

run app.activity.start --component <包名> <activity>

如果activity是exported並且不需要權限,那么運行這條命令就可以啟動相應的activity了

(目前只測試了activity組件,所以關於其他組件的命令暫時還沒有使用)

 

首先說明一下這個本地拒絕服務漏洞的大概原理

通過drozer可以找到exported的activity,而許多activity的調用是不需要權限的,即permission=null。意味着,其他應用無須權限就可以調用這些activity。同時,如果activity的調用是需要參數的,那么在調用時不帶上參數就會因為輸入異常導致應用崩潰了,這樣就造成了本地拒絕服務。

 

漏洞修補的方法也很簡單,可以從以下三個方面下手:

1.不需要被外部調用的activity設置android:exported="false";

2.若需要外部調用,需自定義signature或者signatureOrSystem級別的權限;

3.注冊的組件請嚴格校驗輸入參數,注意空值判定和類型轉換判斷

 

簡單的Poc:

Intent intent = new Intent();

intent.setComponent(new ComponentName(<包名>, <activity>));

intent.putExtra("", "");

startActivity(intent);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM