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(探测) | 解密(接受) | 拒绝,非零退出 |
gpgsm-cve-2026-57062-cms-gcm-short-tag.txt 是一个 Exploitmatic 解决方案(.txt):数据加断言,无代码。Exploitmatic 运行时(Rust,开源)在运行时完成工作:
gpgsm --export 导出收件人自己的公钥证书,完整捕获。cmsgcm 转换构建一个针对该证书的 CMS AuthEnvelopedData AES-256-GCM 消息,mac 为 12 或 4 字节。仅需要公钥证书,因此它适用于任何全新系统。gpgsm --decrypt,断言伪造的内容。易受攻击的 gpgsm 验证 4 字节标签消息并输出内容。已修补的 gpgsm 拒绝并非零退出,因此没有内容到达 stdout,断言失败。
前提条件:您已经可以使用您的正常身份(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 未验证(短标签失败) |
仅用于授权测试和研究,适用于您拥有或有权测试的系统。