V rozvíjajúcom sa projekte Kubernetes ingress-kontroléra ingress-nginx boli zistené štyri zraniteľnosti, ktoré umožňujú dosiahnuť vykonanie vlastného kódu na serveroch cloudových systémov používajúcich platformu Kubernetes a získať plný privilégiovaný prístup k klastru Kubernetes. Problémom bola priradená kritická úroveň nebezpečenstva (9.8 z 10). Výskumníci, ktorí zistili problémy, priradili zraniteľnostiam kódové meno IngressNightmare a uviedli, že zraniteľnosti sa dotýkajú približne 43% cloudových prostredí. Zraniteľnosti boli odstránené vo verziách ingress-nginx 1.11.5 a 1.12.1.
Ingress-kontrolér slúži ako brána a používa sa v Kubernetes na organizáciu prístupu z vonkajšej siete k službám v rámci klastru. Kontrolér ingress-nginx je najpopulárnejší a využíva server NGINX na spracovanie požiadaviek na klaster, smerovanie vonkajších požiadaviek a vyvažovanie záťaže. Projekt Kubernetes poskytuje základné ingress-kontroléry pre AWS, GCE a nginx, pričom posledný z nich nie je nijako spojený s kontrolérom kubernetes-ingress, ktorého správu vykonáva spoločnosť F5/NGINX (zvažované zraniteľnosti sa netýkajú projektov vyvíjaných vývojármi NGINX, zmienka nginx v názve ingress-nginx súvisí len so zapojením nginx ako proxy).
Zraniteľnosti umožňujú neoprávnenému útočníkovi dosiahnuť vykonanie vlastného kódu v kontexte kontroléra ingress-nginx, ak má možnosť odoslať požiadavku na web-spracovateľa Admission. Počas skenovania siete bolo identifikovaných viac ako 6500 zraniteľných klastrov Kubernetes používajúcich verejne zraniteľné kontroléry s otvoreným pre vonkajšie požiadavky spracovateľom Admission.
V predvolenej konfigurácii môže spustený útočnícky kód získať prístup k nastaveniam objektu Ingress, v ktorých sa okrem iného nachádzajú aj poverenia na prístup k serverom Kubernetes, čo umožňuje získať privilégiovaný prístup k celému klastru. Ako obchádzajúci prostriedok ochrany sa odporúča vypnúť v ingress-nginx funkciu 'Validating Admission Controller'.
Admission controller sa spúšťa v samostatnom pod- prostredí a vykonáva operáciu kontroly prichádzajúcich ingress objektov pred ich nasadením. Predvolený webový spracovateľ Admission akceptuje požiadavky bez autentifikácie z verejnej siete. Počas kontroly Admission controller vytvára konfiguráciu pre http server nginx na základe obsahu prijatého ingress objektu a kontroluje jej správnosť.
Zistené zraniteľnosti umožňujú podstrčenie vlastných nastavení do nginx prostredníctvom zaslania špeciálne naformátovaného ingress objektu priamo do Admission controller. Výskumníci zistili, že niektoré vlastnosti kontrolných požiadaviek, nastavené v poli „.request.object.annotations“, sa priamo podkladajú do konfigurácie nginx. Pri tom sa vygenerovaná konfigurácia neaplikuje, ale iba testuje spustením spustiteľného súboru „nginx“ s voľbou „-t“.
Konkrétne, podstrčenie vonkajších údajov do konfigurácie sa vykonáva pre parametre „mirror-target“, „mirror-host“ (CVE-2025-1098), „auth-tls-match-cn“ (CVE-2025-1097) a „auth-url“ (CVE-2025-24514). Napríklad, v konfigurácii riadku „set $target {{ $externalAuth.URL }};“ sa namiesto „{{ $externalAuth.URL }}“ podloží URL, uvedené v parametri „auth-url“. Pri tom sa správnosť URL nekontroluje. Týmto pádom útočník môže do URL poslať hodnotu vo forme „http://example.com/#; nastavenia“ a podstrčiť svoje nastavenia do konfiguračného súboru.
Na vykonanie ľubovoľného kódu počas kontroly konfigurácie príkazom „nginx -t“ sa výskumníci využili skutočnosti, že okrem kontroly syntaxe nginx načítava knižnice s modulmi a otvára súbory, ktoré sú uvedené v konfigurácii, na posúdenie ich dostupnosti. Medzi iným, pri spracovaní direktívy ssl_engine sa načíta zdieľaná knižnica uvedená v direktíve. SSL-motor.
Na načítanie svojej knižnice na server Kubernetes výskumníci využili (CVE-2025-1974) tú skutočnosť, že pri spracovaní veľkých požiadaviek nginx uchováva telo požiadavky do dočasného súboru, ktorý je okamžite odstránený, ale v súborovom systéme „/proc“ zostáva otvorený súborový descriptor pre tento súbor. Takto je možné súčasne odoslať požiadavky na uloženie dočasného súboru a iniciovanie kontroly konfigurácie, v ktorej je v direktíve „ssl_engine“ uvedená cesta k deskriptoru v súborovom systéme „/proc“.
Aby bol súborový deskriptor dlhodobo dostupný, je možné v požiadavke zadať hodnotu "Content-Length" prehnane veľkú, ako sú skutočne prenášané dáta (server bude čakať na prijatie zostávajúcich údajov). Dodatočnou komplikáciou je potreba uhádnuť PID procesu a číslo súborového deskriptora, ktorý súvisí so načítanou zdieľanou knižnicou, ale keďže v kontejnere sa zvyčajne používa minimálny počet spustených procesov, potrebné hodnoty sa odhadujú prostredníctvom niekoľkých pokusov. V prípade úspechu a načítania zadaného zdieľaného knižnice, útočník môže získať prístup k hodnotám uloženým vo vnútri prostredia pod, dostatočným na ovládanie celého klastera.
Na overenie použitia zraniteľného ingress-nginx môžete vykonať príkaz: kubectl get pods —all-namespaces —selector app.kubernetes.io/name=ingress-nginx
Zdroj: opennet.ru
