
Fuel 인프라에 대한 CVE-2026-25541 영향 분석 (bytes crate 정수 오버플로)
| 필드 | 값 |
|---|
| CVE | CVE-2026-25541 |
| 패키지 | bytes crate (Rust) |
| 영향받는 버전 | 1.2.1 ≤ version < 1.11.1 |
| 심각도 | 치명적 (CVSS 9.8) |
| 유형 | 정수 오버플로 → 경계를 벗어난 쓰기 |
| 패치 | bytes >= 1.11.1 |
**FuelLabs/fuel-block-committer**는 취약한 bytes 1.9.0을 사용합니다 (Cargo.lock 경유).
수정 사항은 PR #254를 통해 2026년 4월 14일부터 제공되었지만, 아직 병합되지 않았습니다 (68일 이상).
BytesMut::reserve()는 고유 회수 경로에서 정수 오버플로가 발생합니다:
// bytes/src/bytes_mut.rs (v1.9.0)
if v_capacity >= new_cap + offset // ← unchecked addition: new_cap + offset can overflow
new_cap + offset이 usize::MAX를 초과하여 순환하면 조건이 잘못 통과하여 self.cap이 실제 할당을 초과하도록 설정됩니다. 이후 spare_capacity_mut()를 통한 쓰기는 경계를 벗어난 메모리 쓰기를 발생시킵니다.
블록 커미터의 상태 커미터 서비스는 BytesMut 버퍼를 사용하여 EigenDA blob 조각을 처리합니다:
packages/services/src/state_committer/service.rs
→ submit_fragments()
→ fragment accumulation uses BytesMut for blob assembly
특정 조각 크기를 가진 조작된 EigenDA 응답은 blob 재조립 경로에서 오버플로를 유발하여 다음과 같은 결과를 초래할 수 있습니다:
| 파일 | 함수 | 위험 |
|---|---|---|
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 프레임 처리 | 프레임 버퍼 오버플로 |
오버플로를 보여주는 최소 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); // overflow: new_cap + offset wraps
b.put_u8(b'h'); // OOB write
}
배포 환경이 영향을 받는지 확인하려면 자동 스캐너를 실행하세요:
GitHub에 연결하여 Cargo.lock, 배포 구성 및 런타임 노출을 분석합니다. 결과는 비공개 GitHub Issue로 게시됩니다.
스캐너는 다음을 확인합니다:
bytes crate 사용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 | 68일간 미패치 — 본 분석 |
본 분석은 독립적인 보안 연구의 일환으로 수행되었습니다. 프로덕션 시스템에 대한 악용은 시도되지 않았습니다. GitHub Issue를 통한 책임 있는 공개를 진행했습니다.
CVE 영향 분석기 v2.1로 생성됨