
Доказательство концепции (сборщик) для CVE-2026-39973 (apktool)
Это небольшой C#-конструктор APK-файлов для CVE-2026-39973.
CVE-2026-39973 — это уязвимость обхода пути в репозитории GitHub iBotPeaches/Apktool, затрагивающая версию 3.0.1.
Она позволяет злоумышленникам создавать собственные ресурсы и внедрять последовательность ..\ в тип записи, что даёт возможность записать любой файл в или в папку автозагрузки Windows.
~/.bashrcЭта уязвимость возникла из-за регрессии безопасности в коммите e10a045 (PR #4041), который удаляет BrutIO.detectPossibleDirectoryTraversal() из ResFileDecoder.java
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 с одним ResType, который содержит последовательность ..\ и путь к папке автозагрузки Windows, а также одну запись, которая является файлом полезной нагрузки.