
Proof of Concept (Builder) für CVE-2026-39973 (apktool)
Dies ist ein kleiner C#-APK-Datei-Builder für CVE-2026-39973.
CVE-2026-39973 ist eine Path-Traversal-Schwachstelle im GitHub-Repository iBotPeaches/Apktool, die Version 3.0.1 betrifft.
Sie ermöglicht es Angreifern, eigene Ressourcen zu erstellen und eine ..\-Sequenz in den Typ eines Eintrags einzuschleusen, wodurch ein Bedrohungsakteur beliebige Dateien in oder den Windows-Startpfad schreiben kann.
~/.bashrcDiese Schwachstelle stammt aus einer Sicherheitsregression im Commit e10a045 (PR #4041), der BrutIO.detectPossibleDirectoryTraversal() aus ResFileDecoder.java entfernt.
ResFileDecoder.java#L103-L109 VORHER:
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 NACHHER:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName()
+ (ext.isEmpty() ? "" : "." + ext);
Dieser Commit entfernte eine als „nutzlos" eingestufte Prüfung des gesamten Ausgabepfads, da entry.name bereits vorher geprüft wurde (ResEntrySpec-Konstruktor).
Der Autor vergaß, dass der Typname des Eintrags durch das Erstellen einer eigenen bösartigen resources.arsc einer Path Traversal unterliegen könnte.
resources.arsc ist eine Datei, die die Ressourcendaten, Pfade, Typnamen und mehr enthält.
Sie speichert alles, was wir benötigen, um den Typnamen zu ändern oder eine resource.arsc-Datei zu erstellen, um Apktool auszunutzen.
Trotz ihres häufigen Vorkommens habe ich nur dürftige, aber zufriedenstellende Dokumentation zur Serialisierung gefunden.
An diesem Punkt wird dringend empfohlen, die Dokumentation von Apktool zu lesen.
Ich begann, mich direkt auf Apktool zu stützen, da ich eine resources.arsc-Datei ausschließlich für diese Anwendung erstellen muss.
Ich lud eine zufällige APK-Datei aus dem Internet herunter und öffnete sie mit 7zip. Dann extrahierte ich die resources.arsc-Datei und begann, die Datenstrukturen zusammen mit dem Parser-Code von Apktool zu studieren.
Anschließend erstellte ich einen kleinen C#-Builder für die resources.arsc-Datei, der eine ResTable und eine ResPackage mit einem ResType schreibt, der die ..\-Sequenz und den Pfad des Windows-Startordners enthält. Er enthält außerdem einen Eintrag, der die Payload-Datei ist.