Node2Shell(CVE-2026-111497) 취약점은 Node.js 환경에서 사용되는 Brotli 디코더의 메모리 처리 결함으로 인해 인증 과정 없이 원격 코드 실행(RCE)으로 이어질 수 있는 고위험 보안 이슈입니다. 애플리케이션의 비즈니스 로직 코드 작성 방식과 무관하게 구동 중인 Node 런타임 버전 자체에 내재된 문제이기 때문에, 전 세계 서버 운영 환경에서 즉각적인 진단과 대응이 요구되고 있습니다. 이번 글에서는 취약한 환경을 정확히 판별하는 방법과 단계별 조치 방안을 정리해 드립니다.
01. Node2Shell 취약점 개요 및 영향 범위
이 취약점은 Node.js에 번들되거나 동적으로 링크된 Brotli 디코더에서 발생하며, 원격 코드 실행으로 이어질 수 있는 out-of-bounds write 취약점으로 분류되었습니다. Node.js를 사용한다는 사실만으로 곧바로 원격 공격이 성립하는 것은 아니지만, 특정 압축 인코딩 요청이 유입될 때 시스템이 영향을 받게 됩니다.✓ 영향을 받는 환경과 조건
애플리케이션 코드 내에서 직접 Brotli 압축을 다루지 않더라도 내부 라이브러리나 프레임워크가 자동으로 압축을 해제하는 과정에서 취약점이 발동할 수 있습니다. 특히 Express 5 버전의 요청 본문 처리나 Node 18 이상에서 제공하는 전역 fetch() 함수, 그리고 다양한 HTTP 클라이언트 라이브러리가 응답 데이터를 자동으로 처리할 때 노출될 수 있습니다.02. 취약한 Node.js 버전 및 패치 여부 확인 방법
서버가 공격 위험에 노출되어 있는지 확인하려면 현재 사용 중인 Node.js의 버전과 내부 Brotli 디코더의 빌드 방식을 정확하게 점검해야 합니다. 단순히 버전 번호만으로는 판단하기 어려운 경우가 있으므로 빌드 옵션을 함께 확인하는 것이 안전합니다.✓ 버전 상수와 공유 라이브러리 확인
Node.js 환경에서 아래의 명령어를 실행하여 내부 상수를 확인하거나 동적 라이브러리 상태를 점검할 수 있습니다.- 바이너리 버전 및 상수 확인:
node -p "process.versions.brotli" - 공유 라이브러리 빌드 여부 확인:
node -p "process.config.variables.node_shared_brotli"