NGINX, 2008년부터 존재한 치명적 취약점 발견!
NGINX의 ngx_http_rewrite_module에서 2008년부터 존재한 힙 버퍼 오버플로우(Heap Buffer Overflow) 취약점(CVE-2026-42945)이 발견됨
rewrite 및 set 지시어를 사용하는 서버에서 원격 코드 실행(RCE)이 가능하며, ASLR 우회 가능성도 제기됨
취약점은 depthfirst의 자동 분석 시스템에 의해 발견되었으며, 패치 적용 및 완화 방안이 제시됨
커뮤니티에서는 ASLR 우회 가능성에 대한 우려와 함께, 패치 적용의 중요성을 강조함
취약점 기술 분석
NGINX의 ngx_http_rewrite_module 내 스크립트 엔진의 두 단계 처리 방식(Two-Pass Process)에서 취약점이 발생한다. 특히, rewrite 지시어 내 ? 문자가 포함된 경우, 길이 계산 단계와 데이터 복사 단계의 is_args 플래그(is_args flag) 설정 차이로 인해 힙 버퍼 오버플로우가 발생한다. 공격자는 이를 통해 임의의 URI 데이터(URI Data)를 사용하여 힙 버퍼를 오버플로우시킬 수 있으며, cross-request heap feng shui 기법을 활용하여 ngx_pool_t의 cleanup pointer를 변조(Corruption)하여 RCE를 수행한다.
ASLR 우회 및 익스플로잇(Exploit) 가능성
일부 댓글에서는 ASLR(Address Space Layout Randomization) 우회 가능성에 대한 우려를 제기하며, ASLR이 완벽한 방어가 아님을 강조한다. ASLR은 방어 기법(Defense-in-Depth Technique)일 뿐이며, 숙련된 공격자는 ASLR 우회를 통해 익스플로잇을 수행할 수 있다. 특히, LLM(Large Language Model) 기반의 공격 도구 발전으로 인해 ASLR 우회 난이도가 낮아지고 있으며, 완전한 익스플로잇(Weaponized Exploit) 개발 가능성이 높아지고 있다.
영향을 받는 버전 및 패치 정보
취약점은 NGINX Open Source 0.6.27부터 1.30.0 버전까지, NGINX Plus R32부터 R36 버전까지 영향을 미친다. 패치는 NGINX Open Source 1.31.0 및 1.30.1 버전, NGINX Plus R36 P4, R35 P2, R32 P6 버전에 적용되었다. F5는 1.31.0 및 1.30.1 버전에 대한 패치를 제공하며, OpenResty는 1.27 및 1.29 버전에 대한 패치를 제공한다. 따라서, 취약한 NGINX 버전을 사용하는 경우 즉시 패치를 적용해야 한다.
대응 방안 및 완화 전략
취약점 완화를 위해 rewrite 정의에서 이름 없는 캡처 대신 이름 있는 캡처(Named Captures)를 사용하는 방법이 제시되었다. 예를 들어, $1 및 $2 대신 $user_id 및 $section과 같은 이름 있는 캡처를 사용한다. 또한, OpenResty와 같은 다른 웹 서버를 고려해 볼 수 있다. 하지만, 메모리 안전 언어(Memory-Safe Language)로 작성된 웹 서버도 취약점이 존재할 수 있으므로, 지속적인 보안 점검과 패치 적용이 필요하다.