Node.js 10월 보안 패치, npm 업데이트만으로는 부족하다
Node.js 보안 버전으로 올리고 터미널에서 node -v까지 확인했다. 그런데 어젯밤부터 떠 있던 웹 서비스는 지금 어느 버전으로 요청을 처리하고 있을까?

- Node.js는 10월 21일 22.23.4·24.22.1·26.12.1 보안 버전을 내놨다. 사용하는 계열에 맞춰 패치할 수 있다.
- Brotli 취약점은 공격자가 제공한 압축 데이터를 앱이
node:zlib로 해제할 때 문제가 된다. 공식 최고 심각도는 High다. npm audit결과와 Node.js 실행 파일의 버전은 별개다. 업데이트 뒤에는 서비스가 새 런타임으로 실행되는지 확인해야 한다.
22·24 사용자도 같은 계열에서 패치할 수 있다
이번 보안 수정을 받으려고 모든 앱을 Node.js 26으로 옮길 필요는 없다. 22.23.4와 24.22.1도 같은 날 보안 릴리스로 나왔다. 메이저 버전 전환과 현재 계열의 보안 패치를 나눠 진행할 수 있다는 뜻이다.
| 사용 중인 계열 | 10월 21일 수정 버전 | 해당 릴리스의 표기 |
|---|---|---|
| 22.x | 22.23.4 | LTS |
| 24.x | 24.22.1 | LTS |
| 26.x | 26.12.1 | Current |
표의 날짜와 상태는 각 릴리스 발표 기준이다. 26.12.1 변경 내역에는 Brotli뿐 아니라 DNS·TLS·HTTP·권한 검사 관련 수정도 들어 있다. 특정 압축 기능을 쓰지 않는다는 이유만으로 업데이트 전체가 불필요하다고 판단해서는 안 된다.
압축 파일을 푸는 동작이 공격 경로가 될 수 있다
공식 보안 공지의 CVE-2026-111497은 Node.js에 포함된 Brotli 디코더의 메모리 쓰기 오류다. 앱이 공격자가 공급한 Brotli 데이터를 node:zlib로 압축 해제하면 프로세스 충돌, 메모리 정보 노출, 원격 코드 실행으로 이어질 수 있다고 프로젝트는 설명한다.
실제 판단에는 외부에서 받은 압축 데이터가 해당 디코더에 들어가는 경로가 중요하다. 이번 릴리스의 공식 최고 심각도는 High이며, Brotli 항목은 22·24·26 계열 모두를 대상으로 한다.
npm audit 결과와 Node.js 실행 파일 버전을 따로 확인한다
npm 문서에서 audit은 프로젝트의 의존성 정보를 레지스트리에 보내 알려진 취약점을 조회하는 명령이다. audit fix의 수정 대상도 패키지 트리다. Node.js가 배포한 실행 파일 안의 수정이 현재 서비스에 적용됐는지는 별도로 확인해야 한다.
예를 들어 앱의 package-lock.json을 갱신해도 서비스가 계속 예전 Node.js 실행 파일로 시작된다면 런타임 변경은 끝나지 않은 상태다. 컨테이너를 쓴다면 앱 의존성과 함께 런타임이 들어 있는 이미지도 확인 대상이다. 패키지 검사 결과가 깨끗하다는 사실만으로 이 단계를 생략할 수 없다.
셸의 node와 서비스를 실행한 node를 구분한다
운영 확인에는 버전과 실행 파일 경로가 함께 필요하다. 다음 명령은 지금 호출한 Node.js의 두 값을 보여주는 예다.
node -p "process.version + ' | ' + process.execPath" process.version은 해당 프로세스의 Node.js 버전이고, process.execPath는 그 프로세스를 시작한 실행 파일의 절대 경로다. 새 터미널에서 이 명령을 실행한 결과만으로 이미 떠 있는 웹 서비스까지 바뀌었다고 판단할 수는 없다.
배포 담당자는 서비스의 시작 설정이나 컨테이너 이미지가 가리키는 런타임을 갱신하고, 정해진 배포 절차로 프로세스를 교체한 뒤 서비스 쪽의 버전·경로를 확인하는 순서로 점검할 수 있다. 요청 처리와 외부 연결이 정상인지 확인하는 작업도 뒤따른다.
자주 묻는 질문
Node.js 24를 쓰면 26으로 반드시 올려야 하는가?
이번 수정은 24.22.1에도 제공됐다. 26으로의 메이저 업그레이드를 기다리지 않고 24 계열 보안 릴리스를 적용할 수 있다.
npm audit에서 취약점이 0개면 조치가 끝났는가?
그 결과는 프로젝트 의존성 검사 결과다. 실제 서비스를 시작한 Node.js 런타임의 버전까지 별도로 확인해야 한다.
실제 서비스가 보안 수정이 적용된 Node.js로 실행되는지 확인해야 업데이트가 완료된다.