安全修复总结 (PR #10088) 漏洞概述 这是一个包含多个安全修复的批次,主要针对 wolfSSL 库。该批次修复了 9个 由 ZD (Zero Day Initiative) 追踪的漏洞 (ZD 21412-21426),并增加了 5个 回归测试。 影响范围 修复涉及以下协议和组件: ML (Multi-Layer) / DSA TLS 1.3 PQK (Post-Quantum Key) 密钥交换 PKCS7 / CMS ECC (椭圆曲线密码学) 导入 Session cache (会话缓存) 序列化 EVP PKEY printing (EVP 公钥打印) 关键漏洞详情与修复方案 1. PKCS7 Padding Check Timing Leak (ZD 21422) 问题:PKCS7填充检查并非常数时间(constant-time)。循环迭代次数取决于数据( ),即最后一个填充字节。 影响:对于PKCS7/CMS(通常非网络暴露),影响较低。但对于TLS CBC模式(如Vaudenay/Lucky13攻击),这是一个显著的改进。 修复:修正了填充检查逻辑,使其成为真正的常数时间检查。 2. Session Cache Restore Buffer Overflow (ZD 21423) 问题:在 / 操作后, 被重置,但 未重置。这导致 指向一个动态分配的缓冲区,其大小由 决定。如果 超过 ,会导致缓冲区溢出。 修复方案:在恢复会话时,如果 超过限制,强制将其截断。 代码修复: 3. Incomplete wc__delete() Coverage (ZD 21415) 问题:堆前模式(heap-before-free pattern)在 , , , , 等密钥类型中是固定的。如果 -> -> -> 模式存在,这些密钥类型容易受到攻击。 修复:确保所有相关密钥类型的清理函数覆盖完整。 4. MP_DECIMAL_MAX_LEN Naming Misleading (ZD 21426) 问题:宏定义 的值为24,用于RSA/DSA/DH/ECC指数和小参数。但其名称暗示它是“任何MP整数的最大十进制表示长度”。实际上,2048位MP整数需要 >617位十进制数字。如果代码使用此定义进行通用MP整数到十进制转换,可能导致溢出。 修复:修正命名或逻辑,避免溢出风险。 5. Test Callback OOB Read (ZD 21414) 问题:在测试回调或 中,检查了 或 2。如果ORI值数据比 短,会导致从 读取越界(OOB)。 注意:这是测试代码问题,非生产问题,但模糊测试可能触发。 6. TLS 1.3 PQK Key Share Over-read (ZD 21413) 问题:这是最关键的修复。恶意TLS 1.3服务器可能触发此漏洞。 修复**:增加了针对此问题的回归测试,并修复了相关逻辑。