文章总结: Anthropic的Rust库buffa存在0Day拒绝服务漏洞,攻击者可构造恶意protobuf嵌套字段引发22倍堆内存放大导致服务崩溃。漏洞源于未知字段解码无分配上限。建议立即升级至connectrpc0.8.0以上版本,或将preserve_unknown_fields设为false缓解风险。 综合评分: 89 文章分类: 漏洞分析,漏洞预警,漏洞POC,代码审计,供应链安全
Anthropic Buffa Rust库0Day漏洞可引发拒绝服务攻击
FreeBuf
2026年7月2日 18:00 上海
在小说阅读器读本章
去阅读
Anthropic 基于 Rust 语言的 protobuf 实现库 buffa 被发现存在 0Day 拒绝服务(DoS)漏洞,攻击者可通过控制输入触发无限制堆内存分配。
该漏洞编号为(CVE-2026-55407)和 GHSA-f9qc-qg88-7pq5,影响 buffa 和 connectrpc 0.8.0 之前版本,CVSS 评分为 4.0/6.3(中危)。但根据实际部署架构,其影响可能升级为高危或严重级别。
Part01
漏洞发现过程
Endor Labs 的 AI SAST 引擎在分析 buffa 代码库时,于未知字段解码器中发现了可疑数据流。在 decode_unknown_field 函数中,长度值直接从不受信任的 protobuf 线数据解析,转换为 usize 类型后用于分配 Vec,除基本类型限制外未设置明确上限。
Part02
漏洞技术细节
虽然防护机制确保缓冲区至少包含 len 字节以防止越界读取,但未对分配本身进行约束,使得攻击者可通过提交超大长度分隔字段强制进行大规模堆分配。初步分析显示输入大小与堆使用量存在约 2 倍放大效应,这在严格输入限制下通常可控。
但进一步追踪 WireType::StartGroup 处理分支时,发现了更危险的放大向量。该分支解码器会循环处理嵌套未知字段直至遇到匹配的 EndGroup 标签,将每个解码字段推入基于 Vec 的 UnknownFields 结构。由于线路上最廉价的嵌套字段仅需 2 字节编码,却会导致约 40 字节堆分配及增长开销,精心构造的组可将较小输入扩展为巨大的内存结构。
Part03
漏洞验证
Endor Labs 的概念验证显示,包含数百万个最小 varint 字段的 64 MiB protobuf 负载可使堆使用量激增至约 1.4 GiB,达到输入大小的 22 倍。在内存限制为 256 MiB 的 Docker 容器中解码此类消息时,进程会因退出代码 137 被终止,证实存在内存耗尽型 DoS。
Part04
影响范围与修复方案
该漏洞路径可通过 buffa 默认解码 API(包括 Message::decode 和 decode_from_slice)触发,这意味着任何启用 preserve_unknown_fields(默认开启)解码不受信任 protobuf 消息的服务都可能受影响。Anthropic 已在 buffa 和 connectrpc 0.8.0 版本中发布修复,实现了可配置的每消息未知字段限制,将最大分配开销控制在数十兆字节内。
对于无法立即升级的环境,可通过设置 preserve_unknown_fields=false 重新生成代码作为缓解措施,这将关闭未知字段保留功能。此案例表明,仅依赖输入大小限制并不足够,因为组放大路径可能将看似安全的消息大小转化为致命的内存分配。
参考来源:
Anthropic’s Buffa Rust Library 0-Day Vulnerability Enables DoS Attack
Anthropic’s Buffa Rust Library 0-Day Vulnerability Enables DoS Attack
推荐阅读
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
电报讨论
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:FreeBuf 《Anthropic Buffa Rust库0Day漏洞可引发拒绝服务攻击》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论