Apktool未正確解析XML導致的XXE漏洞分析
簡介
Apktool未正確解析XML導致XXE漏洞。以下做一個簡單的分析和演示Apktool在進行回編譯操作時產生XXE漏洞的過程。
漏洞描述
潛在的攻擊者可通過構造XML文件,在受影響版本的Apktool對該XML文件解析時觸發,造成受害者電腦上任意文件的訪問。
演示
從Apktool的Github項目下載受影響的apktool_2.2.2.jar(https://github.com/iBotPeaches/Apktool/releases/download/v2.2.2/apktool_2.2.2.jar)
使用受影響的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圖
https://github.com/iBotPeaches/Apktool/commit/f19317d87c316ed254aafa0a27eddd024e25ec6c#diff-84f49a5539f89dd92ae7ff22216416d9
在 brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java
這裡加了一句:
docFactory.setFeature(FEATURE_DISABLE_DOCTYPE_DECL, true);
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 https://github.com/iBotPeaches/Apktool/releases/download/v2.2.1/apktool_2.2.1.jar
Apktool v2.2.2: https://github.com/iBotPeaches/Apktool/releases/download/v2.2.2/apktool_2.2.2.jar
給開發者和安全分析人員的建議
使用apktool v2.2.3及其以上版本;
檢查所有集成了apktool的工具,確保其依賴的apktool在v2.2.3及其以上版本。
參考:
https://research.checkpoint.com/parsedroid-targeting-android-development-research-community/
http://www.theregister.co.uk/2017/12/06/java_and_android_vulns/
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招實習生】消費升級剛剛開始,一起來研究吧!