NGINX Rift: 18년 된 힙 오버플로 취약점 공개

전 세계에서 가장 널리 사용되는 웹 서버 중 하나에서 "NGINX Rift"("CVE-2026-42945")라는 중요한 보안 취약점이 발견되었습니다. 이 결함은 힙 오버플로이며, 0.6.27부터 1.30.0까지의 버전에 걸쳐 18년 동안 탐지되지 않았습니다.

이번 발견은 가장 성숙한 소프트웨어 프로젝트라도 지속적인 보안 감시가 중요함을 강조합니다. 매우 안정적인 코드베이스에서도, 특히 rewriteset 지시어와 관련된 레거시 코드 경로에서는 중요한 취약점이 거의 20년 동안 숨겨질 수 있습니다.

취약점의 기술적 특성

이 취약점은 힙 오버플로입니다. 기술적으로 힙 오버플로는 프로그램이 힙에 할당된 메모리 블록에 할당 용량보다 더 많은 데이터를 쓰게 되어 인접 메모리를 덮어쓸 수 있게 되는 상황을 말합니다.

DepthFirst의 발견 팀에 따르면, NGINX 설정에서 rewriteset 지시어를 특정 조합으로 사용할 때 이 취약점이 트리거됩니다. 모든 NGINX 설치가 영향을 받는 것은 아니지만, 1.30.0 버전까지 복잡한 라우팅이나 변수 할당에 이 지시어들을 사용하는 경우 위험에 처합니다.

악용 및 ASLR의 역할

이 취약점의 가장 중요한 측면 중 하나는 주소 공간 레이아웃 무작위화(ASLR)와 같은 최신 보안 완화 조치를 우회할 수 있다는 점입니다.

F5(NGINX 소유자)는 주로 ASLR이 비활성화된 시스템에서 코드 실행이 가능하다고 밝혔지만, 이 결함을 발견한 연구원들은 NGINX 아키텍처를 근거로 반론을 제시했습니다.

NGINX는 워커 프로세스가 단일 마스터 프로세스로부터 포크되는 다중 프로세스 아키텍처를 사용합니다. 이 설계 덕분에 메모리 공간이 각 워커마다 정확히 복제됩니다. 이는 서로 다른 워커 간에 결정론적인 힙 레이아웃을 생성합니다.

"우리의 익스플로잇이 실패해 워커가 충돌하더라도, 마스터 프로세스는 정확히 동일한 메모리 레이아웃을 가진 새 워커를 단순히 생성합니다. 이를 통해 워커가 충돌하고 메모리 레이아웃이 바뀌는 것을 걱정하지 않고 성공할 때까지 안전하게 여러 번 시도할 수 있습니다."

이 결정론적인 특성은 공격자가 포인터를 바이트 단위로 점진적으로 덮어써 ASLR 오프셋을 유출할 수 있게 하며, 이론적으로 ASLR이 활성화된 시스템에서도 취약점을 악용할 수 있게 합니다.

영향 및 완화 방안

CVE-2026-42945의 발견은 소프트웨어 프로젝트의 성숙도와 안정성이 보안의 보증이 아니라는 심각한 경고입니다.

완화 방법

0.6.27부터 1.30.0 사이의 NGINX 버전을 사용 중이라면 다음 조치를 취하는 것이 권장됩니다:

  1. NGINX 업데이트: 가장 기본적인 권고는 NGINX/F5에서 제공하는 최신 패치 버전으로 업데이트하는 것입니다.
  2. 구성 검토: 즉시 업데이트가 불가능한 경우, rewriteset 지시어 사용 여부를 구성 파일에서 검토하십시오. 이를 대체하거나 다른 라우팅 로직을 구현할 수 있다면 위험을 완화할 수 있습니다.

커뮤니티 구성원들이 지적했듯이, rewriteset을 사용하는 패턴은 NGINX를 통해 배포되는 고전적인 PHP 애플리케이션에서 흔히 나타나며, 이러한 레거시 배포가 특히 취약합니다.

Sources