| 字段 | 值 |
|---|---|
| CVE | CVE-2026-25541 |
| 包 | bytes 包 (Rust) |
| 影响版本 | 1.2.1 ≤ 版本 < 1.11.1 |
| 严重性 | 严重 (CVSS 9.8) |
| 类型 | 整数溢出 → 越界写入 |
| 补丁 | bytes >= 1.11.1 |
FuelLabs/fuel-block-committer 使用了 bytes 1.9.0(通过 Cargo.lock),该版本存在漏洞。
自 2026 年 4 月 14 日起,已通过 PR #254 提供修复,但至今未合并(已超过 68 天)。
BytesMut::reserve() 在唯一回收路径中存在整数溢出:
// bytes/src/bytes_mut.rs (v1.9.0)
if v_capacity >= new_cap + offset // ← 未检查的加法:new_cap + offset 可能溢出
当 new_cap + offset 在 usize::MAX 处回绕时,条件会错误地通过,将 self.cap 设置为超出实际分配的大小。随后通过 spare_capacity_mut() 的写入会导致越界内存写入。
区块提交者的状态提交者服务使用 BytesMut 缓冲区处理 EigenDA blob 片段:
packages/services/src/state_committer/service.rs
→ submit_fragments()
→ 片段累积使用 BytesMut 进行 blob 组装
精心构造的 EigenDA 响应(包含特定片段大小)可在 blob 重组路径中触发溢出,导致:
演示溢出的最小 PoC:
use bytes::BytesMut;
fn main() {
let mut a = BytesMut::from(&b"hello world"[..]);
let mut b = a.split_off(5);
drop(a);
b.reserve(usize::MAX - 6); // 溢出:new_cap + offset 回绕
b.put_u8(b'h'); // OOB 写入
}
要检查您的部署是否受影响,请运行自动化扫描器:
连接到您的 GitHub 以分析 Cargo.lock、部署配置和运行时暴露情况。结果将以私有 GitHub Issue 形式发布。
扫描器检查:
bytes 包使用情况cargo audit 以确认没有其他存在漏洞的依赖| 日期 | 事件 |
|---|---|
| 2026-02-03 | CVE-2026-25541 发布 |
| 2026-02-03 | bytes 1.11.1 发布(修复版本) |
| 2026-04-14 | Dependabot 在 fuel-block-committer 上开启 PR #254 |
| 2026-06-22 |
本分析是独立安全研究的一部分。未尝试对生产系统进行利用。通过 GitHub Issue 进行负责任的披露。
由 CVE 影响分析器 v2.1 生成
| 文件 | 函数 | 风险 |
|---|
services/src/state_committer/service.rs | submit_fragments | 片段缓冲区溢出 |
services/src/block_bundler/bundler.rs | 捆绑压缩 | 压缩缓冲区溢出 |
adapters/fuel/src/client.rs | GraphQL 响应解析 | 响应缓冲区溢出 |
adapters/eth/src/websocket/ | WebSocket 帧处理 | 帧缓冲区溢出 |
| 未修复 68 天 — 本分析 |