
Analyse technique approfondie de CVE-2025-1974 (IngressNightmare), une RCE critique dans le contrôleur d'admission de validation ingress-nginx pour Kubernetes, incluant la cause racine, la chaîne d'exploitation et les conseils de détection.
Ce document présente une recherche sur la vulnérabilité CVE-2025-1974 affectant le composant ingress-nginx (validating admission controller) pour Kubernetes.
CVE-2025-1974 est une vulnérabilité critique (CVSS 3.1 9.8) constituant une Remote Code Execution (RCE) non authentifiée dans le contexte du processus ingress-nginx. Lors de l'exécution de l'attaque, un attaquant disposant d'un accès au réseau des pods (ou d'un moyen de délivrer un AdmissionReview au validating webhook) peut parvenir à exécuter du code arbitraire dans le pod du contrôleur, ce qui mène potentiellement à la divulgation de Secrets et à la prise de contrôle du cluster.
Ingress-nginx est l'un des contrôleurs Ingress les plus répandus dans Kubernetes (les estimations indiquaient une utilisation dans des dizaines de pour cent des clusters), donc l'impact pratique de la vulnérabilité est très élevé. La description, l'analyse technique et les recommandations officielles de correctifs ont été publiées par Kubernetes, les chercheurs de Wiz et plusieurs blogs de fournisseurs.
Analyser pas à pas CVE-2025-1974 et préparer les éléments nécessaires au write-up :
Cette recherche est menée exclusivement à des fins éducatives et éthiques et s'adresse à des environnements de test/contrôlés.
En aucun cas ne lancez d'exploits/PoC contre des clusters tiers ou des instances publiquement accessibles sans l'autorisation écrite du propriétaire. La publication ouverte d'un PoC entièrement opérationnel « weaponized » augmente fortement le risque d'abus — il est préférable de fournir dans la partie publique un safe-PoC et une méthodologie. (Les advisories officiels et les fournisseurs soulignent également la prudence lors de la diffusion d'exploits).
cpe:2.3:a:kubernetes:ingress-nginx_controller:<version> — versions vulnérables d'ingress-nginx (les advisories indiquent des versions spécifiques ; mettez à jour les valeurs lors de la publication finale).Conditions de configuration pour lesquelles la vulnérabilité est pertinente :
Résumé succinct.
La vulnérabilité a été découverte dans le composant Validating Admission Controller du contrôleur Ingress-NGINX et est liée à la manière dont ce composant génère et vérifie la configuration temporaire de NGINX à partir des Ingress / AdmissionReview entrants. Lors du traitement, le contrôleur génère nginx.conf et lance la vérification de la configuration (nginx -t). En raison d'une sanitisation insuffisante des champs Ingress/AdmissionReview, un attaquant peut injecter des fragments spécialement préparés qui se retrouvent dans la configuration générée et entraînent l'exécution de commandes dans le processus du contrôleur — c'est-à-dire une exécution de code à distance (RCE) dans le pod ingress-nginx.
AdmissionReview/Ingress entrants, acceptés par le validating webhook du contrôleur, deviennent les données sources pour la génération de la configuration NGINX (y compris les champs d'annotations, les paramètres backend, etc.).Ingress malveillant ou un AdmissionReview direct peut injecter des chaînes contrôlées dans les modèles/fragments de configuration. Lors de la vérification/du chargement de ce nginx.conf, le processus de vérification (nginx -t) et les opérations ultérieures sur le fichier de configuration peuvent conduire à l'exécution de code arbitraire, à l'écriture/exécution de fichiers ou au lancement de commandes dans le contexte du contrôleur.AdmissionReview au validating webhook (accès depuis le réseau des pods ou accès réseau direct) ; l'absence de mesures compensatoires — NetworkPolicy, restrictions RBAC ou authentification supplémentaire du webhook. Dans certains scénarios, le contournement des droits Create/Update est possible en envoyant un AdmissionReview forgé directement au webhook.
Une exploitation réussie permet l'exécution de code dans le conteneur ingress-nginx, ce qui permet généralement :