Brotli 디코더 CVE-2026-111497, Node2Shell에서 HTTP2Shell로 확대
- CVE-2026-111497은 Google Brotli 디코더의 out-of-bounds write로, 1.0.3부터 1.2.0까지 모든 플랫폼 버전에 영향을 주며 CVSS v4.0 9.2(Critical)를 받음
- Node.js의 Node2Shell로 알려졌던 취약점이 HTTP2Shell로 확장돼 Python, C++, Bun, Envoy, libbrotli까지 같은 C 구현을 쓰는 HTTP 라이브러리와 앱이 모두 영향권에 들어감
- OpenAI가 2월에 비인증 원격 코드 실행으로 보고했고 근본 원인은 당시 Brotli 소스에서 수정됐지만 보안 문제로 인식되지 않아 수정이 담긴 릴리스가 나오지 않았음
- Brotli 1.2.1, brotlicffi 1.2.1.0으로 업그레이드하고 해당 패키지를 포함한 컨테이너 이미지를 다시 빌드해야 하며, Apache mod_brotli와 Nginx는 기본 설정으로는 Brotli를 디코딩하지 않음
- PyPI 패키지에 CVE가 아직 매핑되지 않아 pip-audit, Dependabot, Safety가 취약 버전을 잡아내지 못하고, 패치가 없는 라이브러리는 Brotli 디코딩을 끄는 게 권고됨
Hacker News opinions
Python도 영향받는다고? pypi brotli 패키지 보니까 shell이랑은 상관없어 보이는데.
pypi 들어갔다가 인증서 사고로 certifi, pip, uv 올리라는 보안 공지 봤는데 그것도 더 큰 뉴스로 다뤄야 하는 거 아님?
이번 주에 하드모드 켠 사람 누구냐. 일단 취약점 목록에 쌓아두고 하나씩 처리하자.
아니야, 우리 계속 캐주얼 모드였음. 이게 이제 새 정상임.
HTTP2Shell이라는 이름은 진짜 별로다. HTTP/2에 문제 생긴 줄 알았음. Software2Shell이 낫지.
이름은 그냥 마케팅임. HTTP는 다들 알지만 brotli는 모르니까.
POST 바디 압축을 풀어주는 서버라면 실제로 영향받음. HTTP 서버라고 다 안전한 게 아님.
그냥 CVE-2026-111497이라고 부르자. 정확하고 팀장한테 설명하기도 쉬움.
보안이 중요한 곳에서 C 쓰는 걸 그만둬야 함. 구글이 직접 관리하는 브로틀리인데 왜 러스트가 아님?
그 라이브러리들은 러스트 나오기 전에 만들어짐. 전환 비용이 있음. 모질라가 브라우저 전체 재작성을 포기하고 우선순위 모듈만 골라서 한 게 맞는 판단이었음.
드롭박스는 2016년에 러스트 구현으로 바꿨는데 느려서 그 대가를 치르는 중임.
기사에 OpenAI가 2월에 발견했다고 하는데 그건 아닌 것 같음. 구글이 2월에 소스를 고쳤지만 보안 이슈인 줄 몰랐던 거지.
링크된 트윗에도 그런 주장 없음. 출처가 안 보이는데.
확인해보니 'Detect and report invalid stream earlier' 커밋이 2월에 있었음. 사람이 한 것 같기도 하고.
몇 달 전엔 업그레이드 쿨다운 쓰라고 했는데 이제 보안 문제는 즉시 올려야 함. 의존성이 10개면 판단이 되지만 락파일에 수천 개면 못 고름.
요청 바디 브로틀리 압축을 지원하는 구현이 이렇게 많다는 게 의외임. 기사만 봐서는 일반 설정에서 실제로 해당되는 게 몇 개인지 알기 어렵고, 과장은 이제 좀 짜증남.