대상 독자: Node.js, Bun, Python 또는 .NET으로 웹 서비스, API, 크롤러, 배치 작업을 운영하는 개발자와 운영자. 이 글은 Google의 Brotli 프로젝트, Node.js, Microsoft, PyPI, JPCERT/CC, 미국 정부 기관의 공개 자료를 바탕으로 합니다. 공격 절차나 익스플로잇 코드는 다루지 않습니다.
진행 중: 새로운 내용이 발표되면 이 페이지를 업데이트합니다
2026년 10월 26일 23:00 UTC 기준아직 확인되지 않음
- 악용 여부(보고한 1차 출처 없음)
- NVD 자체 평가(분석 대기 중)
- 영향받는 제품의 전체 목록
- 일부 Linux 배포판(이전 릴리스는 아직 평가되지 않음)
Google은 10월 21일(미국 시간), Node.js는 같은 날, Microsoft는 10월 25일(미국 시간) 수정을 공개했습니다. JPCERT/CC는 10월 26일 주의 환기를 발표했습니다. CISA의 KEV 카탈로그에는 이 결함이 등재되지 않았습니다. 더 많은 벤더가 아직 수정을 배포하고 있으므로, 발표되는 대로 이 페이지를 업데이트합니다.
오늘 해야 할 일
외부에서 받은 Brotli 데이터를 압축 해제하는지 확인
예를 들어 Content-Encoding: br로 보낸 요청을 압축 해제하는 웹 서버, 외부 사이트의 응답을 자동으로 압축 해제하는 HTTP 클라이언트, 사용자가 업로드한 파일을 압축 해제하는 코드가 있습니다. 이 중 하나라도 해당된다면 긴급하게 다루십시오(이 사이트의 견해).
런타임과 패키지의 버전 확인
아래 내 환경이 영향을 받는지 확인하는 방법의 명령으로 Node.js, Bun, Python 패키지, .NET 런타임과 SDK를 확인하십시오.
수정 버전으로 업데이트
최소한 아래 수정 버전 표의 버전으로 업데이트하십시오. nodejs.org의 공식 Node.js 20.x 이하 빌드는 지원이 종료되어 수정이 제공되지 않으므로 22.x 이상으로 옮기십시오. Ubuntu나 Debian 패키지로 설치한 Node.js는 배포판의 보안 공지를 따르십시오.
다시 빌드, 다시 배포, 재시작
컨테이너 이미지, bun build --compile로 만든 실행 파일, .NET 자체 포함 앱과 NativeAOT 앱을 수정 버전으로 다시 빌드하고 다시 배포하십시오. 실행 중인 프로세스도 재시작하십시오. 이전 프로세스는 이전 라이브러리를 계속 로드하고 있습니다.
침해 징후 확인
JPCERT/CC는 수정 적용과 함께 침해 여부도 확인하도록 요청합니다. 외부 데이터를 압축 해제하는 프로세스에서 크래시 증가, 낯선 자식 프로세스, 외부로 나가는 연결이 있는지 살펴보십시오(이 사이트의 제안).
lockfile과 베이스 이미지의 고정 수정
package-lock.json, requirements.txt, poetry.lock 또는 Dockerfile의 FROM 줄이 이전 버전을 고정하고 있으면 다음 빌드에서 다시 돌아옵니다. 고정을 수정 버전으로 바꾸십시오.
수정 버전
| 사용 중인 것 | 영향받는 버전 | 수정 버전 | 출처 |
|---|---|---|---|
| Brotli (C 라이브러리) | 1.0.3–1.0.9, 1.1.0, 1.2.0 | 1.0.10, 1.1.1, 1.2.1 | |
| Node.js 22.x | 22.23.4 이전 | 22.23.4 | Node.js |
| Node.js 24.x | 24.22.1 이전 | 24.22.1 | Node.js |
| Node.js 26.x | 26.12.1 이전 | 26.12.1 | Node.js |
| Node.js 20.x 이하 (nodejs.org 공식 빌드) | 지원 종료 | 없음 (22.x 이상으로 이전) | Node.js |
| Bun | 1.0.21 이상 1.4.4 미만 | 1.4.4 | Bun |
| PyPI brotli | 1.0.3 이상 1.2.1 미만 | 1.2.1 | GitHub Advisory Database |
| PyPI brotlicffi | 1.0.3 이상 1.2.1.0 미만 | 1.2.1.0 | GitHub Advisory Database |
| .NET 8 | 8.0.33 이전 | 런타임 8.0.33 (SDK 8.0.133, 8.0.427) | Microsoft |
| .NET 9 | 9.0.22 이전 | 런타임 9.0.22 (SDK 9.0.123, 9.0.320) | Microsoft |
| .NET 10 | 10.0.14 이전 | 런타임 10.0.14 (SDK 10.0.114, 10.0.403) | Microsoft |
| Envoy | v1.39.2, v1.38.5, v1.37.7, v1.36.11 | v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12 | Envoy |
| PHP Windows 빌드 | 재빌드 이전의 8.5.12, 8.4.27, 8.3.36, 8.2.35 | 8.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1 | PHP |
.NET Framework는 영향을 받지 않습니다(Microsoft). .NET 11 프리뷰(11.0.0-rc.3.26522.148)용 수정도 제공됩니다. Envoy에 따르면 Brotli 압축 해제기가 구성된 배포만 영향을 받습니다.
Linux 배포판은 업스트림 버전 번호를 바꾸지 않고 수정을 백포트하는 경우가 많습니다. 예를 들어 Ubuntu 22.04의 brotli는 "1.0.9-2ubuntu0.1"에서 수정되었는데, 여전히 1.0.9로 표시됩니다. OS 패키지는 버전 번호만 보지 말고 배포판의 보안 공지를 기준으로 판단하십시오.
PHP 팀에 따르면 PHP Windows 빌드는 HTTP 응답 자동 압축 해제가 활성화된 경우 cURL 확장을 통해 노출됩니다(cURL에서는 기본적으로 꺼져 있지만, 애플리케이션과 HTTP 클라이언트 라이브러리가 켤 수 있습니다). 수정된 빌드에는 "-1" 접미사가 붙으며, PHP 버전 자체는 바뀌지 않습니다.
OS 라이브러리 (libbrotli)
OS 업데이트로 수정. 이를 사용하는 프로세스를 재시작
런타임에 포함 (Node.js, Bun, .NET)
런타임 자체를 업데이트
언어 패키지 (brotli, brotlicffi)
모든 가상 환경에서 업데이트
직접 빌드한 것 (컨테이너, 실행 파일)
수정 버전으로 다시 빌드하고 다시 배포
내 환경이 영향을 받는지 확인하는 방법
이 명령들은 자신의 시스템에서 버전만 확인합니다.
Node.js
node -v를 실행하십시오. 22.23.4, 24.22.1 또는 26.12.1 이전 버전은 영향을 받습니다. node -p process.versions.brotli는 포함된 Brotli 버전을 보여 주지만, 수정 적용 방식에 따라 이 숫자가 바뀌지 않을 수 있으므로 Node.js 버전 자체로 판단하십시오(이 사이트의 견해). Docker의 경우 이미지 안에서 확인하십시오. 예: docker run --rm --entrypoint node <image> -v. Ubuntu나 Debian 패키지로 설치한 Node.js는 시스템 libbrotli를 사용하므로 아래 “OS 라이브러리”에 설명한 대로 확인하십시오.
Bun
bun --version을 실행하십시오. 1.4.4 이전 버전은 영향을 받습니다. bun build --compile로 만든 실행 파일은 빌드할 때 사용한 Bun을 포함하므로 다시 빌드할 때까지 영향을 받습니다(Bun의 권고).
Python
pip show brotli brotlicffi를 실행하십시오(또는 python -m pip list에서 Brotli와 brotlicffi를 찾으십시오). 1.2.1 이전의 brotli와 1.2.1.0 이전의 brotlicffi는 영향을 받습니다. 둘 다 설치되어 있지 않다면 이 결함과 관련해 수정할 Python 패키지는 없습니다. 가상 환경과 컨테이너마다 별도의 사본이 있으므로 각각 확인하십시오. python3-brotli 같은 OS 패키지로 설치했다면 버전 번호가 아니라 배포판의 보안 공지를 기준으로 판단하십시오.
.NET
dotnet --list-runtimes와 dotnet --list-sdks를 실행하십시오. Microsoft는 ASP.NET Core 요청 압축 해제나 HttpClient 응답 자동 압축 해제에서 Brotli를 활성화했거나, BrotliStream 또는 BrotliDecoder를 직접 호출하는 경우 노출된다고 밝혔습니다. 두 자동 옵션 모두 기본적으로 꺼져 있습니다.
OS 라이브러리
Debian과 Ubuntu에서는 dpkg -l 'libbrotli*', RHEL 계열에서는 rpm -qa 'brotli*' 'libbrotli*', Alpine에서는 apk list --installed 'brotli*'로 설치된 버전을 확인하고 배포판의 보안 공지와 비교하십시오. Debian은 Debian 12를 1.0.9-2+deb12u1(DLA-4855-1)에서, Debian 13을 1.1.0-2+deb13u1(DSA-6582-1)에서 수정했습니다.
공개된 내용
- CVE
- CVE-2026-111497 (GitHub 권고 GHSA-9v8h-qqgm-4m35)
- 유형
- Brotli 디코더(c/dec/decode.c)의 범위 밖 쓰기(CWE-787) 및 반환값 미확인(CWE-252)
- 심각도
- CVSS v4.0 9.2 (Google). 네트워크 공격 벡터, 인증 불필요, 사용자 상호작용 불필요, 공격 요건 있음(AT:P). Microsoft는 .NET 문제를 CVSS v3.1 기준 8.1로 평가
- 영향
- 조작된 Brotli 스트림을 압축 해제하면 인접 메모리 손상, 메모리 내용 노출, 서비스 거부가 발생하거나 경우에 따라 임의 코드 실행이 가능할 수 있음(NVD에 실린 Google의 설명). .NET에 대해 Microsoft는 정보 노출, 서비스 거부 또는 권한 상승으로 이어질 수 있다고 설명(코드 실행은 언급하지 않음)
- 영향 대상
- Brotli 1.0.3–1.0.9, 1.1.0, 1.2.0 및 이를 포함한 제품
- 수정
- Brotli 1.0.10, 1.1.1, 1.2.1 (2026년 10월 21일, 미국 시간)
- 우회책
- Google은 제공하지 않음(JPCERT/CC). Microsoft는 업데이트할 수 있을 때까지 공격자가 제어하는 Brotli 데이터를 압축 해제하지 말라고 안내
Node.js에 따르면 디코더는 잘못된 형식의 데이터에 있는 무효한 블록 전환을 형식 오류가 아니라 일시적으로 입력이 더 필요한 상태로 처리해, 내부 8바이트 버퍼의 끝을 넘어 계속 쓰게 되었습니다. Node.js에서는 공격자가 제공한 Brotli 데이터를 node:zlib로 압축 해제하는 애플리케이션이 영향을 받습니다. Node.js는 이 문제를 High로 평가했습니다. 같은 릴리스에서 다른 취약점 9건도 수정되었습니다.
Bun의 권고에 따르면 Bun의 fetch는 기본적으로 Brotli 응답을 자동 압축 해제하므로, 애플리케이션이 접속하는 서버나 암호화되지 않은 연결의 경로상에 있는 공격자가 데이터를 공급할 수 있습니다.
OS 업데이트만으로는 해결되지 않을 수 있습니다
Brotli는 Node.js, Bun, Python Brotli 패키지, .NET, Envoy 등 많은 프로그램 안에 사본으로 포함되어 있습니다. JPCERT/CC는 애플리케이션이 Brotli 데이터를 압축 해제하는 사용자에게 각 벤더의 최신 정보에서 영향과 수정 상황을 확인하도록 요청합니다. Microsoft도 공유 런타임을 업데이트해도 NativeAOT 앱은 수정되지 않으며 다시 게시해야 한다고 밝혔습니다.
악용 및 개념 증명(PoC) 현황
10월 27일 오전(일본 시간) 기준 Google, Node.js, Microsoft, JPCERT/CC는 실제 환경에서의 악용을 보고하지 않았습니다. CISA의 KEV 카탈로그(10월 26일 버전)에는 이 결함이 등재되지 않았습니다. 10월 23일 NVD에 추가된 CISA의 SSVC 평가는 악용을 none, 자동화 가능성을 no, 기술적 영향을 total로 평가합니다. Microsoft의 CVSS는 익스플로잇 코드 성숙도를 unproven으로 평가합니다.
1차 출처는 공개된 개념 증명을 언급하지 않습니다. 한 독립 해설 사이트는 10월 22일 PoC가 공개되었다고 밝혔습니다. 그 사이트에 따르면 표준 빌드에서는 크래시와 제한적인 메모리 읽기만 일으키고, 의도적으로 보호 기능을 약화한 빌드에서는 코드 실행에 이릅니다. 같은 사이트는 한 보안 기업의 연구팀이 공식 Node.js 이미지에서 코드 실행을 달성했지만 방법은 공개하지 않았다고 밝혔습니다. 이 사이트는 이 중 어느 것도 검증하지 않았으며 링크하지 않습니다.
Ubuntu는 이 문제를 Medium 우선순위로 평가한 반면, Google은 9.2로 평가했습니다. 어느 쪽이 더 중요한지는 외부에서 받은 데이터를 압축 해제하는지에 따라 달라집니다(이 사이트의 견해).
주요 Python HTTP 라이브러리에 대해
10월 27일 기준 requests, urllib3, httpx, aiohttp는 이 결함에 대한 권고를 공개하지 않았습니다(이 사이트가 각 저장소의 보안 권고 목록을 확인했습니다). urllib3, httpx, aiohttp는 brotli 또는 brotlicffi를 선택적 추가 기능(extras)으로 다루며, 둘 중 하나가 설치된 경우에만 Brotli를 압축 해제합니다. 수정해야 할 패키지는 같은 환경의 brotli와 brotlicffi입니다. brotli가 이전 버전으로 남아 있으면 HTTP 라이브러리만 업데이트해도 소용이 없습니다.
아직 알려지지 않은 사항
| 항목 | 상태 |
|---|---|
| 실제 환경에서의 악용 | 1차 출처의 보고 없음. KEV에 없음 |
| 공개된 개념 증명 | 1차 출처는 언급하지 않음. 한 독립 사이트는 존재한다고 밝힘(미검증) |
| NVD 평가 | 분석 대기 중 (Google의 9.2만 있음) |
| 영향받는 제품의 전체 목록 | 계속 늘어나는 중. 브라우저 및 기타 제품은 각 벤더의 공지를 확인 |
| Linux 배포판 | Ubuntu 20.04 이하는 아직 평가되지 않음 |
출처
모두 2026년 10월 27일에 확인했습니다.
- JPCERT/CC, Brotli의 범위 밖 쓰기(CVE-2026-111497)에 관한 주의 환기 (JPCERT-AT-2026-0034, 2026년 10월 26일, 일본어) — jpcert.or.jp
- PHP, "Updated PHP Windows builds for Brotli security fix" (2026년 10월 26일) — php.net
- Google Brotli 릴리스 v1.2.1, v1.1.1, v1.0.10 (2026년 10월 21일) — v1.2.1 / v1.1.1 / v1.0.10
- Node.js, "Node.js Security Releases" (2026년 10월 21일) — nodejs.org
- Microsoft, "Microsoft Security Advisory CVE-2026-111497 | .NET Brotli Decoder Out-of-bounds Write Vulnerability" (2026년 10월 25일) — github.com/dotnet
- GitHub Advisory Database GHSA-9v8h-qqgm-4m35 (PyPI brotli 및 brotlicffi) — github.com
- PyPI brotli 1.2.1 — pypi.org / brotlicffi 1.2.1.0 — pypi.org
- Bun, "Bundled brotli decoder has an out-of-bounds write" (GHSA-663w-cv8g-jj2p, 2026년 10월 23일) — github.com
- Envoy, "Out-of-Bounds Write in Brotli Decompressor" (GHSA-3wvj-j6qm-62mr, 2026년 10월 23일) — github.com
- NVD, "CVE-2026-111497" — nvd.nist.gov
- CISA, "Known Exploited Vulnerabilities Catalog" (10월 26일 버전에 미등재) — cisa.gov
- Ubuntu, "CVE-2026-111497" — ubuntu.com / Debian, "DLA-4855-1 brotli" — lists.debian.org
변경 기록
2026-10-27: 최초 버전. Google, Node.js, Microsoft, Bun, Envoy, PHP, PyPI, JPCERT/CC, NVD, CISA KEV 카탈로그, Ubuntu, Debian의 공개 자료를 바탕으로 작성했습니다.
다음으로 읽을 글
- 우선순위 정하기: 어떤 CVE를 먼저 수정할지 정하는 방법 (CVSS, EPSS, KEV)
- 취약점이 공개되었을 때: CVE 대응 플레이북
- 의존성 감사: OSV-Scanner로 의존성 감사하기
- 같은 주의 다른 긴급 수정: PHP 취약점 CVE-2026-109618 및 CVE-2026-109619
- 같은 달의 다른 Python 의존성 업데이트: eMudhra 인증서: pip, certifi, uv 업데이트
- 용어: RCE(원격 코드 실행)란 무엇인가 / CVSS란 무엇인가