서론
전 세계 웹 서버의 30% 이상을 차지하는 NGINX에서 18년 묵은 치명적 취약점이 발견되었습니다. 이 취약점은 인증 없이 서버를 장악할 수 있는 원격 코드 실행(RCE) 취약점으로, 2026년 5월 13일 F5에서 공식 보안 어드바이저리를 발행했습니다.
CVE-2026-42945로 할당된 이 취약점은 2008년 버전 0.6.27부터 존재했으며, 1.30.0까지 모든 버전에 영향을 미칩니다. 이미 PoC(Proof of Concept)가 공개되어 실제 공격이 가능한 상태입니다.
본론
취약점 개요
CVE-2026-42945는 NGINX의 ngx_http_rewrite_module에서 발생하는 힙 버퍼 오버플로우 취약점입니다. CVSS 점수 9.2(Critical)로 분류되어 매우 위험합니다.
취약점 세부사항:
- 유형: 힙 버퍼 오버플로우
- 영향: 원격 코드 실행(RCE)
- 도입 버전: NGINX 0.6.27 (2008년)
- 취약 버전: 0.6.27 ~ 1.30.0
- CVSS 점수: 9.2 (Critical)
- 공격 조건: 인증 불필요, 네트워크 접근 가능
기술적 원인
이 취약점은 NGINX의 스크립트 엔진이 rewrite와 set 지시문을 처리할 때 발생합니다.
취약점 발생 조건:
1. rewrite 지시문이 물음표(?)를 포함할 때
2. set 지시문이 정규식 캡처 그룹($1, $2 등)을 참조할 때
3. 두 지시문이 함께 사용될 때
버그 발생 메커니즘:
NGINX의 스크립트 엔진은 두 패스 시스템을 사용합니다.
- 첫 번째 패스: 메모리 길이 계산
- 두 번째 패스: 데이터 복사
문제는 두 패스 사이의 상태 불일치에 있습니다. rewrite 지시문이 물음표를 포함하면 메인 엔진의 is_args = 1 플래그가 설정됩니다. 하지만 첫 번째 패스(길이 계산)에서는 초기화된 서브 엔진을 사용하므로 is_args = 0으로 처리됩니다.
결과적으로:
1. 길이 계산 패스: 이스케이프가 필요 없다고 판단 (is_args = 0)
2. 데이터 복사 패스: 이스케이프 수행 (is_args = 1)
이스케이프 함수는 이스케이프 가능한 각 바이트를 1바이트에서 3바이트로 확장합니다. 할당된 버퍼 크기보다 훨씬 많은 데이터가 써이게 되어 힙 버퍼 오버플로우가 발생합니다.
영향 범위
이 취약점은 다음 NGINX 제품에 영향을 미칩니다:
NGINX Open Source:
- 취약 버전: 0.6.27 ~ 1.30.0
- 패치 버전: 1.30.1+, 1.31.0+
NGINX Plus:
- 취약 버전: R32 ~ R36
- 패치 버전: R36 P1+, R37+
기타 F5 제품:
- NGINX Instance Manager: 2.16.0 ~ 2.21.1 → 2.21.2+
- F5 WAF for NGINX: 5.9.0 ~ 5.12.1 → 5.12.2+
- NGINX App Protect WAF: 4.9.0 ~ 4.16.0, 5.1.0 ~ 5.8.0 → 4.16.1+/5.8.1+
- NGINX Gateway Fabric: 1.3.0 ~ 1.6.2, 2.0.0 ~ 2.5.1 → 1.6.3+/2.5.2+
- NGINX Ingress Controller: 3.5.0 ~ 3.7.2, 4.0.0 ~ 4.0.1, 5.0.0 ~ 5.4.1 → 3.7.3+/4.0.2+/5.4.2+
공격 시나리오
공격자는 다음과 같은 방법으로 이 취약점을 악용할 수 있습니다:
- Heap Feng Shui 기법: 여러 연결을 통해 힙 레이아웃 조작
- POST Body Spraying: 가짜 cleanup 구조체를 힙에 분산
- 버퍼 오버플로우: 이스케이프 문자열(+, & 등)을 사용해 버퍼 오버플로우 유발
- 코드 실행: cleanup 함수 포인터 덮어쓰기로 system() 함수 호출
공격 조건:
- NGINX 설정에 rewrite + set 지시문 조합이 있어야 함
- 공격자가 네트워크 접근이 가능해야 함
- ASLR(Address Space Layout Randomization)가 우회되어야 함 (연구팀은 ASLR 비활성화 환경에서 성공)
취약성 확인 방법
설정 파일 검사:
# NGINX 설정에서 rewrite와 set 지시문 조합 확인
grep -A 5 "rewrite" /etc/nginx/nginx.conf
grep -A 5 "set " /etc/nginx/nginx.conf
# 문제가 될 수 있는 설정 예시
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1; # 취약: rewrite 후 set 사용
}
버전 확인:
nginx -v
# 버전이 1.30.0 이하인 경우 취약
대응 전략
즉시 대응 (24시간 이내)
-
NGINX 버전 확인
nginx -v -
패치 적용
- NGINX Open Source: 1.30.1 또는 1.31.0으로 업그레이드
- NGINX Plus: R36 P1 또는 R37로 업그레이드
-
기타 F5 제품: 해당 패치 버전으로 업그레이드
-
설정 파일 임시 수정 (패치 불가 시)
# 문제가 되는 설정에서 set 지시문 제거 또는 순서 변경 location ~ ^/api/(.*)$ { set $original_endpoint $1; # rewrite 전에 set rewrite ^/api/(.*)$ /internal?migrated=true; }
단기 대응 (72시간 이내)
- WAF/WAF 레이어 추가
- 패치 완료까지 NGINX 배포를 추가 방어락 뒤에 배치
-
의심스러운 URI 패턴 차단
-
네트워크 접근 제한
- 불필요한 외부 접속 차단
-
VPN/내부망에서만 접근 허용
-
로그 모니터링 강화
- 비정상적 요청 패턴 감지
- Worker 프로세스 충돌 모니터링
장기 대응 (1주 이내)
- 설정 파일 전면 검토
- 모든 rewrite + set 지시문 조합 확인
-
필요 없는 지시문 제거
-
보안 정책 업데이트
- 정기적 취약점 스캔 프로세스 구축
-
보안 패치 적용 정책 수립
-
인시던트 대응 계획 수립
- 침해 탐지 시 대응 절차 마련
- 백업/복구 절차 검증
검토 체크리스트
| 단계 | 항목 | 완료 여부 | 비고 |
|---|---|---|---|
| 즉시 대응 | NGINX 버전 확인 | ☐ | 버전 확인 완료 |
| 패치 적용 | ☐ | 1.30.1 또는 1.31.0으로 업그레이드 | |
| 설정 파일 임시 수정 | ☐ | rewrite + set 조합 제거 | |
| 단기 대응 | WAF 레이어 배치 | ☐ | 패치까지 보안 강화 |
| 네트워크 접근 제한 | ☐ | 불필요한 외부 접속 차단 | |
| 로그 모니터링 강화 | ☐ | 비정상 요청 패턴 감지 | |
| 장기 대응 | 설정 파일 전면 검토 | ☐ | 모든 지시문 조합 확인 |
| 보안 정책 업데이트 | ☐ | 정기적 스캔 프로세스 구축 | |
| 인시던트 대응 계획 수립 | ☐ | 침해 탐지 대응 절차 마련 |
결론
CVE-2026-42945는 18년 동안 존재한 NGINX의 치명적 취약점으로, 이미 PoC가 공개되어 실제 공격 위험이 높습니다. 특히 인증 없이 원격 코드 실행이 가능하므로 즉각적인 조치가 필요합니다.
핵심 권장사항:
1. 즉시 패치 적용: NGINX 1.30.1 또는 1.31.0으로 업그레이드
2. 설정 파일 검토: rewrite + set 지시문 조합 제거
3. 보안 레이어 강화: WAF/WAF 레이어 추가, 네트워크 접근 제한
4. 지속적 모니터링: 비정상 요청 패턴 감지, Worker 프로세스 충돌 모니터링
이 취약점은 API 게이트웨이 설정에서 자주 발생하는 패턴(rewrite 후 set 사용)을 악용하므로, NGINX를 사용하는 모든 조직은 즉시 버전을 확인하고 패치를 적용해야 합니다.
참고자료
-
F5 Security Advisory
https://my.f5.com/manage/s/article/K000160932 -
depthfirst Research Blog
https://depthfirst.com/research/nginx-rift-achieving-nginx-rce-via-an-18-year-old-vulnerability -
CyberSecurity News
https://cybersecuritynews.com/18-year-old-nginx-rce-vulnerability/ -
GitHub PoC Repository
https://github.com/cipherspy/CVE-2026-42945-POC -
NVD - CVE-2026-42945
https://nvd.nist.gov/vuln/detail/CVE-2026-42945
본 컨텐츠는 AI 기술로 생성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!