Node.js October 2026
보안 릴리스
Brotli RCE부터
TLS 우회까지 10개 CVE
2026년 10월 21일,
Node.js가 모든 지원 릴리스 라인에 걸쳐 10개 취약점을 수정했습니다.
그중 4개가 High 등급이며,
하나는 원격 코드 실행이 가능합니다.
이 글은 2편 시리즈의 2편입니다.
1편: PHP2Shell, PHP 역사상 가장 위험한 취약점이 터졌다
PHP2Shell이 전 세계 웹서버를 뒤흔든 같은 날,
Node.js도 10개의 보안 패치를 릴리스했습니다.
헤드라인은 CVE-2026-111497,
Node.js에 번들된 Brotli 디코더의 Out-of-Bounds Write로
원격 코드 실행이 가능한 취약점입니다.
Node.js 커뮤니티에서는 PHP2Shell에 빗대어
“Node2Shell”이라 부르고 있습니다.
10개 CVE 전체 목록
Brotli 디코더 OOB Write — 원격 코드 실행
조작된 Brotli 스트림이 디코더 할당 영역 밖에 쓰기를 유발. Node.js는 이를 RCE로 분류.
영향: 22.x, 24.x, 26.x
NUL 바이트가 포함된 호스트네임으로 DNS 조회 조작
C 리졸버의 NUL 종단 처리와 Node.js의 호스트네임 검증 불일치로 다른 호스트로 조회가 우회됨.
영향: 22.x, 24.x, 26.x
전각(fullwidth) 숫자를 사용한 TLS 인증서 호스트네임 우회
IP를 전각 문자(U+FF10 등)로 표현하면 인증서 검증을 통과하면서 실제로는 다른 호스트로 연결.
영향: 24.x, 26.x
느슨한 IP 해석을 통한 TLS 인증서 호스트네임 우회
호스트가 느슨하게 IP로 변환되는 경우 인증서 hostname 검증을 우회 가능.
영향: 22.x, 24.x, 26.x
HTTP keep-alive 응답 처리 문제
keep-alive 연결 재사용 시 응답 처리 불일치.
영향: 22.x, 24.x, 26.x
TLS 호스트네임 정규화 이전 검증 우회
서버 인증서 검증 시 호스트네임을 정규화하기 전에 비교하여 우회 가능.
영향: 22.x, 24.x, 26.x
eMudhra CA 인증서 제거
신뢰 저장소에서 eMudhra CA 인증서 제거.
영향: 22.x, 24.x, 26.x
Undici HTTP 클라이언트 취약점
번들된 Undici HTTP 클라이언트(fetch 구현체)의 보안 수정.
영향: 22.x, 24.x, 26.x
ZIP 검증 시 공격자 제어 바이트 노출
ZIP 파일 검증 과정에서 공격자가 제어 가능한 바이트가 노출.
영향: 26.x
와일드카드 경로로 Permission Model 과잉 부여
와일드카드 패턴이 의도보다 넓은 파일시스템 접근을 허용.
영향: 26.x
CVE-2026-111497: Brotli 디코더 RCE — 이번 릴리스의 핵심
이 취약점은 Node.js 자체가 아니라
Node.js에 번들된 Google Brotli 라이브러리에 있습니다.
Brotli 프로젝트도 같은 날 1.2.1, 1.1.1, 1.0.10을 릴리스했으며,
Python의 brotli, brotlicffi 패키지도 영향을 받습니다.
기술적 원인
Brotli 디코더의 AES_Cipher() 함수가
출력 버퍼 길이를 signed int로 계산합니다.
입력 크기가 2GiB의 배수가 되면 정수 오버플로가 발생하고,
디코더가 할당된 메모리 영역 밖에 쓰기를 수행합니다.
수정 패치(upstream 98fbc89211)는
TryGetIntCipherOutputLength() 가드를 crypto_cipher.h에 추가하여
오버사이즈 입력이 오버플로 대신 안전하게 실패하도록 합니다.
어떤 서비스가 위험한가
“내가 제어하지 않는 Brotli 데이터를 디코딩하는 모든 곳”이 대상입니다.
• 외부 요청의 Brotli 인코딩된 request body를 받는 서버
• 외부 API 응답을 Brotli로 받아 처리하는 클라이언트
• 파일 암호화/압축 파이프라인
• 백업 툴링, CDN 프록시
CVSS v4.0 기준 9.2로 평가되었으며,
입력을 공격자가 제어할 수 있는 환경에서는 즉시 대응이 필요합니다.
TLS 호스트네임 우회 3종 — 신뢰의 틈
이번 릴리스에서 High로 분류된 나머지 3개 CVE는
모두 TLS와 DNS의 호스트네임 처리 불일치를 악용합니다.
공격자가 영향을 줄 수 있는 호스트네임을
Node.js가 검증하는 환경이라면 위험합니다.
NUL 바이트 호스트네임으로 DNS 조회 조작
Node.js는 호스트네임에 NUL 바이트(0x00)가 포함되어도
전체 문자열을 인증서 검증에 사용합니다.
하지만 C 리졸버는 NUL에서 잘라내므로
검증된 호스트와 실제 연결 대상이 다를 수 있습니다.
영향: 22.x, 24.x, 26.x
전각 숫자로 TLS 와일드카드 인증 우회
유니코드 전각 숫자(U+FF10~U+FF19)로 IP 주소를 표현하면
와일드카드 인증서(*.example.com)의 깊이 제한을 ���회할 수 있습니다.
*.example.com 인증서가 a.b.example.com까지 유효해지는 상황.
영향: 24.x, 26.x
느슨한 IP 해석을 통한 TLS 인증서 검증 우회
호스트네임이 비표준 방식으로 IP 주소로 해석될 때
인증서의 hostname 검증이 우회됩니다.
webhook URL, 링크 프리뷰 등 공격자가 주소를 영향 줄 수 있는 곳에서 위험합니다.
영향: 22.x, 24.x, 26.x
이 세 가지 TLS 취약점은
외부 URL을 받아 아웃바운드 TLS 연결을 만드는 서비스에서
SSRF(Server-Side Request Forgery)와 결합될 수 있어
특히 주의가 필요합니다.
패치 버전
Node.js 20 — 공식 패치 없음
Node.js 20은 2026년 4월 30일에 EOL에 도달했습니다.
10개 취약점 모두 Node.js 20에 해당되지만 패치는 제공되지 않습니다.
Node.js 22 또는 24로의 마이그레이션이 필요합니다.
EOL 버전의 상용 지원이 필요하면
HeroDevs NES 같은 서비스를 고려하세요.
버전업이 당장 어렵다면
Node.js는 PHP2Shell과 달리
대부분의 CVE에 대해 우회 방법이 제한적입니다.
그래도 위험을 줄일 수 있는 조치가 있습니다.
CVE-2026-111497 (Brotli RCE)
2GiB 이상 입력이 subtle.encrypt()에 도달하지 않도록 요청 크기를 제한하세요. reverse proxy(Nginx, HAProxy)에서 request body size를 제한하는 것이 가장 현실적입니다.
TLS 관련 (105482, 105483, 106069)
외부 입력으로 호스트네임을 구성하는 아웃바운드 연결을 점검하세요. webhook URL, 링크 프리뷰, 외부 API 연동에서 호스트네임 검증 로직을 추가하거나 허용 목록(allowlist)을 적용하세요.
Docker / 컨테이너 환경
공식 Node.js Docker 이미지는 10월 21일에 업데이트되었습니다. 이미지 태그를 고정하지 않고 latest나 22-slim 같은 rolling 태그를 사용 중이라면 이미지를 리빌드하세요.
Node.js를 번들하는 경우
Electron, pkg, nexe 등으로 Node.js를 내장하는 바이너리는 Node.js 업데이트와 별개로 리빌드가 필요합니다.
Brotli — Node.js만의 문제가 아니다
CVE-2026-111497은 Google Brotli 라이브러리 자체의 결함이므로
Brotli를 사용하는 다른 런타임과 패키지도 영향을 받습니다.
Go, Rust, Java의 Brotli 구현은
별도의 네이티브 구현이거나
Google C 라이브러리를 바인딩하는 방식에 따라 영향 여부가 다릅니다.
사용 중인 Brotli 라이브러리의 버전을 확인하세요.
대응 체크리스트
PHP2Shell과 같은 날 릴리스되어 상대적으로 덜 주목받았지만,
Brotli RCE(CVE-2026-111497)는 CVSS 9.2의 심각한 취약점입니다.
TLS 우회 취약점 3건도 SSRF 체인에 활용될 가능성이 높아
빠른 패치가 필요합니다.
Node.js는 PHP와 달리 워커 프로세스 내부에서의
메모리 안전성 문제보다는 입출력 경계의 검증 불일치가 주된 위협입니다.
리버스 프록시에서 입력 크기를 제한하고,
외부 입력 기반의 아웃바운드 연결을 점검하는 것이
버전 업데이트와 함께 할 수 있는 현실적 방어입니다.
본 글은 리원에이스 기술개발본부가 작성한 기술 콘텐츠입니다. 외부 공유 시 출처를 명시해 주세요.
2026년 10월 24일
리원에이스 기술개발본부