안녕하세요, 스패로우입니다.
최근 Node.js에서 서비스 중단, 프로세스 메모리 내 정보 유출 또는 원격 코드 실행(RCE)으로 이어질 수 있는 보안 취약점(CVE-2026-111497)이 공개되었습니다.
‘Node2Shell’로 알려진 이번 취약점은 Node.js에 포함된 Brotli 라이브러리가 비정상적인 압축 데이터를 해제하는 과정에서, 내부 버퍼에 허용된 범위를 넘어 데이터를 기록해 발생하는 경계 밖 쓰기(Out-of-Bounds Write) 취약점입니다.
취약점 악용 시 서비스 중단, 메모리 내 정보 유출 및 원격 코드 실행 등의 보안 위협이 발생할 수 있어 영향을 받는 버전에 대한 신속한 점검과 보안 업데이트가 권고됩니다.
■ 개요
– CVE ID: CVE-2026-111497
– 심각도: 높음(HIGH) – Node.js 공식 등급. “Brotli decoder out-of-bounds write permits remote code execution”
– 주요 위험: 취약점 악용 시 서비스 중단, 프로세스 메모리 내 정보 유출 및 원격 코드 실행(RCE) 가능
– 영향을 받는 버전 및 패치 버전
| 제품명 | 영향을 받는 버전 | 패치 버전 |
|---|---|---|
| Node.js | 22.23.4 미만 | 22.23.4 이상 |
| Node.js | 24.22.1 미만 | 24.22.1 이상 |
| Node.js | 26.12.1 미만 | 26.12.1 이상 |
| Google Brotlie 라이브러리 | 1.0.3 이상 1.0.10 미만 | 1.0.10 |
| Google Brotlie 라이브러리 | 1.1.0 이상 1.1.1 미만 | 1.1.1 |
| Google Brotlie 라이브러리 | 1.2.0 이상 1.2.1 미만 | 1.2.1 |
※ Node.js 20.x 이하 및 23.x, 25.x 등 공식 지원이 종료된 버전은 보안 업데이트가 제공되지 않으므로 지원 중인 버전으로 업그레이드할 것을 권고합니다.
■ 취약점 영향 및 공격 조건
본 취약점은 Node.js에 포함된 Brotli 라이브러리가 비정상적인 압축 데이터를 해제할 때 내부 버퍼에 허용된 범위를 넘어 데이터를 기록하여 발생합니다.
공격자가 조작한 Brotli 압축 데이터를 애플리케이션에 전달하고 애플리케이션이 이를 취약한 압축 해제 기능으로 처리하는 경우, 프로세스 메모리 손상으로 인한 서비스 중단 및 원격 코드 실행 등의 피해가 발생할 수 있습니다.
따라서 실제 공격 가능성은 애플리케이션 또는 사용 중인 라이브러리에 외부에서 전달된 Brotli 압축 데이터를 해제하는 경로가 있는지에 따라 달라지므로 다음과 같은 처리 경로를 점검해야 합니다.
– Brotli로 압축된 HTTP 요청 데이터를 처리하는 경우
– 외부 서버에서 전달받은 압축 응답을 자동으로 해제하는 경우
– 업로드 파일 또는 외부 데이터를 Brotli 방식으로 압축 해제하는 경우
■ 취약점 확인 방법
① Node.js 버전 확인
Windows 및 Linux 환경에서 명령 프롬프트 또는 터미널을 실행한 후 다음 명령어를 입력합니다.
– 확인 명령어
node -v
– 실행 결과 예시
v22.23.3
위 결과는 Node.js 22.23.3 버전이 설치되어 있음을 의미합니다. 해당 버전은 보안 수정 버전인 22.23.4 이전 버전으로, 보안 업데이트가 필요합니다.
② Node.js 실행 파일 위치 확인
– Windows
where.exe node
– Linux
command -v node
현재 명령행에서 실행되는 Node.js의 경로는 다음 명령어로도 확인할 수 있습니다.
node -p "process.execPath"
단, 위 명령어는 현재 명령행에서 사용하는 Node.js를 확인하는 방법입니다. 실제 서비스는 별도의 설치 경로, 버전 관리자, 서비스 계정 또는 컨테이너에 포함된 Node.js를 사용할 수 있습니다.
따라서 서비스 실행 설정과 컨테이너 내부 버전을 별도로 확인해야 합니다. 필요한 경우 실제 애플리케이션 프로세스에서 process.version과 process.execPath를 내부 진단 로그로 확인할 수 있습니다.
③ Brotli 압축 해제 경로 확인
애플리케이션과 사용 라이브러리에서 Brotli 압축 해제 기능의 사용 여부를 확인하고, 외부 입력이 해당 기능까지 전달되는지 점검해야 합니다. 버전 확인은 패치 필요 여부를 판단하는 기준이며, 압축 해제 경로 점검은 실제 서비스의 노출 가능성을 판단하기 위한 절차입니다.
■ 조치 방안
✔️ 운영 환경 점검
– Node.js 설치 여부 및 사용 버전 확인, 취약 버전 사용 여부 점검
– 애플리케이션 및 사용 라이브러리의 Brotli 압축 해제 기능 사용 여부 확인
✔️ 보안 패치 업데이트(*상기 표 참고)
– Node.js 22.x, 24.x, 26.x는 각 버전에 해당하는 보안 업데이트 적용
– 공식 지원이 종료된 Node.js 버전은 보안 패치가 적용된 지원 버전으로 업그레이드 권고
– 업데이트 이후 서비스 재시작 및 실제 실행 환경에 패치 버전이 적용되었는지 확인
– 컨테이너 환경에서는 수정된 Node.js가 포함된 이미지로 재빌드 또는 교체 후 재배포
✔️ 즉시 업데이트가 어려운 경우
보안 패치를 즉시 적용하기 어려운 경우, 공격자가 제공한 Brotli 데이터가 취약한 압축 해제 기능에 도달하지 않도록 다음과 같은 임시 조치를 권고합니다.
– Brotli 압축 요청을 처리하는 경우: 압축 해제 이전 단계에서 Brotli 압축 요청을 차단하거나 관련 기능 일시 중단
– 외부 HTTP 응답을 압축 해제하는 경우: 클라이언트 라이브러리의 Brotli 자동 압축 해제 기능 비활성화 검토
– 외부 파일이나 데이터를 처리하는 경우: Brotli 압축 해제 경로 제한 또는 관련 처리 기능 일시 중단
※ 요청 본문만 차단하면 외부 서버 응답이나 파일 처리 경로는 남을 수 있으므로, 실제 압축 해제 경로를 기준으로 조치해야 합니다.
※ 방화벽 및 WAF를 통한 접근 제한은 보조적인 대응 방안이며, 근본적인 해결을 위해서는 보안 패치 적용이 필요합니다.
※ Linux 배포판 또는 별도 공급업체에서 보안 수정 사항을 백포트한 경우, Node.js 버전이 낮더라도 패치가 적용되었을 수 있으므로 공급업체의 보안 공지 및 패키지 변경 이력을 함께 확인해야 합니다.
■ 보안 패치 적용 시 유의사항
본 취약점은 Node.js에 포함된 Brotli 디코더의 메모리 처리 결함으로 발생하며, 애플리케이션에 입력 검증을 추가하거나 일반적인 npm update만으로는 해결되지 않습니다.
따라서 사용 환경에 따라 다음과 같은 조치가 필요합니다.
– Node.js 공식 배포본을 사용하는 환경: 보안 패치가 적용된 Node.js 실행 바이너리로 업데이트
– Node.js를 소스코드에서 직접 빌드하는 환경: 수정 사항이 포함된 소스코드를 사용해 재빌드 및 배포
– 별도 Node.js 런타임을 포함하는 제품이나 실행 파일을 사용하는 경우: 해당 제품 공급업체의 보안 업데이트 확인 및 적용
또한 Brotli 버전 정보만으로는 패치 적용 여부를 정확하게 판단하기 어려우므로, Node.js 공식 보안 릴리스 정보 또는 공급업체의 패치 내역을 기준으로 확인해야 합니다.
오픈소스 분석 및 관리 도구인 Sparrow SCA는 즉각 업데이트가 권고된 Node2Shell(CVE-2026-111497) 취약점을 자동 탐지합니다.
스패로우는 이번 취약점으로 인한 귀사의 피해를 최소화하고 안정적 서비스 운영을 위해 적극 지원하겠습니다.
궁금하신 점은 언제든지 고객센터로 문의 주시기 바랍니다.
(문의) 기술/장애 02-6263-7411

