Node.js는 2026년 10월 21일 22.x, 24.x, 26.x용 보안 업데이트를 발표했다. 가장 심각한 취약점인 CVE-2026-111497은 공격자가 조작한 브로틀리(Brotli) 데이터를 디코딩할 때 메모리 정보가 노출되거나 임의 코드가 실행될 수 있는 문제다. 업데이트에는 심각도가 높은 TLS 호스트 이름 검증 우회 취약점 두 건을 포함해 다른 문제 아홉 건도 수정됐다.

Vercel은 같은 날 모든 Vercel 프로젝트에 적용되는 웹 애플리케이션 방화벽(WAF) 규칙을 배포해 외부에서 들어오는 공격 경로를 차단했다. 관리형 런타임에도 패치된 Node.js 버전을 적용하고 있으며, Vercel은 적용이 끝나는 대로 안내 페이지를 업데이트할 예정이라고 밝혔다.

Vercel 관리형 런타임 밖에서 Node.js를 실행한다면 WAF 보호 여부와 관계없이 지금 업그레이드해야 한다. 적용 대상에는 외부 백엔드, 자체 호스팅 Next.js, 직접 만드는 컨테이너 이미지, CI 실행기, 로컬 개발 환경이 포함된다. 패치 버전은 22.x가 22.23.4, 24.x가 24.22.1, 26.x가 26.12.1이다.

Vercel 프로젝트에서 Node.js 20.x를 쓰는 경우에는 Node.js 버전을 22.x 또는 24.x로 바꾸고 다시 배포해야 한다. Node.js 20은 지원이 종료돼 이번 수정 사항을 받지 않는다. 22.x 또는 24.x를 쓰는 프로젝트는 버전 설정을 바꿀 필요가 없으며, Vercel이 해당 런타임의 패치 버전을 관리한다. 버전 변경 방법은 Vercel 문서를 참고할 수 있다.

취약점은 Node.js에 포함된 브로틀리 디코더에 있다. Node.js가 브로틀리 데이터를 자동으로 디코딩하는 것은 아니며, 애플리케이션 코드나 사용 중인 라이브러리가 공격자가 제어하는 데이터를 압축 해제할 때 노출될 수 있다. 데이터는 요청 본문에 들어올 수도 있고 애플리케이션이 다른 서버에서 가져온 응답일 수도 있다. 런타임 패치는 가져온 응답을 처리하는 경우에도 보호한다.

조작된 브로틀리 입력은 디코딩 과정에서 범위를 벗어난 쓰기를 일으킨다. 연구자들은 패치되지 않은 22.x, 24.x, 26.x에서 프로세스 메모리 노출과 명령 실행을 시연했다. 코드 실행은 Node.js 프로세스에 부여된 권한으로 이뤄진다. 수정된 전체 문제 목록은 Node.js 보안 권고에서 확인할 수 있다.

Vercel WAF는 취약점 악용 시도를 탐지하고 차단하는 규칙을 모든 Vercel 프로젝트에 자동으로 적용한다. 별도 설정이나 비용은 필요 없으며, 차단된 요청은 프로젝트의 Firewall 대시보드에 표시된다. 다만 WAF는 Vercel 네트워크를 통과하는 트래픽만 보호하고, 함수가 다른 서버에서 가져오는 응답에는 적용되지 않는다. 따라서 노출을 줄이는 역할은 하지만 패치를 대신하지 않는다.

직접 관리하는 컨테이너와 실행 환경은 패치된 Node.js 기반 이미지로 다시 빌드하고 배포해야 한다. 자체 호스팅 Next.js도 Node.js를 업그레이드해야 한다. Next.js는 이미지 최적화 과정에서 브로틀리 응답을 차단하지 않는다. Vercel 뒤에 외부 Node.js 백엔드를 둔 경우에는 해당 서버의 Node.js를 업그레이드하고, 직접 접근을 제한해 트래픽이 Vercel을 통해서만 도달하도록 할 수 있다.

자세한 내용은 Node.js 2026년 10월 보안 릴리스와 Vercel Firewall 문서에서 확인할 수 있다.