보안 가이드

Brotli 취약점 CVE-2026-111497(Node2Shell): Node.js, Python, .NET 확인 방법과 업데이트 대상

CVE-2026-111497은 Brotli 디코더의 범위 밖 쓰기 취약점으로, 조작된 압축 데이터가 메모리를 손상시킬 수 있습니다. Brotli 1.0.3–1.0.9, 1.1.0, 1.2.0이 영향을 받으며, Node.js, Bun, Python Brotli 패키지, .NET 등에 사본이 포함되어 있습니다. 확인 방법, 수정 버전, OS 업데이트만으로는 해결되지 않을 수 있는 이유를 정리했습니다.

게시 2026-10-27 업데이트 2026-10-27 최종 확인 2026-10-27 11분 읽기
이 페이지에서

대상 독자: 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 카탈로그에는 이 결함이 등재되지 않았습니다. 더 많은 벤더가 아직 수정을 배포하고 있으므로, 발표되는 대로 이 페이지를 업데이트합니다.

오늘 해야 할 일

1

외부에서 받은 Brotli 데이터를 압축 해제하는지 확인

예를 들어 Content-Encoding: br로 보낸 요청을 압축 해제하는 웹 서버, 외부 사이트의 응답을 자동으로 압축 해제하는 HTTP 클라이언트, 사용자가 업로드한 파일을 압축 해제하는 코드가 있습니다. 이 중 하나라도 해당된다면 긴급하게 다루십시오(이 사이트의 견해).

2

런타임과 패키지의 버전 확인

아래 내 환경이 영향을 받는지 확인하는 방법의 명령으로 Node.js, Bun, Python 패키지, .NET 런타임과 SDK를 확인하십시오.

3

수정 버전으로 업데이트

최소한 아래 수정 버전 표의 버전으로 업데이트하십시오. nodejs.org의 공식 Node.js 20.x 이하 빌드는 지원이 종료되어 수정이 제공되지 않으므로 22.x 이상으로 옮기십시오. Ubuntu나 Debian 패키지로 설치한 Node.js는 배포판의 보안 공지를 따르십시오.

4

다시 빌드, 다시 배포, 재시작

컨테이너 이미지, bun build --compile로 만든 실행 파일, .NET 자체 포함 앱과 NativeAOT 앱을 수정 버전으로 다시 빌드하고 다시 배포하십시오. 실행 중인 프로세스도 재시작하십시오. 이전 프로세스는 이전 라이브러리를 계속 로드하고 있습니다.

5

침해 징후 확인

JPCERT/CC는 수정 적용과 함께 침해 여부도 확인하도록 요청합니다. 외부 데이터를 압축 해제하는 프로세스에서 크래시 증가, 낯선 자식 프로세스, 외부로 나가는 연결이 있는지 살펴보십시오(이 사이트의 제안).

6

lockfile과 베이스 이미지의 고정 수정

package-lock.json, requirements.txt, poetry.lock 또는 Dockerfile의 FROM 줄이 이전 버전을 고정하고 있으면 다음 빌드에서 다시 돌아옵니다. 고정을 수정 버전으로 바꾸십시오.

수정 버전

9.2
CVSS v4.0 (Google 평가)
1.0.3–1.0.9, 1.1.0, 1.2.0
영향받는 Brotli 버전
미등재
CISA KEV (10월 27일 오전, 일본 시간)
보고 없음
악용 (1차 출처)
사용 중인 것영향받는 버전수정 버전출처
Brotli (C 라이브러리)1.0.3–1.0.9, 1.1.0, 1.2.01.0.10, 1.1.1, 1.2.1Google
Node.js 22.x22.23.4 이전22.23.4Node.js
Node.js 24.x24.22.1 이전24.22.1Node.js
Node.js 26.x26.12.1 이전26.12.1Node.js
Node.js 20.x 이하 (nodejs.org 공식 빌드)지원 종료없음 (22.x 이상으로 이전)Node.js
Bun1.0.21 이상 1.4.4 미만1.4.4Bun
PyPI brotli1.0.3 이상 1.2.1 미만1.2.1GitHub Advisory Database
PyPI brotlicffi1.0.3 이상 1.2.1.0 미만1.2.1.0GitHub Advisory Database
.NET 88.0.33 이전런타임 8.0.33 (SDK 8.0.133, 8.0.427)Microsoft
.NET 99.0.22 이전런타임 9.0.22 (SDK 9.0.123, 9.0.320)Microsoft
.NET 1010.0.14 이전런타임 10.0.14 (SDK 10.0.114, 10.0.403)Microsoft
Envoyv1.39.2, v1.38.5, v1.37.7, v1.36.11v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12Envoy
PHP Windows 빌드재빌드 이전의 8.5.12, 8.4.27, 8.3.36, 8.2.358.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1PHP

.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)

모든 가상 환경에서 업데이트

직접 빌드한 것 (컨테이너, 실행 파일)

수정 버전으로 다시 빌드하고 다시 배포

Brotli 사본이 있는 곳마다 각각 수정이 필요합니다. OS 업데이트는 OS 라이브러리만 수정합니다.

내 환경이 영향을 받는지 확인하는 방법

이 명령들은 자신의 시스템에서 버전만 확인합니다.

1

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 라이브러리”에 설명한 대로 확인하십시오.

2

Bun

