简介
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图
在 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声明了。
这里作者还专门增加了一个
配合一个测试用的payload
作为检测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漏洞。
已知受影响版本
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/