GraoMelo/CVE-2026-TDES-Wrap-PoC

GitHub: GraoMelo/CVE-2026-TDES-Wrap-PoC

针对 OpenSSL 4.0.0 中 TDES Wrap 密码堆缓冲区溢出漏洞(CVE-2026 草案)的概念验证与修复补丁项目。

Stars: 0 | Forks: 0

# CVE-2026-TDES-Wrap-PoC ## OpenSSL 4.0.0 中的 TDES Wrap 密码堆缓冲区溢出 **CVSS 3.1:** 8.2 (高危) — `AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H` ### 根本原因 TDES Wrap 密码 (`des-ede3-wrap`) 将其输出计算为 `inl + 16` (根据 RFC 3217,包含 8 字节 AIV + 8 字节 SHA-1 ICV),但是: 1. **EVP 层** (`crypto/evp/evp_enc.c:690,801`) 将 `outsize` 预估为 `inl + 8` 用于 WRAP 模式 — 少了 8 字节 2. **Provider 检查** (`cipher_tdes_wrap.c:139,159`) 验证的是 `outsize < inl` 而不是 `outsize < inl + 16` 最终结果:每次调用 `EVP_EncryptUpdate` 使用 `des-ede3-wrap` 时都会触发 **8 字节的固定堆缓冲区溢出**。 ### 影响 - 堆元数据损坏 → tcache 投毒 → 潜在的 RCE - 已确认会导致 glibc 堆损坏崩溃 (`double free`, `invalid size`) - 可通过 PKCS#11/KMIP wrap 导出 (SoftHSM, Vault) 被远程触达 ### CI 状态 | 架构 | 状态 | |-------------|--------| | amd64 (x86_64) | [![CI amd64](https://static.pigsec.cn/wp-content/uploads/repos/cas/e9/e91165dd2145af74b3543bd11c7d71c60ffb56e93b02e844a5acdd33d166a2c3.svg)](https://github.com/GraoMelo/CVE-2026-TDES-Wrap-PoC/actions/workflows/ci-amd64.yml) | | arm64 (aarch64) | [![CI arm64](https://static.pigsec.cn/wp-content/uploads/repos/cas/51/5151b2d9b676850dd1b77a20a8d3ed794062b616bb420e827f97dddc62bd6ec7.svg)](https://github.com/GraoMelo/CVE-2026-TDES-Wrap-PoC/actions/workflows/ci-arm64.yml) | | i686 (32-bit) | [![CI i686](https://static.pigsec.cn/wp-content/uploads/repos/cas/db/db67ecdfdb40299b764c55d8ce90f5fcc17ed5d26ef72649433b420a943b3e45.svg)](https://github.com/GraoMelo/CVE-2026-TDES-Wrap-PoC/actions/workflows/ci-i686.yml) | 每个 CI 工作流: 1. 使用 ASan 构建 **vanilla** 版本的 OpenSSL 4.0.0 2. 运行 PoC → 确认发生 heap-buffer-overflow(保存为 artifact) 3. 应用补丁并重新构建 4. 再次运行 PoC → 确认溢出被阻止(保存为 artifact) ### 目录说明 | 目录 | 描述 | |-----------|-------------| | `PoC/` | PoC 源码 (`tdes_wrap_overflow.c`) + Makefile | | `patches/` | 修复补丁 (provider + EVP 层) | | `evidence/` | ASan 崩溃日志(由 CI 生成,包含 3 种架构) | | `scripts/` | 构建编排脚本 | | `reports/` | 漏洞总结 + CVSS 向量 | ### 本地构建 ``` # 构建带有 ASan 的原生 OpenSSL 4.0.0 ./scripts/build-openssl.sh --arch amd64 # 运行 PoC(预期 ASan crash) ./scripts/run-poc.sh --mode vanilla --arch amd64 # 应用补丁 ./scripts/build-patched.sh --arch amd64 # 再次运行 PoC(预期 PROV_R_OUTPUT_BUFFER_TOO_SMALL) ./scripts/run-poc.sh --mode patched --arch amd64 ``` ### 姊妹漏洞 相同的 EVP 根本原因也会影响带有 Padding 的 AES Wrap (RFC 5649): **[CVE-2026-AES-Wrap-PAD-PoC](https://github.com/GraoMelo/CVE-2026-AES-Wrap-PAD-PoC)** *由 Everton Melo (独立研究员) 发现并报告 — forense.melo@protonmail.com*
标签:Cutter, OpenSSL, 堆溢出, 安全测试工具, 客户端加密, 密码学库, 漏洞验证(PoC)