Node2Shell 대응, Node.js 업데이트 순서

핵심 요약
  • 2026년 10월 21일 Node.js 보안 릴리스는 10건을 수정했고, 그중 Brotli 압축 해제 메모리 오류(CVE-2026-111497)는 원격 코드 실행으로 이어질 수 있습니다.
  • 수정 버전은 22.23.4, 24.22.1, 26.12.1이며 25·23·20·18 같은 지원 종료 버전에는 수정이 나오지 않습니다.
  • 설치만으로 끝나지 않습니다. 실행 중인 앱을 재시작하고, Docker 이미지와 Node.js를 포함한 번들 앱은 다시 빌드해야 합니다.

2026년 10월 21일 Node.js 팀이 22.x·24.x·26.x를 대상으로 보안 릴리스를 냈습니다. 수정된 취약점은 10건이고, 가장 주목받는 것은 Node.js에 들어 있는 Brotli 압축 해제 기능의 메모리 오류(CVE-2026-111497)입니다. 보안 업체 임퍼바(Imperva) 연구팀이 이 취약점으로 원격 코드 실행을 시연했고, 국내외 보도에서는 이를 “Node2Shell”이라고 부르고 있습니다.

이 글은 Node.js로 웹 서비스·API 서버·Next.js 사이트를 운영하는 분이 무엇을 확인하고 어떤 순서로 조치하면 되는지 정리합니다. 기술 정보는 2026년 10월 24일에 Node.js 보안 공지와 릴리스 일정 페이지로 확인했습니다.

무엇이 문제인가

공지에 따르면 Node.js에 함께 들어 있는 Brotli 디코더가 잘못 만들어진 압축 데이터를 받으면 할당된 메모리 범위 밖에 값을 쓸 수 있습니다. 그 결과 프로세스가 죽거나, 메모리 내용이 노출되거나, 최악의 경우 공격자가 보낸 코드가 서버에서 실행될 수 있습니다.

같은 릴리스에서 함께 수정된 High 등급 취약점은 다음과 같습니다.

CVE등급내용
CVE-2026-111497HighBrotli 디코더 범위 밖 쓰기, 원격 코드 실행 가능
CVE-2026-105482HighDNS 조회 시 NUL 문자에서 이름이 잘려 다른 이름의 결과를 받을 수 있음
CVE-2026-105483High전각 숫자로 쓴 IP 주소를 인증서 검사에서 인식하지 못함
CVE-2026-106069High0으로 시작하는 IPv4 표기(예: 0127.0.0.1)로 인증서 검증이 엇갈림

나머지 6건은 Medium·Low 등급으로 keep-alive 응답 처리, 스냅샷의 난수 재사용, 권한 모델(Permission Model) 경로 검사 등이 포함됩니다.

내 서비스가 영향을 받는지

Brotli를 코드에서 직접 부르지 않아도 안심할 수 없습니다. 보도에 따르면 다음과 같은 경로로도 악성 압축 데이터가 디코더에 닿을 수 있습니다.

  • 들어오는 요청의 압축을 자동으로 푸는 웹 프레임워크(예: Express 5)
  • 외부 API·웹훅·URL에서 데이터를 받아 오는 서버(fetch, axios 등이 압축 응답을 처리)
  • Next.js처럼 Node.js 위에서 동작하는 서버

그래서 “Brotli를 쓰는지”를 찾기보다 지금 실행 중인 Node.js 버전이 수정 버전인지를 확인하는 것이 가장 빠르고 확실합니다.

node -v 결과를 붙여 넣으면 보안 업데이트가 필요한 버전인지 바로 알려 줍니다.

Node.js 버전 점검하기

수정 버전과 지원 종료 버전

주 버전상태(2026-10-24)보안 수정 버전
26.xCurrent26.12.1 이상
24.xLTS24.22.1 이상
22.xLTS22.23.4 이상
25·23·21·20·18 이하지원 종료수정 없음

Node.js 공지는 보안 릴리스가 나올 때마다 지원 종료 버전도 영향을 받는다고 안내합니다. 20.x 이하나 홀수 버전(25, 23)을 쓰고 있다면 같은 줄기 안에서 고칠 방법이 없으므로 LTS인 24 또는 22로 옮겨야 합니다. 운영 서버에는 Current(26)보다 LTS 사용이 일반적입니다.

버전 확인하기

서버 한 대에도 Node.js가 여러 개 있을 수 있습니다. 호스트에 설치된 것, nvm으로 설치한 것, Docker 이미지 안에 들어 있는 것이 모두 다를 수 있으니 실제로 앱을 실행하는 쪽을 확인하세요.

# 서버에 설치된 Node.js
node -v

# 실행 중인 Docker 컨테이너 안의 Node.js
docker ps --format '{{.Names}}'
docker exec <컨테이너이름> node -v

# nvm으로 설치한 버전 목록
nvm ls

확인한 결과를 Node.js 버전 점검 도구에 한꺼번에 붙여 넣으면 버전마다 업데이트 필요 여부를 바로 판정해 줍니다. 판정은 브라우저 안에서만 이루어집니다.

