简介
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

从而修复了漏洞。
漏洞分析
先来一张修复之后的commit的diff图
https://github.com/iBotPeaches/Apktool/commit/f19317d87c316ed254aafa0a27eddd024e25ec6c
在 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声明了。
这里作者还专门增加了一个 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()方法,

ApkIDE_test
)和最终生成的apk文件的路径,作为参数传入Androlib的build(ExtFile appDir, File outFile)方法。







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/

评论