Reddit

Node2Shell: Node.js Brotli vulnerability allows remote code execution (CVE-2026-111497)

Node2Shell: Node.js Brotli 취약점으로 원격 코드 실행 가능 (CVE-2026-111497)

Node.js의 Brotli 디코더에서 비정상 입력이 메모리 경계를 벗어나 쓰게 하는 취약점이 발견됐습니다. 공격자가 조작한 압축 데이터를 처리하면 서비스 장애나 메모리 노출, 원격 코드 실행으로 이어질 수 있으며, 패치 버전으로 업그레이드해야 합니다.

에디터 노트

이번 취약점은 공격자가 통제하는 압축 데이터를 처리할 때만 노출되지만, Express 5와 body-parser 2.x의 수신 요청 처리 및 fetch()의 자동 응답 해제처럼 입력 경로가 여러 곳에 있습니다. Node.js 24.22.0에서 연구자들이 코드 실행을 보고했고 24.22.1이 같은 입력을 거부한다는 설명은 업그레이드 우선순위를 뒷받침합니다. 10월 22일 기준 실제 악용 보고가 없다는 사실과 연구 환경에서 코드 실행이 확인됐다는 사실은 구분해야 합니다. 댓글에서 제기한 2월 상류 수정과 10월 Node.js 반영 사이의 간격은 공급망에서 보안 수정이 런타임에 도달하기까지 걸리는 시간을 드러냅니다. 다만 커밋 메시지만으로 보안 영향이 명확했는지, 반영 지연에 어떤 사정이 있었는지는 자료에 나오지 않습니다. 인바운드 차단은 fetch() 응답을 막지 못하므로 임시 규칙을 적용한 서비스도 런타임 업그레이드를 별도로 마쳐야 합니다.

AI 요약

Node.js와 Bun에서 Brotli 데이터를 해제할 때 메모리 경계를 벗어나 쓰는 취약점 CVE-2026-111497이 발견됐습니다. 공격자가 조작한 입력을 처리하면 프로세스가 중단되거나 메모리 일부가 노출될 수 있고, 원격 코드 실행도 가능합니다. Node.js는 취약점 심각도를 높음으로 분류했습니다.

영향 범위와 입력 경로

Node.js 22.x, 24.x, 26.x는 각각 22.23.4, 24.22.1, 26.12.1에서 수정됐습니다. Bun은 1.4.4 이상으로 올려야 합니다. 25.x, 23.x, 20.x 및 이전 Node.js 버전은 지원 종료 상태라 수정 버전이 제공되지 않습니다.

공격자가 제어하는 Brotli 데이터가 런타임에 들어와야 취약점이 발동합니다. Express 5와 body-parser 2.x는 Brotli로 압축한 요청 본문을 해제하므로 공격자가 조작한 요청을 받을 수 있습니다. 반면 기본 Node.js HTTP 서버는 수신한 Brotli 본문을 자동으로 해제하지 않습니다. fetch()는 Brotli 응답을 자동 해제하므로 공격자가 운영하거나 침해한 서버에서 받은 응답도 입력 경로가 됩니다. node:zlib의 Brotli 함수에 신뢰할 수 없는 데이터를 전달하는 코드 역시 영향을 받습니다.

수정 및 임시 완화

호스트, CI 실행기, 서버와 컨테이너 안에서 Node.js 버전을 확인하고 같은 릴리스 라인의 수정 버전 이상으로 올려야 합니다. 이전 태그로 고정한 컨테이너 이미지는 다시 빌드하고 배포해야 합니다. 관리형 플랫폼은 자체 런타임 업데이트가 늦을 수 있으므로 제공자가 실행하는 버전도 확인해야 합니다. Linux 배포판 패키지는 Node.js에 번들된 Brotli 대신 시스템 Brotli 라이브러리를 쓸 수 있어 배포판 보안 공지도 확인해야 합니다.

즉시 업그레이드하지 못하면 리버스 프록시나 로드밸런서에서 Content-Encoding: br 요청을 거부해 수신 요청의 노출을 줄일 수 있습니다. Vercel은 10월 21일 인바운드 요청을 차단하는 방화벽 규칙을 추가했습니다. 다만 이런 조치는 다른 서버에서 받은 Brotli 응답에는 적용되지 않습니다. 원문은 런타임 업그레이드만이 취약점을 제거한다고 설명합니다.

취약점 세부 내용과 공개 현황

문제는 Brotli 디코더의 범위를 벗어난 쓰기(out-of-bounds write)입니다. Node.js는 Brotli 프로젝트의 0ed4268a 커밋을 가져와 잘못된 입력을 감지하고 버퍼 바깥에 쓰기 전에 처리를 중단하도록 수정했습니다. 같은 수정은 Brotli 1.2.1, 1.1.1, 1.0.10에도 포함됐습니다.

10월 22일 공개된 첫 PoC는 의도적으로 약화한 테스트 빌드에서만 코드 실행에 성공했습니다. 같은 날 연구자들은 수정 전 공식 Node.js 24.22.0 Linux arm64 이미지에서도 코드 실행을 보고했지만 매번 성공하지는 않았다고 원문은 전합니다. Node.js 24.22.1은 같은 입력을 거부하며, 10월 22일 기준 실제 공격 사례는 보고되지 않았습니다.

Reddit 반응

  • @Salty_Cat6196 — 이 수정이 2월에 상류 Brotli에 들어갔는데 Node가 런타임에 반영한 건 지금이냐고 묻습니다. 커밋 메시지가 보안 문제로 뚜렷하게 보이지 않는다면 개발자를 탓하기 어렵지만, AI로 수정 사항이 보안 관련인지 판별하는 절차가 생기면 좋겠다고 말합니다.
  • @dimer0 — 영향을 받는 대상은 공격자가 제어할 수 있는 Brotli 데이터를 해제하는 Node.js 또는 Bun 앱이라고 요약합니다.
  • @Rogueshoten — 한 보안 연구자가 서비스를 중단시킬 수는 있지만 아직 원격 코드 실행까지는 못 한 경우에도, 여러 공격자 중 누군가는 성공해 실제 공격으로 이어지는 일이 있다고 말합니다.
  • @lnoiz1sm — 런타임에서 원격 코드 실행 취약점이 나오는 동안 보안 엔지니어 대체를 이야기한다며, 패치하는 사람을 없애기 전에 패치 검증부터 자동화하자고 말합니다.
  • @BigDog_Nick — Aikido 대시보드의 취약점 수가 개발자들이 수정하는 속도보다 빠르게 늘고 있다고 농담합니다.
  • @Could_it_be_potato — 소규모 팀이 인력 감축까지 겪는 상황에서 이런 소식이 이어지니 지쳤다고 말합니다.
  • @Capt91 — 새 CVE 걱정 없이 하루만 보낼 수 없느냐고 푸념합니다.

원문: Aikido / 번역·요약: Trawling

뉴스 타래

전체 보기