업데이트 순서

  1. 백업과 테스트 환경 준비: 같은 주 버전 안의 업데이트(예: 24.22.0 → 24.22.1)는 보안 수정 위주라 영향이 작지만, 주 버전을 바꾸는 경우(20 → 22)는 테스트 환경에서 먼저 확인합니다.
  2. Node.js 설치: 설치한 방식에 맞게 올립니다. nvm을 쓴다면 nvm install 24.22.1 후 기본 버전을 바꾸고, 공식 설치 파일이나 배포판 패키지로 설치했다면 같은 경로로 수정 버전을 받습니다. 배포판 기본 저장소는 새 버전 반영이 늦을 수 있으니 설치 후 node -v로 꼭 확인하세요.
  3. 앱 재시작: 이미 실행 중인 프로세스는 이전 실행 파일을 계속 씁니다. pm2·systemd·docker compose 등으로 앱을 재시작해야 수정이 적용됩니다.
  4. 컨테이너 다시 빌드: Docker 이미지는 만들 때의 Node.js를 그대로 담고 있습니다. 기반 이미지를 최신으로 받아 다시 빌드하고 배포합니다.
# 기반 이미지를 새로 받아 다시 빌드
docker build --pull -t <이미지이름> .
  1. 번들 앱 확인: Node.js를 실행 파일 안에 함께 묶어 배포하는 앱(단일 실행 파일, 데스크톱 앱 등)은 수정 버전으로 다시 빌드해야 합니다.

업데이트 후 확인과 임시 대응

업데이트가 끝나면 운영 중인 프로세스에서 실제 버전을 다시 확인합니다. 앱 코드에서 process.version을 로그로 남기거나, 각 컨테이너에서 node -v를 다시 실행하면 됩니다.

보도에서는 압축 해제 오류가 갑자기 늘거나, Node.js 프로세스가 비정상 종료되거나 반복 재시작되는 경우를 주의 깊게 보라고 권합니다. 이런 흔적이 업데이트 전부터 있었다면 서버 접근 로그 확인으로 의심스러운 요청을 찾아보고, 침해가 의심되면 악성코드 감염 의심 시 대처 순서를 따르세요.

당장 업데이트할 수 없다면 외부에서 들어오는 Brotli 압축 요청을 프록시에서 임시로 막는 방법이 거론되지만, 응답 처리 경로까지 막지는 못하므로 근본 해결책은 아닙니다. 수정 버전으로 올리는 일정을 최대한 앞당기는 것이 우선입니다.

Node.js 버전 점검node -v 결과로 보안 업데이트 필요 여부와 지원 종료 판정을 무료로 확인할 수 있습니다.

Node.js 버전 점검하기

자주 묻는 질문

Brotli를 직접 쓰지 않는데도 업데이트해야 하나요?

보도에 따르면 Express 5처럼 들어오는 압축 요청을 자동으로 푸는 프레임워크나, fetch·axios처럼 외부 서버의 압축 응답을 처리하는 라이브러리를 통해서도 취약한 디코더에 데이터가 닿을 수 있습니다. 코드에서 Brotli 사용 여부를 일일이 찾기보다 수정 버전으로 올리는 것이 확실합니다.

실제 공격이 일어났나요?

2026년 10월 24일 확인한 보도 기준으로는 연구진의 시연만 공개됐고 실제 악용 사례는 보고되지 않았습니다. 다만 시연 결과가 공개된 뒤에는 공격 시도가 빠르게 늘어나는 경우가 많으므로 미루지 않는 편이 좋습니다.

Node.js 20을 쓰고 있는데 22로 바로 올려도 되나요?

주 버전이 바뀌면 일부 API 동작이나 네이티브 모듈 호환성이 달라질 수 있습니다. 테스트 환경에서 의존성을 다시 설치하고 테스트를 돌린 뒤 운영에 반영하세요. 20은 지원이 끝나 이번 수정이 나오지 않으므로 이전 자체는 필요합니다.

업데이트 후 무엇을 확인해야 하나요?

운영 중인 프로세스에서 process.version을 출력하거나 각 컨테이너에서 node -v를 다시 실행해 수정 버전인지 확인합니다. 압축 해제 오류, 비정상 종료, 반복 재시작이 있었는지 로그도 함께 살펴보세요.

확인한 자료

기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.

Next
서버 보안

리눅스 서버 보안 점검 체크리스트, 7단계 순서대로 확인

리눅스 서버 보안을 업데이트, 계정, SSH, 방화벽, 서비스, 로그, 백업 7단계로 나눠 점검하는 체크리스트입니다. 확인 명령과 개별 설정 글 링크를 함께 담았습니다.

가이드 보기 →
서버 보안

서버 접근 로그 확인, Apache Nginx 집계 명령

Apache·Nginx 접근 로그 형식과 위치, 요청 많은 IP 집계, 404와 관리자 경로 시도 찾기, 로그 회전까지 초보 서버 관리자를 위한 점검 명령을 정리했습니다.

가이드 보기 →
웹사이트 보안

웹사이트 악성코드 감염 대처, 초기 대응과 증거 보존

웹사이트 악성코드 감염이 의심될 때 먼저 할 일을 순서대로 정리했습니다. 격리, 증거 보존, 비밀번호 교체, 정리와 재발 방지, Search Console 검토 요청까지 다룹니다.

가이드 보기 →
서버 보안

서버 방화벽 설정 ufw, 잠김 방지 순서와 보안그룹 관계

ufw로 서버 방화벽을 켜기 전에 SSH 허용부터 하는 순서, 규칙 확인과 삭제 명령, AWS 보안그룹과 서버 방화벽이 함께 동작하는 방식을 정리했습니다.

가이드 보기 →
서버 보안

서버 백업 방법, 3-2-1 원칙과 파일 DB 자동 백업

서버 백업에서 3-2-1 원칙의 뜻, rsync로 파일 복사, mysqldump로 DB 덤프, cron 자동화와 복구 테스트 순서까지 소규모 홈페이지 관리자 기준으로 정리했습니다.

가이드 보기 →