yyjson 双重释放漏洞分析 (CVE-2024-25713)
漏洞概述
yyjson 库的池系列分配器 (pool_malloc/pool_free/pool_realloc) 存在双重释放(Double Free)漏洞,可能导致任意地址写入和拒绝服务(DoS)攻击。结合使用该库的程序的其他合法或非法操作,任意地址写入可能导致远程代码执行。
漏洞详情
根本原因
该漏洞的核心原因在于 pool_free 函数缺少循环检查,而直接原因源于 pool_free 函数及类似的释放系列函数未执行指针销毁,导致释放后使用(UAF)漏洞。
概念验证 (PoC)
以下是一个使用 yyjson 0.8.0 的 C 语言程序,演示如何利用双重释放漏洞导致内存块重叠,进而允许修改内存块的 next 指针指向任意地址。如果目标地址有效,则可以对其进行修改;如果地址无效,则可能导致程序崩溃,这可用于实施拒绝服务攻击。此外,构建内存块的循环链可能迫使服务陷入无限循环,同样可用于 DoS 攻击。
|
|
影响范围
漏洞类型与受影响对象
这是一个内存安全漏洞,影响所有使用受影响版本(< 0.9.0)yyjson 库的应用程序。
yyjson 官方说明
yyjson_mut_doc_free() 的文档明确指出:
释放 JSON 文档并回收内存。调用此函数后,
doc和来自该doc的所有值都将不再可用。如果doc为 NULL,则此函数不执行任何操作。
如果已经对某个文档调用了 yyjson_mut_doc_free(),则该文档及其内部值均无效。对文档或其值的任何进一步操作都属于未定义行为。
虽然这本身不是 yyjson 的 bug,但官方已提供一个防御性补丁:0eca326。如果错误地违反文档说明对同一个文档调用了两次 yyjson_mut_doc_free(),此补丁将使程序立即崩溃,从而提醒用户存在错误用法。
参考信息
- GHSA ID: GHSA-q4m7-9pcm-fpxh, GHSA-whx6-m9j4-w2m2
- CVE ID: CVE-2024-25713
- NVD 链接: https://nvd.nist.gov/vuln/detail/CVE-2024-25713
- 补丁提交: ibireme/yyjson@0eca326
- Fedora 安全公告: 多个相关公告链接已列出。
技术指标
- CVSS 评分: 8.8 (高危)
- CVSS 向量: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N
- EPSS 分数: 3.142% (第86百分位)
- CWE 分类: CWE-94 - 代码生成控制不当(代码注入)
受影响版本与修复
- 受影响版本: < 0.9.0
- 已修复版本: 0.9.0
建议所有用户升级到 yyjson 0.9.0 或更高版本以修复此漏洞。