
개념 증명(PoC)으로, GnuPG의 gpgsm에서 CMS AES-GCM 짧은 태그 인증 우회(CVE-2026-57062)를 시연합니다. 취약한 빌드에서는 복호화되지만 패치된 버전에서는 거부되는 메시지를 위조합니다.
GnuPG의 gpgsm(S/MIME 및 CMS 도구)은 CMS AuthEnvelopedData(RFC 5083) AES-256-GCM 메시지의 mac OCTET STRING에서 검증하는 인증 태그 길이를 파생하며, libgcrypt는 4바이트만큼 짧은 태그도 허용합니다. RFC 5084는 최소 12바이트를 요구합니다. Ubuntu는 noble gnupg2 2.4.4-2ubuntu17.6에서 12옥텟보다 짧은 authtag를 거부하도록 수정했습니다.
이것은 개념 증명입니다: 동일한 위조 CMS 메시지가 취약한 gpgsm에서는 복호화되고 패치된 버전에서는 거부됩니다. 원격 침해를 입증하지는 않습니다. 인증에 실패해야 하는 메시지가 취약한 빌드에서 gpgsm 보안 게이트를 통과한다는 것을 입증합니다.
동일한 메시지를 두 빌드 모두에 대해 실행하고 GnuPG 버전만 변경합니다:
| 메시지 | 취약한 gpgsm 2.4.4 | 패치된 gnupg2 2.4.4-2ubuntu17.6 |
|---|
| mac 12 (기준) | 복호화됨 | 복호화됨 |
| mac 4 (프로브) | 복호화됨 (수락) | 거부됨, 0이 아닌 종료 코드 |
gpgsm-cve-2026-57062-cms-gcm-short-tag.txt는 Exploitmatic 솔루션(.txt)입니다: 데이터와 assert만 있고 코드는 없습니다. Exploitmatic 런타임(Rust, 오픈 소스)이 실행 시 작업을 수행합니다:
gpgsm --export로 수신자의 공개 인증서를 내보내어 전체를 캡처합니다.cmsgcm 변환은 해당 인증서에 대해 12바이트 또는 4바이트 mac을 가진 CMS AuthEnvelopedData AES-256-GCM 메시지를 빌드합니다. 공개 인증서만 필요하므로 모든 새 시스템에서 작동합니다.gpgsm --decrypt를 실행하여 위조된 콘텐츠를 assert합니다.취약한 gpgsm은 4바이트 태그 메시지를 인증하고 콘텐츠를 출력합니다. 패치된 gpgsm은 거부하고 0이 아닌 코드로 종료하므로 stdout에 아무것도 도달하지 않으며 assert가 실패합니다.
전제 조건: 일반 신원(ssh 구성, 에이전트 또는 기본 키)으로 이미 박스에 root로 ssh할 수 있어야 합니다. 솔루션에는 운영자 자격 증명이나 대상 상태가 포함되지 않습니다.
exploitmatic run gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 127.0.0.1
파일 편집 없이 --var로 다른 박스 또는 패치된 복제본을 지정합니다:
exploitmatic run gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 127.0.0.1 --var ssh_port=2223
recipient(기본값 USN-8720-Recipient)는 대상에서 내보낸 인증서의 이름을 지정합니다.
| 대상 | 결과 |
|---|---|
| 기본 gpgsm 2.4.4 (소스에서 빌드), ssh 2222 | 3/3 검증됨 |
| noble gnupg2 2.4.4-2ubuntu17.6, ssh 2223 | 2/3 검증되지 않음 (짧은 태그 실패) |
소유하거나 테스트 권한이 있는 시스템에서만 공인된 테스트 및 연구용입니다.