首页 网络安全 正文
  • 本文约1499字,阅读需7分钟
  • 13
  • 0

JSON解析库cJSON中高危漏洞CVE-2025-57052

摘要

栋科技漏洞库关注到cJSON库(cJSON_Utils.c,函数decode_array_index_from_pointer)的漏洞CVE-2025-57052,CVSS 3.x评分9.8。

JSON是一种文本数据格式,或者是一种字符串规范,源于编程语言Javascript的对象语法,但JSON独立于Javascript,两者并无强关联。

一、基本情况

cJSON是一个用C语言编写的轻量级JSON处理库, cJSON作为JSON格式的解析库,它的核心代码只有 cJSON.h 和 cJSON.c 两个文件。

cJSON由 Dave Gamble 开发,采用MIT许可证,适合嵌入式系统使用,超轻巧,携带方便,单文件,可作为 ANSI-C 标准 JSON 解析器。

JSON解析库cJSON中高危漏洞CVE-2025-57052

栋科技漏洞库关注到cJSON库(cJSON_Utils.c,函数decode_array_index_from_pointer)的漏洞CVE-2025-57052,CVSS 3.x评分9.8。

二、漏洞分析

CVE-2025-57052漏洞位于cJSON 1.5.0至1.7.18版本,允许通过cJSON_Utils.c中的decode_array_index_from_pointer函数进行越界访问。

CVE-2025-57052漏洞可导致远程攻击者能够绕过数组边界检查,并通过包含字母数字字符的格式错误的JSON指针字符串访问受限数据。

漏洞允许攻击者绕过数组边界检查,通过利用JSON指针解析中的不正确输入验证,导致越界内存访问、分段错误、特权升级和拒绝服务。

漏洞由安全研究员Salah Chafai披露,可构造畸形JSON指针绕过数组边界检查,导致内存越界访问、段错误、权限提升或拒绝服务攻击。

易受攻击的代码如下:

管理员已设置登录后刷新可查看

该漏洞源于cJSON_Utils.c文件中的decode_array_index_from_pointer函数。

循环错误地检查pointer[0]而非pointer[position],导致非数字字符被当作数组索引处理。

这种逻辑错误意味着类似"0A"的输入会被解析为索引10,即使数组仅包含三个元素。

此类越界访问可能导致应用程序崩溃,或在特定场景下允许攻击者读取/篡改预期范围外的内存。

该循环错误地检查了指针[0]而不是指针[position],允许将非数字字符作为数组索引的一部分进行处理。

例如,输入“0A”被解析为索引10(0*10+('A'-'0')=10),这超出了3元素数组的界限。

三、POC概念验证

攻击者可以使用格式错误的索引(例如/0A)制作JSON指针,以触发越界数组访问。

这可能会导致在预期内存区域之外进行读取或写入,从而可能导致分段错误(崩溃)或拒绝服务。

可以绕过使用标准整数解析(例如atoi)的应用程序级检查,因为cJSON会以不同的方式解释格式错误的索引。

当使用cJSON解析用户JSON数组时,合法索引"0"和"1"能正确返回Alice和Bob的数据,

但精心构造的索引"0A"会使cJSON尝试访问不存在的第10个元素。

1、以下建议的C程序演示漏洞利用的过程,格式错误的索引如何导致cJSON访问越界内存并可能导致segfault:

管理员已设置登录后刷新可查看

2、提供索引0A将导致cJSON访问索引10,这超出了界限,并可能导致分段错误(崩溃)。

管理员已设置登录后刷新可查看

3、影响用例

任何使用cJSON进行JSON指针解析的软件,包括web API、嵌入式/IoT设备和桌面/服务器应用程序。

在可以向JSON指针API提供格式错误的输入的环境中尤其关键,因为这可能被用于拒绝服务。

4、修复措施,将循环条件更改为:

管理员已设置登录后刷新可查看

五、影响范围

cJSON 1.5.0 - 1.7.18

六、修复建议

cJSON > 1.7.18

七、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接