这是一个针对 CVE-2026-39973 的小型 C# APK 文件构建器。
CVE-2026-39973 是 GitHub 仓库 iBotPeaches/Apktool 中的一个路径遍历漏洞,影响版本 3.0.1。
该漏洞允许攻击者创建自己的资源,并在条目的类型中注入 ..\ 序列,从而使威胁行为者能够将任意文件写入 ~/.bashrc 或 Windows 启动路径。
此漏洞源于提交 e10a045(PR )中的安全回归,该提交从 中移除了 。
ResFileDecoder.javaBrutIO.detectPossibleDirectoryTraversal()修改前的 ResFileDecoder.java#L103-L109:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName();
if (BrutIO.detectPossibleDirectoryTraversal(outResPath)) {
LOGGER.warning("Potentially malicious file path: " + outResPath + ", using instead: " + inResPath);
outResPath = inResPath;
} else if (!ext.isEmpty()) {
outResPath += "." + ext;
}
修改后的 ResFileDecoder.java#L103-L104:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName()
+ (ext.isEmpty() ? "" : "." + ext);
该提交移除了对整个输出路径的一个被判定为“无用”的检查,因为 entry.name 已经事先被检查过(在 ResEntrySpec 构造函数中)。
作者忘记了,通过构造我们自己的恶意 resources.arsc,条目的类型名称可能会受到路径遍历的影响。
resources.arsc 是一个包含资源数据、路径、类型名称等信息的文件。
它存储了我们修改类型名称或构造 resource.arsc 文件以利用 Apktool 所需的一切。
尽管它很常见,但我只找到了简陋但令人满意的文档关于序列化的说明。
此时,强烈建议阅读 apktool 的文档。
我直接以 Apktool 为基础开始研究,因为我需要专门为此应用程序构建一个 resources.arsc 文件。
我从互联网上下载了一个随机的 APK 文件,并用 7zip 打开它。然后我提取了 resources.arsc 文件,开始结合 Apktool 的解析器代码研究数据结构。
接着,我编写了一个小型 C# 构建器来生成 resources.arsc 文件,写入一个 ResTable 和一个 ResPackage,其中包含一个带有 ..\ 序列和 Windows 启动文件夹路径的 ResType,它还有一个条目,即载荷文件。