
Proof of concept (builder) per CVE-2026-39973 (apktool)
Questo è un piccolo builder di file apk in C# per CVE-2026-39973.
CVE-2026-39973 è una vulnerabilità di path traversal all'interno del repository github iBotPeaches/Apktool che interessa la versione 3.0.1.
Consente agli attaccanti di creare le proprie risorse e di iniettare una sequenza ..\ all'interno del tipo di una voce, permettendo a un attaccante di scrivere qualsiasi file in o nel percorso di avvio di Windows.
~/.bashrcQuesta vulnerabilità deriva da una regressione di sicurezza nel commit e10a045 (PR #4041) che rimuove BrutIO.detectPossibleDirectoryTraversal() da ResFileDecoder.java
ResFileDecoder.java#L103-L109 PRIMA:
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 DOPO:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName()
+ (ext.isEmpty() ? "" : "." + ext);
Questo commit ha rimosso un controllo giudicato "inutile" sull'intero percorso di output poiché entry.name era già controllato in precedenza (costruttore di ResEntrySpec).
L'autore ha dimenticato che il nome del tipo della voce poteva essere soggetto a path traversal creando un resources.arsc dannoso.
resources.arsc è un file che contiene i dati delle risorse, i percorsi, i nomi dei tipi e altro.
Contiene tutto ciò di cui abbiamo bisogno per poter modificare il nome del tipo o creare un file resource.arsc per sfruttare Apktool.
Nonostante la sua ricorrenza, ho trovato solo documentazione scarsa ma soddisfacente sulla serializzazione.
A questo punto, è fortemente consigliato leggere la documentazione di apktool.
Ho iniziato basandomi direttamente su Apktool poiché avrò bisogno di creare un file resources.arsc esclusivamente per questa applicazione.
Ho scaricato un file APK casuale da internet e l'ho aperto con 7zip. Poi ho estratto il file resources.arsc e ho iniziato a studiare le strutture dati insieme al codice del parser di Apktool.
Poi ho creato un piccolo builder in C# per il file resources.arsc, scrivendo una ResTable e una ResPackage con un ResType che contiene la sequenza ..\ e il percorso della cartella di avvio di Windows, e ha anche una voce che è il file payload.