- Brotli 디코더 결함으로 인증 없이 서비스 거부·메모리 노출·원격 코드 실행 위험…Node.js 22·24·26 보안 패치 권고

티오리가 Node.js 런타임에서 발견된 ‘Node2Shell(CVE-2026-111497)’ 취약점을 자체 재현·검증하고 기업과 기관을 위한 긴급 대응 가이드를 공개했다. Node.js에 탑재되거나 링크된 Brotli 디코더가 압축 데이터를 해제하는 과정에서 메모리 경계를 벗어나 데이터를 쓰는 취약점으로, 공격자는 인증 없이 조작한 Brotli 데이터를 전송해 서버를 중단시키거나 조건에 따라 메모리 노출과 원격 코드 실행을 시도할 수 있다. Node.js는 위험도를 ‘높음’으로 분류했다.
애플리케이션 코드와 무관하게 런타임에서 노출
Node2Shell은 개발자가 작성한 애플리케이션 코드에 문제가 없어도 취약한 Node.js 버전을 사용하면 영향을 받을 수 있다. 다만 실제 공격이 성립하려면 외부에서 들어온 Brotli 데이터가 취약한 디코더까지 전달되는 경로가 있어야 한다. Express 5 요청 본문 처리와 Node.js 전역 fetch() 메서드, axios를 비롯한 HTTP 클라이언트의 응답 압축 해제 과정 등이 대표적인 노출 경로로 확인됐다.
공격자는 이 경로에 악의적으로 조작한 Brotli 데이터를 넣는다. 디코더가 데이터를 풀면서 허용된 메모리 범위를 벗어나 데이터를 쓰면 Node 프로세스나 워커가 비정상 종료될 수 있고, CPU 고갈에 따른 서비스 거부로도 연결된다. 조건에 따라 메모리 노출과 원격 코드 실행까지 발생할 수 있다는 게 티오리의 분석이다.
Node.js 22·24·26 영향…보안 패치 적용 권고
영향을 받는 버전은 최신 보안 패치를 적용하지 않은 Node.js 22.x와 24.x, 26.x 계열이다. Node.js 보안팀은 지난 21일 취약점을 수정한 22.23.4, 24.22.1, 26.12.1 버전을 배포했다. 티오리는 해당 계열을 사용하는 기업과 기관에 최신 보안 버전 적용을 권고했다. Node.js 20.x 이하처럼 공식 지원이 종료된 버전은 상황이 다르다. 공식 보안 릴리스가 제공되지 않기 때문에 사용 중인 운영체제 배포판의 보안 업데이트를 확인하거나 지원 중인 Node.js 버전으로 이전해야 한다.
즉시 패치 어렵다면 임시 완화…URL 기반 무료 점검 제공
티오리는 운영 환경 때문에 Node.js를 바로 업데이트하기 어려운 기업을 위해 Nginx 등 리버스 프록시와 애플리케이션에서 적용하는 임시 완화 방안도 제시했다. 최근 PHP2Shell에 이어 Node2Shell까지 서버 런타임과 웹 개발 환경을 겨냥한 취약점이 잇따라 확인되면서, 운영 중인 서비스가 영향을 받는 버전과 노출 경로를 사용하는지 확인하는 작업도 필요해졌다. 티오리는 앞서 PHP2Shell 취약점 역시 자체 재현·검증하고 대응 방안을 공개한 바 있다.
별도 스크립트를 설치하지 않고 운영 중인 서비스 URL을 입력해 Node2Shell 노출 여부를 점검하는 온라인 진단 서비스도 제공한다. 세부 취약점 분석과 점검 가이드, 침해 여부 확인 방법은 티오리 AI 모의해킹 플랫폼 진트(Xint)의 기술 블로그에서 확인할 수 있다.
티오리 AI & Cyber Research팀 임준오 총괄은 “이번 Node2Shell 취약점은 개발자가 압축 기능을 직접 쓰지 않았더라도 웹 프레임워크가 응답을 처리하는 과정에서 자동으로 공격에 노출될 수 있어 사전 차단이 무엇보다 중요하다”며 “공격자가 노릴 수 있는 경로를 가장 빠르게 진단할 수 있도록 무상 점검 서비스를 열었으니, 임시 조치와 함께 최신 패치 적용을 서둘러달라”고 밝혔다.
#티오리 #Node2Shell #Nodejs #CVE2026111497 #Brotli #원격코드실행 #RCE #사이버보안 #보안취약점 #진트 #Xint