
Доказательство концепции, демонстрирующее обход аутентификации CMS AES-GCM с коротким тегом в gpgsm из GnuPG (CVE-2026-57062). Формирует сообщение, которое расшифровывается на уязвимых сборках, но отклоняется на исправленных версиях.
Инструмент gpgsm из GnuPG (инструмент для S/MIME и CMS) извлекает длину тега аутентификации, которую он проверяет, из OCTET STRING mac в сообщении CMS AuthEnvelopedData (RFC 5083) AES-256-GCM, а libgcrypt принимает теги длиной всего 4 байта. RFC 5084 требует минимум 12. Ubuntu исправила это в noble gnupg2 2.4.4-2ubuntu17.6, отклоняя любой authtag короче 12 октетов.
Это proof of concept: одно и то же подделанное CMS-сообщение расшифровывается на уязвимом gpgsm и отклоняется на пропатченном. Он не демонстрирует удалённую компрометацию. Он демонстрирует, что сообщение, которое должно провалить аутентификацию, проходит через защитный шлюз gpgsm на уязвимой сборке.
Запустите одно и то же сообщение на обеих сборках, и изменится только версия GnuPG:
| сообщение | уязвимый gpgsm 2.4.4 | пропатченный gnupg2 2.4.4-2ubuntu17.6 |
|---|
| mac 12 (базовый) | расшифровывается | расшифровывается |
| mac 4 (проба) | расшифровывается (принимается) | отклонено, ненулевой код выхода |
gpgsm-cve-2026-57062-cms-gcm-short-tag.txt — это решение Exploitmatic (.txt): данные плюс asserts, без кода. Среда выполнения Exploitmatic (Rust, open source) выполняет работу во время выполнения:
gpgsm --export, захваченного целиком.cmsgcm среды выполнения строит сообщение CMS AuthEnvelopedData AES-256-GCM для этого сертификата с mac длиной 12 или 4 байта. Нужен только публичный сертификат, поэтому это работает против любой свежей системы.gpgsm --decrypt системы на нём, проверяя подделанное содержимое.Уязвимый gpgsm аутентифицирует сообщение с 4-байтовым тегом и выдаёт содержимое. Пропатченный gpgsm отказывается и завершается с ненулевым кодом, поэтому ничего не попадает в stdout, и assert завершается неудачей.
Предварительное условие: вы уже можете подключиться по ssh к системе как root с вашей обычной учётной записью (ssh config, agent или ключ по умолчанию). Решение не содержит учётных данных оператора и не требует состояния цели.
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) задаёт имя сертификата, экспортированного с цели.
| цель | результат |
|---|---|
| stock gpgsm 2.4.4 (собран из исходников), ssh 2222 | 3/3 проверено |
| noble gnupg2 2.4.4-2ubuntu17.6, ssh 2223 | 2/3 не проверено (short-tag не проходит) |
Только для авторизованного тестирования и исследований, на системах, которыми вы владеете или на тестирование которых у вас есть разрешение.