Node2Shell(CVE-2026-111497)은 Node.js에 함께 들어 있는 Brotli 압축 해제 코드에서 메모리 범위 밖 쓰기가 생기는 결함이고, 2026년 10월 21일 Node.js 보안 릴리스로 고쳐졌다. 22.x는 22.23.4, 24.x는 24.22.1, 26.x는 26.12.1 이상이 패치 버전이고, 18·20·25처럼 지원이 끝난 버전은 고쳐지지 않는다. CVE 기록에 등록된 CVSS 4.0 점수는 9.2점(Critical)이다.
| 항목 | 내용 |
| 공개일 | 2026-10-21 (Node.js 보안 릴리스), CVE 기록 게시 2026-10-22 |
| 발표 주체 | Node.js 프로젝트(보안 릴리스), Google(CVE 발급 기관) |
| CVE·CVSS | CVE-2026-111497 / CVSS 4.0 9.2(Critical), Node.js 자체 등급은 High |
| 무엇이 문제인가 | 조작된 Brotli 압축 데이터를 풀 때 메모리 범위 밖 쓰기 발생 |
| 영향 버전 | Node.js 22.x·24.x·26.x 패치 이전 버전, 지원 종료 버전 전부 |
| 패치 버전 | 22.23.4 / 24.22.1 / 26.12.1 |
| 비용 | 무료 업데이트 |
| 국내 영향 | Node.js·Bun으로 돌아가는 국내 서비스도 동일하게 해당. KISA 별도 공지는 확인 필요 |
| 출처(공식) | nodejs.org 보안 릴리스, CVE·NVD 기록 |
보안 정보 2026-10-25 기준. 추가 패치가 나올 수 있다.
이번 릴리스에서 Node.js는 CVE 10개를 한꺼번에 고쳤는데, 그중 High 등급이 4개였고 가장 주목받은 게 Brotli 건이다. Node.js 공식 공지는 이 결함으로 프로세스가 죽거나 메모리 내용이 새거나 원격 코드 실행까지 이어질 수 있다고 적었다. 발견자는 공식 크레딧에 OpenAI Codex Security 팀(Khai Tran, Sylvie Mayer)으로 올라가 있어서, AI 보안 도구가 찾은 취약점이라는 점도 화제가 됐다. Node2Shell은 보안 업계에서 붙인 별명이고, Node.js 공식 공지에는 이 이름이 나오지 않는다.


Node.js 버전 확인 방법과 노드js 취약점 패치 버전 정리
일단 내 환경의 버전부터 본다. 터미널에서 node -v 를 입력하면 v24.22.0 같은 식으로 현재 버전이 나온다. 로컬 PC와 CI 러너, 도커 이미지 안의 버전이 서로 다를 수 있어서 배포된 환경마다 따로 확인해야 한다.
| 릴리스 라인 | 상태(nodejs.org 기준) | 패치 버전 |
| 26.x | Current | 26.12.1 이상 |
| 24.x | LTS | 24.22.1 이상 |
| 22.x | LTS | 22.23.4 이상 |
| 25.x | 지원 종료 | 패치 없음, 지원 라인으로 이전 |
| 20.x·18.x 이하 | 지원 종료 | 패치 없음, 지원 라인으로 이전 |
Node.js는 공지에서 지원 종료 버전은 보안 릴리스가 나올 때마다 항상 영향을 받는다고 못박았다. HeroDevs(해외 분석)는 20.x 마지막 버전인 20.20.2와 18.x 마지막 버전인 18.20.8에서도 같은 결함을 확인했다고 밝혔다. Node.js 공식 공지에는 임시 우회책 없이 업데이트만 해결책으로 나와 있다.

fetch()·Express 5 body-parser, Node2Shell에 노출되는 경로
Node.js 공지가 밝힌 조건은 node:zlib로 외부에서 들어온 Brotli 데이터를 푸는 경우다. 그런데 직접 zlib를 부르지 않아도 노출될 수 있다는 분석이 이어졌다. Aikido와 Imperva(해외 분석)에 따르면 내장 fetch()는 상대 서버가 Brotli로 압축한 응답을 자동으로 풀기 때문에, 악성 서버나 사용자가 입력한 URL로 요청을 보내는 앱이 영향권이다. 웹훅 처리나 링크 미리보기 같은 기능이 여기에 해당한다.

