Apktool未正確解析XML導致的XXE漏洞分析

簡介

Apktool未正確解析XML導致XXE漏洞。以下做一個簡單的分析和演示Apktool在進行回編譯操作時產生XXE漏洞的過程。

漏洞描述

潛在的攻擊者可通過構造XML文件,在受影響版本的Apktool對該XML文件解析時觸發,造成受害者電腦上任意文件的訪問。

演示

從Apktool的Github項目下載受影響的apktool_2.2.2.jar(github.com/iBotPeaches/

使用受影響的Apktool版本v2.2.2進行回編譯打包的過程中觸發XXE漏洞。

java -jar ~/Downloads/apktool_2.2.2.jar b ApkIDE_test -o ApkIDE_test_modified1.apk

而使用剛修復的版本v2.2.3 commit f19317d87c316ed254aafa0a27eddd024e25ec6c 進行回編譯打包時

則產生以下提示:

從而修復了漏洞。

漏洞分析

先來一張修復之後的commit的diff圖

github.com/iBotPeaches/

在 brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java

這裡加了一句:

docFactory.setFeature(FEATURE_DISABLE_DOCTYPE_DECL, true);

private static final String FEATURE_DISABLE_DOCTYPE_DECL = "http://apache.org/xml/features/disallow-doctype-decl";

作者的log為「Prevent doctypes declarations」,即不允許XML中的doctypte聲明了。n

這裡作者還專門增加了一個

brut.apktool/apktool-lib/src/test/java/brut/androlib/ExternalEntityTest.java

配合一個測試用的payload

brut.apktool/apktool-lib/src/test/resources/brut/apktool/doctype/AndroidManifest.xml

作為檢測XXE的測試。

代碼追蹤

當我們使用這個命令

java -jar ~/Downloads/apktool_2.2.2.jar b ApkIDE_test -o ApkIDE_test_modified1.apk

進行回編譯打包時,

在brut.apktool.Main類的main()方法中,對命令行參數進行解析,若使用b選項,則調用cmdBuild()方法,

cmdBuild()方法對命令行的-o(指定輸出目錄)等進行解析,並最終調用Androlib的build()方法,將命令行中待回編譯打包的目錄(例子中是ApkIDE_test)和最終生成的apk文件的路徑,作為參數傳入Androlib的build(ExtFile appDir, File outFile)方法。

在Androlib的build(ExtFile appDir, File outFile)方法中,

先對AndroidManifest.xml進行了備份,然後調用brut.androlib.res.xml.ResXmlPatcher類的

fixingPublicAttrsInProviderAttributes()方法對傳入的manifest文件進行解析。

fixingPublicAttrsInProviderAttributes()調用了loadDocument(file)方法

而loadDocument(file)未對傳入的file進行檢查和限制就執行了parse(file),直接對AndroidManifest.xml文件進行解析。

於是惡意攻擊者可構造惡意的AndroidManifest.xml使得安全分析人員調用Apktool的b選項進行回編譯打包時,觸發XXE漏洞。

而修復版(參考上面的diff)正是在這裡增加了一個setFeature()方法,

docFactory.setFeature(FEATURE_DISABLE_DOCTYPE_DECL, true);

從而避免了由於對DOCTYPE的解析導致的XXE漏洞。n

已知受影響版本

Apktool v2.2.1 github.com/iBotPeaches/

Apktool v2.2.2: github.com/iBotPeaches/

給開發者和安全分析人員的建議

使用apktool v2.2.3及其以上版本;

檢查所有集成了apktool的工具,確保其依賴的apktool在v2.2.3及其以上版本。

參考:

research.checkpoint.com

theregister.co.uk/2017/

http://www.wjdiankong.cn/android%E9%80%86%E5%90%91%E4%B9%8B%E6%97%85-%E5%8F%8D%E7%BC%96%E8%AF%91%E5%88%A9%E5%99%A8apktool%E5%92%8Cjadx%E6%BA%90%E7%A0%81%E5%88

登錄安全客 - 有思想的安全新媒體來獲取更多信息吧~


推薦閱讀:

Data Scientist (數據科學家) 和 Quant (數量金融分析師) 之間該如何選擇?
【華創資本VC招實習生】消費升級剛剛開始,一起來研究吧!

TAG:漏洞 | 网络安全 | 互联网 |