
Prova de conceito (builder) para CVE-2026-39973 (apktool)
Este é um pequeno construtor de arquivos APK em C# para o CVE-2026-39973.
CVE-2026-39973 é uma vulnerabilidade de path traversal dentro do repositório do github iBotPeaches/Apktool que afeta a versão 3.0.1.
Ela permite que atacantes criem seus próprios recursos e injetem uma sequência ..\ dentro do tipo de uma entrada, permitindo que um agente de ameaça grave qualquer arquivo em ou no caminho de inicialização do Windows.
~/.bashrcEsta vulnerabilidade vem de uma regressão de segurança no commit e10a045 (PR #4041) que remove BrutIO.detectPossibleDirectoryTraversal() de ResFileDecoder.java
ResFileDecoder.java#L103-L109 ANTES:
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 DEPOIS:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName()
+ (ext.isEmpty() ? "" : "." + ext);
Este commit removeu uma verificação considerada "inútil" em todo o caminho de saída, pois entry.name já era verificado anteriormente (construtor de ResEntrySpec).
O autor esqueceu que o nome do tipo da entrada poderia estar sujeito a path traversal ao criarmos nosso próprio resources.arsc malicioso.
resources.arsc é um arquivo que contém os dados de recursos, caminhos, nomes de tipos e muito mais.
Ele armazena tudo o que precisamos para modificar o nome do tipo ou criar um arquivo resource.arsc para explorar o Apktool.
Apesar de sua recorrência, encontrei apenas documentação pobre, porém satisfatória sobre a serialização.
Neste ponto, é fortemente recomendado ler a documentação do apktool.
Comecei me baseando diretamente no Apktool, pois vou precisar construir um arquivo resources.arsc exclusivamente para esta aplicação.
Baixei um arquivo APK aleatório da internet e o abri com o 7zip. Então extraí o arquivo resources.arsc e comecei a estudar as estruturas de dados junto com o código do parser do Apktool.
Depois, criei um pequeno construtor em C# para o arquivo resources.arsc, escrevendo um ResTable e um ResPackage com um ResType que contém a sequência ..\ e o caminho da pasta de Inicialização do Windows; ele também possui uma entrada que é o arquivo de payload.