GraoMelo/CVE-2026-AES-Wrap-PAD-PoC
GitHub: GraoMelo/CVE-2026-AES-Wrap-PAD-PoC
该项目复现并修复了 OpenSSL 4.0.0 中带填充 AES Wrap 密码实现因输出缓冲区大小计算不精确而导致的 1–7 字节堆溢出漏洞(CVE-2026 草案)。
Stars: 0 | Forks: 0
# CVE-2026-AES-Wrap-PAD-PoC
## OpenSSL 4.0.0 中带填充的 AES Wrap 堆缓冲区溢出
**CVSS 3.1:** 8.2(高危)— `AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H`
### 根本原因
带填充的 AES Wrap 密码(`aes-256-wrap-pad`,RFC 5649)将输出
计算为 `ceil(inl/8)*8 + 8`,但是:
1. **EVP 层**(`crypto/evp/evp_enc.c:690,801`)在 WRAP 模式下估算 `outsize = inl + 8`
— 当 `inl % 8 != 0` 时,会少算 1-7 字节
2. **Provider 检查**(`cipher_aes_wrp.c:260`)验证 `outsize < inl`
而不是使用感知填充的计算
最终结果:**1-7 字节堆缓冲区溢出**(可变,取决于输入
对齐方式)。当 `inl % 8 == 1` 时最大溢出 7 字节。
### 影响
- 堆元数据损坏 → 潜在的 RCE
- 可变的溢出大小为攻击者在堆布局定位上提供了灵活性
- 与 CVE-2026-TDES-Wrap(孪生漏洞)具有相同的 EVP 根本原因
### CI 状态
| 架构 | 状态 |
|-------------|--------|
| amd64 (x86_64) | [](https://github.com/GraoMelo/CVE-2026-AES-Wrap-PAD-PoC/actions/workflows/ci-amd64.yml) |
| arm64 (aarch64) | [](https://github.com/GraoMelo/CVE-2026-AES-Wrap-PAD-PoC/actions/workflows/ci-arm64.yml) |
| i686 (32-bit) | [](https://github.com/GraoMelo/CVE-2026-AES-Wrap-PAD-PoC/actions/workflows/ci-i686.yml) |
### 目录
| 目录 | 描述 |
|-----------|-------------|
| `PoC/` | PoC 源码(`poc_aes_wrap_pad_overflow.c`)+ Makefile |
| `patches/` | 修复补丁(Provider + EVP 层) |
| `evidence/` | ASan 崩溃日志(由 CI 生成,涵盖 3 种架构) |
| `scripts/` | 构建编排脚本 |
### 本地构建
```
./scripts/build-openssl.sh --arch amd64
./scripts/run-poc.sh --mode vanilla --arch amd64 # esperado: ASan crash
./scripts/build-patched.sh --arch amd64
./scripts/run-poc.sh --mode patched --arch amd64 # esperado: buffer too small
```
### 孪生漏洞
相同的 EVP 根本原因同样影响 TDES Wrap (RFC 3217):
**[CVE-2026-TDES-Wrap-PoC](https://github.com/GraoMelo/CVE-2026-TDES-Wrap-PoC)**
*由 Everton Melo(独立研究员)发现并报告 — forense.melo@protonmail.com*
标签:C/C++, Cutter, Go语言工具, OpenSSL, Web报告查看器, 事务性I/O, 堆溢出, 安全测试工具, 密码学, 手动系统调用, 漏洞证明(PoC)