bun --version을 실행하십시오. 1.4.4 이전 버전은 영향을 받습니다. bun build --compile로 만든 실행 파일은 빌드할 때 사용한 Bun을 포함하므로 다시 빌드할 때까지 영향을 받습니다(Bun의 권고).

3

Python

pip show brotli brotlicffi를 실행하십시오(또는 python -m pip list에서 Brotli와 brotlicffi를 찾으십시오). 1.2.1 이전의 brotli와 1.2.1.0 이전의 brotlicffi는 영향을 받습니다. 둘 다 설치되어 있지 않다면 이 결함과 관련해 수정할 Python 패키지는 없습니다. 가상 환경과 컨테이너마다 별도의 사본이 있으므로 각각 확인하십시오. python3-brotli 같은 OS 패키지로 설치했다면 버전 번호가 아니라 배포판의 보안 공지를 기준으로 판단하십시오.

4

.NET

dotnet --list-runtimes와 dotnet --list-sdks를 실행하십시오. Microsoft는 ASP.NET Core 요청 압축 해제나 HttpClient 응답 자동 압축 해제에서 Brotli를 활성화했거나, BrotliStream 또는 BrotliDecoder를 직접 호출하는 경우 노출된다고 밝혔습니다. 두 자동 옵션 모두 기본적으로 꺼져 있습니다.

5

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)에서 수정했습니다.

공개된 내용

Brotli 디코더의 범위 밖 쓰기 (CVE-2026-111497)
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의 공개 자료를 바탕으로 작성했습니다.

다음으로 읽을 글

최신 속보

FAQ

Q무슨 일이 있었나요?
A

2026년 10월 21일(미국 시간) Google은 공식 Brotli 라이브러리의 범위 밖 쓰기 취약점 CVE-2026-111497을 수정한 Brotli 1.2.1, 1.1.1, 1.0.10을 공개했습니다. 조작된 데이터를 압축 해제하면 메모리가 손상되어 크래시, 메모리 내용 노출, 경우에 따라 코드 실행으로 이어질 수 있습니다. Node.js, Bun, Python Brotli 패키지, .NET 등은 각자 포함한 사본에 대한 수정을 공개했습니다.

QNode2Shell과 HTTP2Shell은 무엇인가요?
A

이 취약점의 별칭입니다. JPCERT/CC에 따르면 Node.js의 공개와 관련해 Node2Shell, Brotli가 HTTP 압축에 널리 쓰이기 때문에 HTTP2Shell이라고 불립니다. 둘 다 CVE-2026-111497을 가리키며 별개의 결함이 아닙니다.

Q내 환경이 영향을 받나요?
A

Brotli 1.0.3–1.0.9, 1.1.0 또는 1.2.0을 포함한 소프트웨어가 외부에서 받은 Brotli 데이터를 압축 해제한다면 영향을 받습니다. 즉 해당 라인에서 22.23.4, 24.22.1, 26.12.1보다 이전인 Node.js, 1.2.1 이전의 PyPI brotli, 1.2.1.0 이전의 brotlicffi, 8.0.33, 9.0.22, 10.0.14 이전의 .NET입니다. Microsoft는 ASP.NET Core와 HttpClient가 기본적으로 Brotli를 자동 압축 해제하지 않는다고 밝혔으므로, .NET의 노출 여부는 이 기능을 활성화했는지에 따라 달라집니다.

QOS 업데이트를 설치했습니다. 그것으로 충분한가요?
A

항상 그렇지는 않습니다. nodejs.org의 공식 Node.js 빌드와 Docker 이미지, Bun, PyPI에서 설치한 Python Brotli wheel, .NET의 자체 포함(self-contained) 앱과 NativeAOT 앱, Bun 단일 파일 실행 파일은 자체 Brotli를 포함합니다. OS의 libbrotli를 업데이트해도 이 사본들은 바뀌지 않습니다. 각각을 업데이트한 뒤 컨테이너 이미지와 실행 파일을 다시 빌드하고 다시 배포하십시오. Ubuntu나 Debian 패키지로 설치한 Node.js는 시스템 libbrotli를 사용하므로 OS 업데이트로 수정됩니다(Ubuntu 및 Debian 보안 트래커).

Q악용되고 있나요?
A

10월 27일 오전(일본 시간) 기준 악용을 보고한 1차 출처는 없으며, CISA의 KEV 카탈로그에도 등재되지 않았습니다. 10월 23일 NVD에 추가된 CISA의 SSVC 평가는 악용을 none으로 평가합니다. Google, Node.js, JPCERT/CC, Microsoft는 공개된 개념 증명(PoC)을 언급하지 않습니다. 한 독립 해설 사이트는 PoC가 공개되었다고 밝혔지만, 이 사이트는 이를 검증하지 않았습니다.

Qrequests, urllib3, httpx, aiohttp도 업데이트해야 하나요?
A

10월 27일 기준 이 라이브러리들 중 이 결함에 대한 권고를 공개한 곳은 없습니다. urllib3, httpx, aiohttp는 brotli 또는 brotlicffi가 설치된 경우에만 Brotli를 압축 해제합니다(requests는 urllib3를 사용합니다). 수정이 필요한 것은 같은 환경의 brotli(1.2.1 이상)와 brotlicffi(1.2.1.0 이상)입니다. pip show brotli brotlicffi로 확인하십시오.