들어오는 요청 쪽도 있다. Express 5와 body-parser 2.x는 Content-Encoding이 br인 요청 본문을 자동으로 풀어서, 이 조합을 쓰는 서버는 누구든 조작된 요청을 보낼 수 있다(Imperva, Aikido). 다만 기본 http 모듈만 쓴 서버는 Brotli 본문을 받기만 해서는 풀지 않는다고 한다.

HTTP2Shell로 번진 Brotli 취약점, Python·curl·Envoy도 점검 대상
결함의 뿌리는 Node.js 코드가 아닌 Google Brotli 라이브러리(1.0.3~1.2.0)에 있다. CVE 기록도 Brotli 1.0.10, 1.1.1, 1.2.1로 올리라고 적고 있다. 그래서 10월 23일 Aikido는 Brotli를 쓰는 다른 HTTP 스택까지 영향이 넓어졌다며 이름을 HTTP2Shell로 바꿔 경고했다.
Aikido(해외 분석)가 짚은 대상은 이렇다. Python에서는 PyPI의 Brotli 패키지를 1.2.1로, brotlicffi를 1.2.1.0으로 올려야 하고, 이 패키지가 설치돼 있으면 urllib3(requests 포함), httpx, aiohttp, Scrapy가 응답을 자동으로 풀어 코드에서 Brotli를 import하지 않아도 노출된다. curl·libcurl은 연결된 Brotli 라이브러리를 올려야 하고, Envoy는 1.40.0·1.39.3·1.38.6·1.37.8, Istio는 1.29.9·1.30.6·1.31.2가 수정 버전으로 나왔다. 또 pip-audit나 Dependabot이 아직 이 버전들을 잡아내지 못한다고 해서, Python 쪽은 pip show brotli 로 설치 버전을 직접 보는 편이 확실하다.

Bun 영향과 Bun 1.4.4 업데이트
Bun도 Brotli를 내장하고 있어 같은 결함을 안고 있었다. Aikido에 따르면 1.4.4 이전 버전이 영향을 받고, 1.4.4부터 수정이 들어갔다. Bun 공식 블로그의 1.4.4 릴리스 노트(2026-10-22)에도 보안 수정 대상 목록에 Brotli가 들어 있는데, CVE 번호까지 적지는 않았다. 버전은 터미널에서 bun --version 으로 확인한다. Bun으로 단일 실행 파일을 만들어 배포했다면 런타임만 올려서는 안 되고, 1.4.4 이상으로 다시 빌드해야 한다고 Aikido는 덧붙였다.

Node2Shell 대응, 개발자·서버 운영자 할 일 체크리스트
할 일은 무료 업데이트 한 번이지만, 컨테이너와 빌드 산출물까지 챙겨야 끝난다.
- 버전 확인: 서버, 로컬, CI, 도커 이미지마다 node -v 와 bun --version 을 확인한다.
- 업데이트: 22.23.4, 24.22.1, 26.12.1 이상 또는 Bun 1.4.4 이상으로 올린다. 18·20 사용자는 22나 24 LTS로 옮긴다.
- 재빌드·재시작: 예전 태그로 만든 컨테이너 이미지는 그대로 취약하니 다시 빌드해 배포하고, 오래 켜둔 프로세스는 재시작한다(Qualys, Aikido).
- 의존성 점검: Python 프로젝트의 Brotli·brotlicffi, 프록시 계층의 Envoy·Istio 버전을 같이 본다.
- 임시 완화: 공식 권고에는 없다. 보안 업체들은 당장 못 올리는 경우 프록시나 로드밸런서에서 Content-Encoding이 br인 요청을 막으라고 권하지만, fetch()로 받는 응답은 막지 못하는 임시방편이다(Aikido).

실제 악용 여부는 CISA가 10월 23일 기준 악용 사례 없음으로 분류했다(CVE 기록의 CISA 평가). 다만 Imperva는 패치 전 24.22.0에서 실험실 조건으로 코드 실행을 재현했다고 밝혀서(매번 성공하지는 않았다고 한다), 시간이 지나면 상황이 달라질 수 있다. 일반 사용자는 직접 할 일이 거의 없고, Node.js로 만든 데스크톱 앱이나 개발 도구를 쓰고 있다면 앱 업데이트 알림이 오는 대로 받으면 된다.

