
本書では、Kubernetes の ingress-nginx コンポーネント(validating admission controller)に影響を及ぼす脆弱性 CVE-2025-1974 に関する調査を紹介します。
CVE-2025-1974 は CVSS 3.1 9.8 の重大な脆弱性であり、ingress-nginx プロセスのコンテキストでの未認証の Remote Code Execution (RCE) です。攻撃を実行すると、pod ネットワークへのアクセス(または AdmissionReview を validating webhook に届ける手段)を持つ攻撃者が、コントローラーの Pod 内で任意のコードを実行できる可能性があり、その結果、Secrets の漏えいやクラスターの乗っ取りにつながる可能性があります。
Ingress-nginx は Kubernetes で最も広く使用されている Ingress コントローラーの 1 つであり(数割のクラスターで使用されているとの推定もあります)、この脆弱性の実際の影響は非常に大きいものです。詳細、技術的分析、および公式の修正推奨事項は、Kubernetes、Wiz の研究者、および多数のベンダーブログによって公開されています。
CVE-2025-1974 を段階的に分析し、write-up に必要な資料を準備します。
本調査は教育および倫理的な目的のみで実施され、テスト/管理された環境を対象としています。
いかなる状況でも、所有者の書面による許可なしに、他人のクラスターや公開されたインスタンスに対してエクスプロイト/PoC を実行しないでください。完全に動作する「weaponized」PoC を公開すると、悪用のリスクが大幅に高まります。公開部分では、safe-PoC と方法論を示すのが適切です。(公式 advisories やベンダーも、エクスプロイトの拡散における注意を強調しています。)
cpe:2.3:a:kubernetes:ingress-nginx_controller:<version> — 影響を受ける ingress-nginx のバージョン(advisories に具体的なバージョンが記載されています。最終公開時に値を更新してください)。脆弱性が該当する設定条件:
概要。
この脆弱性は Ingress-NGINX コントローラーの Validating Admission Controller コンポーネントで発見され、このコンポーネントが受信した Ingress / AdmissionReview に基づいて NGINX の一時設定を生成・検証する方法に関連しています。処理の過程で、コントローラーは nginx.conf を生成し、設定検証(nginx -t)を実行します。Ingress/AdmissionReview フィールドのサニタイズが不十分な場合、攻撃者は特別に細工した断片を挿入でき、それが生成された設定に含まれて、結果としてコントローラープロセス内でのコマンド実行、すなわち ingress-nginx の Pod 内でのリモートコード実行(RCE)につながる可能性があります。
AdmissionReview/Ingress オブジェクトは、NGINX 設定の生成(アノテーションフィールド、backend 設定などを含む)の入力データになります。Ingress または直接の AdmissionReview により、設定のテンプレート/断片に攻撃者が制御する文字列を注入できます。このような nginx.conf を検証/ロードする際、検証プロセス(nginx -t)とその後の設定ファイル操作は、コントローラーのコンテキストでの任意のコード実行、ファイルの書き込み/実行、またはコマンド実行につながる可能性があります。AdmissionReview を届ける能力(pod ネットワークからのアクセスまたは直接のネットワークアクセス)、そして NetworkPolicy、RBAC 制限、追加の webhook 認証などの補完的対策がないことが必要です。一部のシナリオでは、Create/Update 権限を回避して、crafted な AdmissionReview を webhook に直接送信することが可能です。
悪用に成功すると、ingress-nginx コンテナー内でのコード実行が可能になり、通常は次のことが可能になります:
ingress-nginx-controller-admission および ingress-nginx-controller サービスへの非標準的な送信元(レポートでは alpine のようなコンテナー)からの着信接続が現れますが、通常の動作ではこれは発生しないはずです。nginx -t の呼び出しとコントローラーの突然の再起動、および ingress-nginx プロセスによる予期しないファイル書き込み操作を監視すると有効です。Ingress-NGINX は、Kubernetes で最も広く使用されている Ingress コントローラーの 1 つです(サービスへの外部アクセスを構成するために広く使用されています)。このコントローラーはリバースプロキシとして機能し、外部トラフィックを受け取り、Ingress ルールのセットに基づいて対応する Service/Pod にプロキシします。Ingress-NGINX プロジェクトは非常に人気があり、インターネットにアクセス可能なクラスターのかなりの割合で導入されています。
Ingress-NGINX は、Kubernetes ドキュメントで Ingress コントローラーのリファレンス実装として挙げられています。公開されているクラスターのかなりの割合がこれを使用していると推定されています。いくつかの調査では、公開されたクラスターの約 41% が Ingress-NGINX を使用していると示されています。この広範な普及とトラフィックルーティングにおける中心的な役割のため、このコンポーネントの脆弱性は実用的な影響が非常に大きくなります。
validate.nginx.ingress.kubernetes.io)へのアクセスには追加の認証を必要としないことがよくあります。これにより、クラスター内部から簡単にアクセスできます。Ingress / AdmissionReview が作成されます。nginx.conf を生成し、nginx -t / その他の検証操作を実行します。このような脆弱性は、他の欠陥と組み合わさると特に危険です。侵害された Pod(または公開アプリケーションの SSRF)+ 公開された validating webhook は、完全な侵害の可能性を高めます。したがって、インシデント分析では、ingress-nginx のバージョンだけでなく、依存関係のチェーンと潜在的なベクトルを考慮する必要があります。