피드로 돌아가기
Hacker NewsSecurity
원문 읽기
NGINX Heap Buffer Overflow를 이용한 원격 코드 실행(RCE) 취약점 분석
New Nginx Exploit
AI 요약
Context
NGINX의 ngx_http_rewrite_module 내 두 단계 처리 프로세스 설계 결함으로 인한 취약점 발생. 버퍼 크기 계산 단계와 실제 데이터 복사 단계의 상태 불일치로 인해 Heap Buffer Overflow가 유발되는 구조임.
Technical Solution
- Length Pass와 Copy Pass 간의 is_args 플래그 상태 불일치를 통한 버퍼 오버플로우 유도
- Length Pass에서는 is_args=0 상태로 raw capture length를 반환하도록 설계된 로직 활용
- Copy Pass에서 is_args=1로 전환됨에 따라 ngx_escape_uri 함수가 바이트당 3배의 공간을 요구하며 버퍼 초과 발생
- Cross-request Heap Feng Shui 기법을 적용하여 인접한 ngx_pool_t의 cleanup pointer 오염
- POST body를 통한 데이터 spraying으로 Null byte 제약을 극복하고 가짜 ngx_pool_cleanup_s 구조체 배치
- Pool 파괴 시점에 system() 함수를 호출하도록 제어 흐름을 변경하여 RCE 달성
실천 포인트
1. 다단계 처리 프로세스(크기 계산 후 복사) 설계 시 각 단계의 상태 값이 동일하게 유지되는지 검증
2. 가변 길이 데이터를 처리하는 함수(예: URI Encoding) 호출 전 버퍼 크기 재검증 로직 적용
3. 메모리 풀 기반 할당 구조에서 인접 객체의 포인터 오염 가능성을 고려한 메모리 격리 검토