브로틀리 취약점, Node.js·Bun 등 확산
최근 30일 조회수 — 좋아요 —핵심 요약
조작된 압축 데이터가 브로틀리 디코더의 경계 밖 쓰기를 유발해 충돌·정보 유출·코드 실행으로 이어질 수 있다.

구글의 브로틀리(Brotli) C 디코더에서 경계 밖 쓰기 취약점이 발견됐다. CVE-2026-111497로 추적되는 이 결함은 Node.js뿐 아니라 Bun, 파이썬 패키지, Envoy와 Istio 등 같은 디코더를 포함한 소프트웨어에 퍼져 있다. 조작된 압축 데이터를 처리하면 충돌이나 메모리 유출이 발생할 수 있으며, Imperva 연구진은 패치하지 않은 Node.js 환경에서 원격 코드 실행까지 재현했다. 다만 다른 제품에서 코드 실행이 입증되거나 실제 공격이 보고된 사례는 아직 없다.1
문제는 브로틀리 스트림의 블록 유형을 전환하는 과정에 있다. 수정 전 DecodeBlockTypeAndLength()는 잘못된 형식과 입력 부족을 구분하지 못했고, 빠른 처리 경로는 반환값마저 확인하지 않았다. 공격자가 불가능한 블록 전환을 요구하면 디코더는 이를 추가 입력이 필요한 상황으로 오인해 8바이트 내부 버퍼에 데이터를 계속 넣는다. 그 결과 주변 상태를 덮어쓰는 경계 밖 쓰기가 발생한다. 구글은 오류를 BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH(-17)로 명확히 반환하도록 고쳤다.2
주요 수정 버전은 다음과 같다.1
| 제품 | 영향받는 버전 | 수정 버전 |
|---|---|---|
| Google Brotli | 1.0.3~1.2.0 | 1.0.10, 1.1.1, 1.2.1 |
| Node.js | 수정 전 22.x·24.x·26.x | 22.23.4, 24.22.1, 26.12.1 |
| Bun | 1.4.3 이하 | 1.4.4 |
| Python Brotli | 1.2.0 이하 | 1.2.1 |
| Python brotlicffi | 1.2.0.x 이하 | 1.2.1.0 |
| Envoy | 1.39.2·1.38.5·1.37.7·1.36.11 | 1.40.0·1.39.3·1.38.6·1.37.8·1.36.12 |
공격 표면은 브로틀리를 직접 호출하는 코드보다 넓다. Node.js와 Bun의 fetch()는 Content-Encoding: br 응답을 자동으로 풀며, Express 5와 body-parser 2도 브로틀리 요청 본문을 처리한다. 다만 Express 자체에 결함이 있는 것은 아니어서 해당 패키지만 올려서는 해결되지 않는다. 일반 node:http 서버는 요청 본문을 자동 해제하지 않는다.2
파이썬도 애플리케이션이 Brotli를 직접 가져오지 않아도 위험할 수 있다. Brotli나 brotlicffi가 설치돼 있으면 requests·urllib3·aiohttp·httpx 등이 브로틀리 응답을 자동 해제하기 때문이다. Envoy와 Istio는 브로틀리 압축 해제를 활성화한 구성에서만 노출된다. 시스템 동적 라이브러리는 배포판 보안 업데이트와 프로세스 재시작으로 고칠 수 있지만, 정적으로 링크하거나 자체 포함한 사본은 각각 다시 빌드해야 한다.21
Footnotes
읽기 목록은 이 브라우저에 저장됩니다.
출처
- Broccoli2Shell: the Brotli decoder bug (CVE-2026-111497) — Hacker News
- Brotli Decoder Flaw Behind Node.js RCE Also Affects Bun, Python and Other Widely Used Software — The Hacker News
이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요.