
Prova de conceito demonstrando uma bypass de autenticação de tag curta AES-GCM em CMS no gpgsm do GnuPG (CVE-2026-57062). Forja uma mensagem que é descriptografada em builds vulneráveis, mas é rejeitada em versões corrigidas.
O gpgsm do GnuPG (a ferramenta S/MIME e CMS) deriva o comprimento da tag
de autenticação que verifica a partir do OCTET STRING mac em uma mensagem
CMS AuthEnvelopedData (RFC 5083) AES-256-GCM, e o libgcrypt aceita tags tão
curtas quanto 4 bytes. A RFC 5084 exige pelo menos 12. O Ubuntu corrigiu
isso no noble gnupg2 2.4.4-2ubuntu17.6 rejeitando qualquer authtag mais
curta que 12 octetos.
Esta é uma prova de conceito: exatamente a mesma mensagem CMS forjada é descriptografada em um gpgsm vulnerável e rejeitada em um corrigido. Ela não demonstra comprometimento remoto. Ela demonstra que uma mensagem que deveria falhar na autenticação atravessa o portão de segurança do gpgsm na versão vulnerável.
Execute a mesma mensagem contra ambas as versões e apenas a versão do GnuPG muda:
| mensagem | gpgsm 2.4.4 vulnerável | gnupg2 2.4.4-2ubuntu17.6 corrigido |
|---|
| mac 12 (linha de base) | descriptografa | descriptografa |
| mac 4 (sonda) | descriptografa (aceita) | rejeitada, saída não zero |
gpgsm-cve-2026-57062-cms-gcm-short-tag.txt é uma solução Exploitmatic
(.txt): dados mais asserts, sem código. O runtime Exploitmatic (Rust, código
aberto) faz o trabalho em tempo de execução:
gpgsm --export, capturado por completo.cmsgcm do runtime constrói uma mensagem CMS
AuthEnvelopedData AES-256-GCM para esse certificado com um mac de 12 ou
4 bytes. Apenas o certificado público é necessário, então funciona
contra qualquer máquina nova.gpgsm --decrypt da máquina nela, verificando o
conteúdo forjado.Um gpgsm vulnerável autentica a mensagem com tag de 4 bytes e emite o conteúdo. Um gpgsm corrigido recusa e sai com código não zero, então nada chega ao stdout e o assert falha.
Pré-condição: você já consegue fazer ssh para a máquina como root com sua identidade normal (config ssh, agente ou chave padrão). A solução não carrega credencial de operador nem estado do alvo.
exploitmatic run gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 127.0.0.1
Aponte para outra máquina ou a réplica corrigida com --var, sem editar
arquivos:
exploitmatic run gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 127.0.0.1 --var ssh_port=2223
recipient (padrão USN-8720-Recipient) nomeia o certificado exportado
do alvo.
| alvo | resultado |
|---|---|
| gpgsm 2.4.4 padrão (compilado a partir do código-fonte), ssh 2222 | 3/3 verificado |
| noble gnupg2 2.4.4-2ubuntu17.6, ssh 2223 | 2/3 não verificado (tag curta falha) |
Apenas para testes autorizados e pesquisa, em sistemas que você possui ou tem permissão para testar.