CVE-2025-59789CVE-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层,超过限制的请求将被拒绝。