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

CVE-2026-32874 UltraJSON大整数解析内存泄漏漏洞

披露日期: 2026-03-20

漏洞信息

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

相关标签

内存泄漏拒绝服务DoSUltraJSONujsonCVE-2026-32874

漏洞概述

UltraJSON 是一个用纯 C 编写的快速 JSON 编解码器,适用于 Python 3.7+。在 5.4.0 至 5.11.0 版本中,存在一个累积性内存泄漏漏洞。当解析超出特定范围的大整数时,无论解析成功与否,都会泄露内存。攻击者可通过发送特制的恶意 JSON 数据导致服务内存耗尽,从而引发拒绝服务攻击。该问题已在 5.12.0 版本中修复。

技术细节

该漏洞源于 UltraJSON 在处理 JSON 中的大整数(即超出 [-2^63, 2^64 - 1] 范围的整数)时的逻辑缺陷。解析器会为整数的字符串形式分配内存,但在某些错误处理路径或特定输入条件下未能正确释放该内存。具体来说,泄露的内存包括整数字符串副本及一个 NULL 字节。由于泄漏是累积的,且不受 Python `sys.get_int_max_str_digits()` 限制的有效约束(即使被拒绝也会发生泄漏),攻击者可以通过发送包含大量此类大整数的 JSON 载荷,不受限制地消耗服务器内存,最终导致系统崩溃或服务不可用(DoS)。任何调用 `ujson.loads()` 等函数处理不可信输入的服务均受影响。

攻击链分析

STEP 1
侦察
攻击者识别出目标服务正在使用 UltraJSON (ujson) 库来解析 JSON 数据。
STEP 2
构造载荷
攻击者构造包含大量超大整数(超出 64 位范围)的恶意 JSON 数据。
STEP 3
发送请求
攻击者将恶意 JSON 数据发送至目标服务的 API 接口或处理端点。
STEP 4
触发漏洞
目标服务调用 ujson.loads() 解析数据,触发内存泄漏机制,即使解析失败也会分配内存不释放。
STEP 5
拒绝服务
随着请求的持续或循环发送,服务器内存被耗尽,导致服务崩溃或无法响应。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import ujson import time # Generate a malicious payload with a large integer outside the range [-2^63, 2^64-1] # This triggers the memory leak. malicious_json = '{"large_int": ' + '9' * 1000 + '}' print("Starting memory leak test...") for i in range(1000): try: ujson.loads(malicious_json) except ValueError: # Even if parsing fails due to digit limits, memory is leaked pass if i % 100 == 0: print(f"Iteration {i}: processed payload") print("Test completed. Check memory usage.")

影响范围

UltraJSON 5.4.0
UltraJSON 5.11.0

防御指南

临时缓解措施
如果无法立即升级,建议在应用层面对输入 JSON 的大小和结构进行严格校验,限制整数长度或大小,或暂时替换为其他 JSON 解析库(如 Python 标准库的 json),直到完成升级。

参考链接

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