
Proof-of-concept che dimostra un bypass dell'autenticazione AES-GCM a tag corto in GnuPG's gpgsm (CVE-2026-57062). Forgia un messaggio che viene decriptato sulle build vulnerabili ma viene rifiutato sulle versioni patchate.
Il gpgsm di GnuPG (lo strumento S/MIME e CMS) deriva la lunghezza del tag di autenticazione che verifica dalla OCTET STRING mac in un messaggio CMS AuthEnvelopedData (RFC 5083) AES-256-GCM, e libgcrypt accetta tag corti fino a 4 byte. RFC 5084 richiede almeno 12. Ubuntu ha corretto questo problema in noble gnupg2 2.4.4-2ubuntu17.6 rifiutando qualsiasi authtag più corto di 12 ottetti.
Questa è una prova di concetto: lo stesso identico messaggio CMS contraffatto viene decifrato su un gpgsm vulnerabile e viene rifiutato su uno corretto. Non dimostra un compromesso remoto. Dimostra che un messaggio che dovrebbe fallire l'autenticazione attraversa il gate di sicurezza di gpgsm sulla build vulnerabile.
Esegui lo stesso messaggio su entrambe le build e cambia solo la versione di GnuPG:
| messaggio | gpgsm vulnerabile 2.4.4 | gnupg2 corretto 2.4.4-2ubuntu17.6 |
|---|
| mac 12 (baseline) | decifra | decifra |
| mac 4 (sonda) | decifra (accetta) | rifiutato, uscita non-zero |
gpgsm-cve-2026-57062-cms-gcm-short-tag.txt è una soluzione Exploitmatic (.txt): dati più assert, nessun codice. Il runtime Exploitmatic (Rust, open source) fa il lavoro al momento dell'esecuzione:
gpgsm --export, catturato per intero.cmsgcm del runtime costruisce un messaggio CMS AuthEnvelopedData AES-256-GCM per quel certificato con un mac da 12 o 4 byte. Serve solo il certificato pubblico, quindi funziona contro qualsiasi macchina nuova.gpgsm --decrypt della macchina su di esso, asserendo il contenuto contraffatto.Un gpgsm vulnerabile autentica il messaggio con tag da 4 byte ed emette il contenuto. Un gpgsm corretto rifiuta ed esce con codice non-zero, quindi nulla arriva su stdout e l'assert fallisce.
Prerequisito: puoi già fare ssh alla macchina come root con la tua identità normale (config ssh, agent o chiave predefinita). La soluzione non contiene credenziali operative né stato del target.
exploitmatic run gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 127.0.0.1
Punta a un'altra macchina o alla replica corretta con --var, senza modificare file:
exploitmatic run gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 127.0.0.1 --var ssh_port=2223
recipient (predefinito USN-8720-Recipient) indica il certificato esportato dal target.
| target | risultato |
|---|---|
| gpgsm 2.4.4 stock (compilato da sorgente), ssh 2222 | 3/3 verificati |
| noble gnupg2 2.4.4-2ubuntu17.6, ssh 2223 | 2/3 non verificati (il tag corto fallisce) |
Solo per test autorizzati e ricerca, su sistemi di tua proprietà o per cui hai il permesso di testare.