frawlaboy/CVE-2026-39973-PoC

GitHub: frawlaboy/CVE-2026-39973-PoC

一个用 C# 编写的 CVE-2026-39973 概念验证工具,通过手工构造包含路径遍历 payload 的 resources.arsc 文件来利用 Apktool 3.0.1 中的安全回归漏洞,实现任意文件写入。

Stars: 1 | Forks: 0

# CVE-2026-39973-PoC 这是一个用于 [CVE-2026-39973](https://github.com/advisories/GHSA-m8mh-x359-vm8m) 的小型 C# apk 文件构建器。 ## 免责声明 - 这是一个**概念验证**,仅供教育目的使用! - 在编写此代码或文档时,**没有**使用 AI(除了关于序列化的小问题)。 - 我的学识**有限**。这是我的第一个 CVE PoC。文档可能存在错误或不完整之处。 - 代码可能难以阅读,因为我当时很匆忙且睡眠不足(抱歉)。 # CVE-2026-39973 [CVE-2026-39973](https://github.com/iBotPeaches/Apktool/security/advisories/GHSA-m8mh-x359-vm8m) 是 github 仓库 [iBotPeaches/Apktool](https://github.com/iBotPeaches) 中的一个路径遍历漏洞,影响版本 3.0.1。 它允许攻击者创建自己的资源,并在条目的类型中注入 `..\` 序列,从而允许威胁行为者将任意文件写入 `~/.bashrc` 或 Windows 启动路径。 ## 安全回归 此漏洞源于提交 [e10a045](https://github.com/iBotPeaches/Apktool/commit/e10a0450c7afcd9462c0b76bcbff0e7428b92bdd)(PR [#4041](https://github.com/iBotPeaches/Apktool/pull/4041))中的安全回归,该提交从 `ResFileDecoder.java` 中移除了 `BrutIO.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` 已经被[事先检查过](https://github.com/iBotPeaches/Apktool/blob/main/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/ResEntrySpec.java#L36)(`ResEntrySpec` 构造函数)。 作者忘记了,通过精心构造恶意的 `resources.arsc`,条目的 Type 名称可能会成为路径遍历攻击的目标。 ## Resources.arsc `resources.arsc` 是一个包含资源数据、路径、类型名称等内容的文件。 它存储了我们需要的一切信息,使我们能够修改类型名称或精心构造 `resource.arsc` 文件来利用 Apktool。 尽管它经常出现,但我只找到了关于其序列化的[简陋但差强人意的文档](https://apktool.org/wiki/advanced/resources-arsc/)。 **此时,强烈建议阅读 Apktool 的[文档]((https://apktool.org/wiki/advanced/resources-arsc/))。** 我开始以 Apktool 本身为基础,因为我需要专门为此应用程序构建一个 `resources.arsc` 文件。 我从互联网上下载了一个随机的 APK 文件并用 7zip 打开。然后我提取了 `resources.arsc` 文件,并开始结合 Apktool 的解析器代码研究其数据结构。 接着我用 C# 制作了一个小型的 `resources.arsc` 文件构建器,编写了一个 `ResTable` 和一个包含单个 `ResType` 的 `ResPackage`,该 `ResType` 带有 `..\` 序列和 Windows 启动文件夹的路径,它还包含一个作为 payload 文件的条目。
标签:AMSI绕过, Apktool, APK文件构建器, .bashrc, CISA项目, CVE-2026-39973, DNS 解析, OPA, PoC, Windows启动目录, 任意文件写入, 威胁检测, 安全 regression, 安全漏洞, 安卓逆向, 恶意文件生成, 教育用途, 数据展示, 文件包含, 暴力破解, 红队, 资源文件解析, 路径穿越, 靶场