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(Address Space Layout Randomization) 우회 가능성에 대한 우려를 제기하며, ASLR이 완벽한 방어가 아님을 강조한다. ASLR은 방어 기법(Defense-in-Depth Technique)일 뿐이며, 숙련된 공격자는 ASLR 우회를 통해 익스플로잇을 수행할 수 있다. 특히, LLM(Large Language Model) 기반의 공격 도구 발전으로 인해 ASLR 우회 난이도가 낮아지고 있으며, 개발 가능성이 높아지고 있다.
취약점은 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)로 작성된 웹 서버도 취약점이 존재할 수 있으므로, 지속적인 보안 점검과 패치 적용이 필요하다.