Ingress-nginx CVE-2025-1974 について
本記事では、2025年3月24日に公式ブログで公開された脆弱性CVE-2025-1974について、備忘録的に一部のみ説明します。
1. 脆弱性の概要
Ingress Nginxのwebhookサーバでは、AdmissionConfigurationが設定されておらず、追加の認証機構も実装されていません。そのため、ネットワーク上でIngress Nginxと通信可能な任意のプロセスが、admission webhookと同一の形式のHTTPリクエストを送信することが可能です。これにより、攻撃者は内部で任意のコマンドを実行できる状態となっています。
2. 技術的背景
Ingress Nginxは、Kubernetes環境におけるIngress Controllerとして動作しており、内部ではadmission webhookを利用したリクエスト処理を行っています。しかし、webhookサーバ自体にAdmissionConfigurationが実装されていません。
-
AdmissionConfiguration未設定
webhookサーバに対する認証やアクセス制限が存在せず、且つNetworkPolicyも設定されていない環境の場合だとWebhook Serverに対するHTTPリクエストがそのまま処理される状態になっています。 -
内部でのコマンド実行処理
PR差分で確認できる通り、内部でコマンドを実行する際に、ユーザーから渡されたパラメータが検証なしに連結され、exec.Command
が呼び出されます。以下はそのコードの一部抜粋です。// ExecCommand instantiates an exec.Cmd object to call nginx program func (nc NginxCommand) ExecCommand(args ...string) *exec.Cmd { cmdArgs := []string{} cmdArgs = append(cmdArgs, "-c", cfgPath) cmdArgs = append(cmdArgs, args...) //nolint:gosec // Ignore G204 error return exec.Command(nc.Binary, cmdArgs...) }
これにより、悪意のあるHTTPリクエストを送信することで、コマンドライン引数に任意の値を注入し、リモートでコード実行が可能となる可能性があります。GitHub IssueコメントおよびPR差分にて詳細な議論が行われています。
3. まとめ
本脆弱性により、Ingress Nginxとネットワーク的に接続されている全てのプロセスがIngress Nginxに対して攻撃できる状態です。
Ingress Nginxの脆弱性CVE-2025-1974は、AdmissionConfigurationが設定されておらず、追加の認証機構も存在しないため、webhookがネットワーク上の全てのプロセスに対して開かれている状態且つリクエストの内容から任意のコマンドを実行できる状態等、複合的な要因が絡んでいます。運用環境におけるリスクを低減するため、速やかに案内に従い、対策を講じることが求められます。
参考情報
- Kubernetes公式ブログ: Ingress Nginx CVE-2025-1974 公開記事
- GitHub Issueコメント: 議論
- 対応PR差分: controller-v1.12.0...controller-v1.12.1