Node2Shell, 내 서버도 영향받나?
패치 전 Node.js나 Bun을 쓰고, fetch()로 외부 응답을 받거나 Express 5·body-parser 2.x로 압축 본문을 받는다면 영향권이다. 버전이 22.23.4·24.22.1·26.12.1 이상이면 Node.js 쪽은 수정된 상태다.
Node.js 버전 확인은 어떻게 하나?
터미널에서 node -v 를 입력하면 된다. 도커를 쓴다면 이미지 안에서 같은 명령을 실행해 실제 배포 버전을 봐야 한다.

Node 18 같은 지원 종료 버전은 어떻게 하나?
18·20·25는 공식 패치가 나오지 않아 22나 24 LTS로 옮기는 게 공식 권고다. 당장 옮기기 어렵다면 유료 장기 지원(nodejs.org/en/about/eol 안내)을 검토하는 방법이 있다.
이 글이 도움이 됐다면 운영 중인 스택(Python, Bun 등)을 댓글로 남겨주면 확인할 버전을 더 정리해 보겠다.
AI 보안 도구가 찾은 취약점이 공식 크레딧에 이름을 올리는 일이 앞으로 더 잦아질 것 같다.
출처
- Node.js, "Wednesday, October 21, 2026 Security Releases" (2026-10-21): https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
- Node.js, "Node.js 24.22.1 (LTS)" (2026-10-21): https://nodejs.org/en/blog/release/v24.22.1
- Node.js, "Node.js 26.12.1" (2026-10-21): https://nodejs.org/en/blog/release/v26.12.1
- Node.js, "Node.js 22.23.4 (LTS)" (2026-10-21): https://nodejs.org/en/blog/release/v22.23.4
- Node.js, "Previous Releases": https://nodejs.org/en/about/previous-releases
- CVE Program, "CVE-2026-111497" (2026-10-22): https://www.cve.org/CVERecord?id=CVE-2026-111497
- NVD, "CVE-2026-111497" (2026-10-22): https://nvd.nist.gov/vuln/detail/CVE-2026-111497
- GitHub Advisory Database, "GHSA-9v8h-qqgm-4m35" (2026-10-22): https://github.com/advisories/GHSA-9v8h-qqgm-4m35
- Bun, "Bun v1.4.4" (2026-10-22): https://bun.com/blog/bun-v1.4.4
- (해외 분석) Aikido, "Node2Shell: Node.js Brotli vulnerability allows remote code execution (CVE-2026-111497) and the fix" (2026-10-22): https://www.aikido.dev/blog/node2shell-nodejs-brotli-rce-cve-2026-111497
- (해외 분석) Aikido, "Node2Shell Brotli vuln (CVE-2026-111497) evolves to HTTP2Shell, as libraries and apps using HTTP are affected." (2026-10-23): https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497
- (해외 분석) Imperva, "Node2Shell: From Brotli Data to Remote Code Execution" (2026-10-22, Ron Masas): https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution
- (해외 분석) Qualys, "Node.js Patches Brotli Remote Code Execution Flaw: Find Vulnerable Runtimes Before Attackers Do" (2026-10-23): https://blog.qualys.com/product-tech/2026/10/23/node-js-patches-brotli-remote-code-execution-flaw-find-vulnerable-runtimes-before-attackers-do
- (해외 분석) HeroDevs, "CVE-2026-111497 (Node2Shell): Node.js Brotli RCE Fix" (2026-10-23): https://www.herodevs.com/blog-posts/cve-2026-111497-node2shell-node-js-brotli-rce
'AI STUDY > ISSUE' 카테고리의 다른 글
| Kimi K3.1 Pro, API로 쓰려는 개발자가 먼저 볼 가격과 사양 (0) | 2026.10.26 |
|---|---|
| 오픈AI 소송, 자녀가 챗GPT를 쓴다면 알아둘 텍사스 소송 쟁점 (0) | 2026.10.25 |
| Cursor Computer Use 정리, Claude Code·ChatGPT와 비교한 5가지 차이 (0) | 2026.10.25 |
| 클로드 MCP Tasks·엘리시테이션 지원, 달라진 점 3가지 정리 (0) | 2026.10.24 |
| 마이크로소프트 AI 진단, 정말 의사보다 2배 넘게 정확할까? (0) | 2026.10.24 |