yyjson双重释放漏洞分析
漏洞概述
yyjson库的池系列分配器(pool_malloc/pool_free/pool_realloc)存在双重释放漏洞,可能导致任意地址写入和拒绝服务(DoS)攻击。结合使用该库的程序的其他合法或非法操作,任意地址写入可导致远程代码执行。
技术细节
根本原因
该漏洞的核心原因在于pool_free函数缺乏循环检查,而直接原因则源于pool_free函数及类似的释放系列函数未执行指针销毁,导致释放后使用(UAF)漏洞。
漏洞验证
以下C语言程序使用yyjson 0.8.0演示如何利用双重释放漏洞造成块重叠,进而修改块的next指针指向任意地址。如果目标地址有效,则可进行修改;如果地址无效,则可能导致程序崩溃,可被利用进行DoS攻击。此外,构建循环块链可强制服务进入无限循环,同样可被利用进行DoS攻击。
|
|
影响范围
漏洞类型和受影响群体
该漏洞影响所有使用yyjson库0.9.0之前版本的程序。
yyjson官方说明
yyjson_mut_doc_free()在文档中有明确说明:
释放JSON文档并回收内存。调用此函数后,
doc和来自doc的所有值将不再可用。如果doc为NULL,此函数不执行任何操作。
如果已经对某个文档调用了yyjson_mut_doc_free(),则该文档及其内部值将失效。对文档或其值的任何进一步操作都是未定义行为。
虽然这不是yyjson本身的错误,但已提供防御性补丁:0eca326。如果违反文档说明错误地对同一文档两次调用yyjson_mut_doc_free(),此补丁将使程序立即崩溃,提醒用户存在不正确用法。
参考信息
- GHSA-q4m7-9pcm-fpxh
- https://nvd.nist.gov/vuln/detail/CVE-2024-25713
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/6KQ67T4R7QEWURW5NMCCVLTBASL4ECHE
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/NNICQVIF7BRYFWYRL3HPVAJIPXN4OVTX
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/TKQPEREDUDKGYJMFNFDQVYCVLWDRO2Y2
- ibireme/yyjson@0eca326
安全评分
- 严重程度: 高
- CVSS总体评分: 8.8/10
- EPSS评分: 4.296%(第88百分位)
弱点分类
- CWE-94: 代码生成控制不当(代码注入)
- 产品使用来自上游组件的外部影响输入构建全部或部分代码段,但未中和或错误地中和可能修改预期代码段语法或行为的特殊元素。