ZCyberNews
English
漏洞高危5 分钟阅读
CVE-2026-45740

protobufjs 缺陷 CVE-2026-45740 通过深度嵌套 JSON 实现 DoS

CVE-2026-45740(CVSS 7.5)在 protobufjs 中允许攻击者通过发送带有深度嵌套命名空间的精心设计的 JSON 描述符来使 Node.js 应用程序崩溃 —— 影响 7.5.8 之前的版本和...

protobufjs 缺陷 CVE-2026-45740 通过深度嵌套 JSON 实现 DoS

protobufjs漏洞CVE-2026-45740通过深度嵌套JSON启用DoS

执行摘要

广泛使用的protobufjs库中存在一个高严重性的漏洞——跟踪为CVE-2026-45740,CVSS得分为7.5——允许远程攻击者通过耗尽JavaScript调用栈触发拒绝服务条件。该漏洞存在于protobufjs如何处理通过Root.fromJSON()Namespace.addJSON()的JSON描述符。7.5.8和8.2.0之前的版本受到影响。能够提供具有深度嵌套命名空间定义的精心制作的JSON描述符的攻击者可以使任何加载不受信任protobuf定义的Node.js应用程序崩溃,这对于暴露protobuf解析以外部输入的开发者来说是一个严重的问题。

技术分析

protobufjs是一个流行的JavaScript库,它将Protocol Buffers(protobuf)定义编译成JavaScript函数。它在Node.js生态系统中被广泛用于序列化和RPC框架,包括gRPC-web和自定义API网关。该漏洞由protobufjs维护者内部发现,并通过GitHub安全咨询(GHSA-jggg-4jg4-v7c6)披露。

核心问题是在库递归展开嵌套JSON描述符时缺少深度限制。当Root.fromJSON()Namespace.addJSON()处理包含深度嵌套命名空间定义的JSON对象时,递归下降无限制进行。一个特别制作的输入,例如,数百个嵌套的"nested"键可以使JavaScript调用栈溢出,导致进程崩溃。咨询指出,递归发生在加载阶段,而不是运行时,这意味着任何接受JSON格式protobuf模式定义的端点都是攻击面。

截至本文撰写时,尚未公开发布概念验证代码,但咨询详细描述了攻击向量:具有过度嵌套深度的攻击者控制的JSON描述符将耗尽栈。在版本7.5.8和8.2.0中实施的修复,为递归解析程序添加了可配置的深度限制。默认情况下,限制设置为64级,这对于合法使用案例是足够的,同时阻止恶意嵌套。

该漏洞被归类为拒绝服务(DoS),因为它不允许代码执行或数据泄露——只有进程终止。然而,在protobufjs用于关键服务(API网关、认证服务或数据管道)的生产环境中,一个精心制作的请求可能会使节点失效,如果负载均衡器或重试逻辑放大失败,可能会引发更广泛的服务中断。

缓解措施与建议

使用protobufjs的组织应立即升级到版本7.5.8(对于7.x分支)或8.2.0(对于8.x分支)。修复引入了默认的64级嵌套深度,这对于所有已知的合法protobuf模式都是安全的。需要更深层次嵌套的开发者可以通过新的parseOptions.depth参数调整限制,但除非绝对必要,否则强烈不推荐这样做。

对于那些不能立即升级的团队,主要的缓解措施是限制protobuf JSON描述符的来源。不要接受用户提供的或不受信任的来自网络端点的JSON描述符。验证所有传入的描述符是否符合模式白名单,或在具有硬性内存限制的沙箱进程中解析它们。此外,应用程序监控应该在与protobuf解析活动同时发生的过程崩溃时发出警报,因为这些可能表明利用尝试。

在未修补的版本中,库本身没有替代方案——递归是解析逻辑固有的。唯一可靠的防御是修补。

订阅更新

将最新的网络安全资讯直接发送到您的邮箱。

标签:#protobufjs#cve-2026-45740#denial-of-service#node.js#json-parsing#stack-exhaustion

相关文章