Kubernetes ingress-kontrolleri ingress-nginx arendatavast projektist leiti neli haavatavust, mis vĂ”imaldavad kĂ€ivitada oma koodi pilvesĂŒsteemide serverites, mis kasutavad Kubernetes platvormi, saavutades tĂ€is privilegeeritud juurdepÀÀsu Kubernetes klastri. Probleemidele on mÀÀratud kriitiline oht (9.8 skaalal 10). Probleeme avastanud teadlased andsid haavatavustele koodnimeks IngressNightmare ja mĂ€rkisid, et haavatavused mĂ”jutavad umbes 43% pilveserveritest. Haavatavused on kĂ”rvaldatud ingress-nginx versionites 1.11.5 ja 1.12.1.
Ingress-kontroller toimib vÀravana ja kasutatakse Kuberneteses, et korraldada juurdepÀÀsu vÀlisest vÔrgust klastris olevatele teenustele. Kontroller ingress-nginx on kÔige populaarsem ja rakendab server NGINX vÀljasaatmise suunamiseks klastrisse, vÀliste pÀringute suunamiseks ja koormuse tasakaalustamiseks. Kubernetes pakub pÔhilisi ingress-kontrollereid AWS-i, GCE ja NGINX jaoks; viimane ei ole seotud kubernetes-ingress kontrolliga, mille hooldust teostab ettevÔte F5/NIGNX (arutluse all olevad haavatavused ei puuduta projekte, mida arendavad NGINX-i arendajad; NGINX-i mainimine ingress-nginx nime koosneb vaid NGINX-i kasutamisest maatriksina).
Haavatavused vĂ”imaldavad autentimata rĂŒndajal saavutada enda koodi tĂ€itmist ingress-nginx kontrolleri kontekstis, saates pĂ€ringut Admission web-teenusele. VĂ”rgu skaneerimise kĂ€igus tuvastati ĂŒle 6500 haavatava Kubernetes klastri, mis kasutavad avalikult haavatavaid kontrollerid koos Admission teenusega, mis on avatud vĂ€listest pĂ€ringutest.
Vaikimisi seadistuses vĂ”ib rĂŒndaja kĂ€ivitatud kood pÀÀseda juurde Ingress objekti seadetele, kus muuhulgas on ka Kubernetes serverite kĂ”nedie, vĂ”imaldades privileegide saamist kogu klastrile. Kaitseks soovitatakse keelata ingress-nginx funktsioon âValidating Admission Controllerâ.
Admission Controller kÀivitatakse eraldi pod-i keskkonnas ja kontrollib sisenevate ingress-objektide korrektset töötlemist enne nende juurutamist. Vaikimisi vÔtab Admission web-protsessor vastu autentimata pÀringud avalikest vÔrkudest. Kontroller loob auditi kÀigus nginx http-serveri seadistuse vastavalt saadud ingress-objekti sisule ja kontrollib selle Ôigsust.
Tuvastatud haavatavused vÔimaldavad sisestada oma seadeid nginx'i, saates spetsiaalselt vormistatud ingress-objekti otse Admission kontrollimiseks. Uurijad on avastanud, et mÔned kontrollpÀringute omadused, mis on mÀÀratud vÀljale ".request.object.annotations", sisestatakse otse nginx'i konfiguratsiooni. Samal ajal ei rakendata genereeritud konfiguratsiooni, vaid seda testitakse, kÀivitades tÀitmisfaili "nginx" valikuga "-t".
EelkĂ”ige toimub vĂ€liste andmete sisestamine konfiguratsiooni parameetrite "mirror-target", "mirror-host" (CVE-2025-1098), "auth-tls-match-cn" (CVE-2025-1097) ja "auth-url" (CVE-2025-24514) osas. NĂ€iteks konfiguratsioonireas "set $target {{ $externalAuth.URL }};" asendatakse "{{ $externalAuth.URL }}" URL-iga, mis on mÀÀratud parameetris "auth-url". URL-i Ă”igsust ei kontrollita. SeetĂ”ttu saab rĂŒndaja edastada URL-i vÀÀrtuse tĂŒĂŒpi "http://example.com/#;\nseaded" ja sisestada oma seaded konfiguratsioonifaili.
Koodide kĂ€itamiseks konfigureerimise kontrollimise kĂ€igus kĂ€suga «nginx -t» kasutasid uurijad seda, et peale sĂŒntaksi kontrollimist laadib nginx teegi mooduleid ja avab konfiguratsioonis mainitud faile, et hinnata nende kĂ€ttesaadavust. Lisaks toimub ssl_engine direktiivi töötlemisel mÀÀratud jagatud teegi laadimine SSL-mootorist.
Oma teegi laadimiseks Kubernetes serverisse kasutasid uurijad (CVE-2025-1974) seda, et suurte pĂ€ringute töötlemisel salvestab nginx pĂ€ringu sisu ajutisse failisse, mis eemaldatakse kohe, kuid failisĂŒsteemis «/proc» jÀÀb selle faili jaoks avatud failide descriptor. Seega on vĂ”imalik samal ajal saata pĂ€ringuid ajutise faili salvestamiseks ja kĂ€ivitada konfiguratsiooni kontroll, kus ssl_engine direktiivi all on mÀÀratud descriptori tee failisĂŒsteemis «/proc».
Et file descriptor jÀÀb kaua kĂ€ttesaadavaks, kui pĂ€ringus on 'Content-Length' vÀÀrtus mÀÀratud eesmĂ€rgiga, mis on oluliselt suurem kui tegelikult edastatud andmed (server ootab ĂŒlejÀÀnud andmete vastuvĂ”tmist). TĂ€iendavaks keerukuseks on vajadus aimata protsessi PID-d ja file deskriptorite numbrit, mis on seotud laaditud jagatud teegiga, kuid kuna konteineris kasutatakse tavaliselt minimaalset arvu töötavaid protsesse, siis sobivad vÀÀrtused ennustatakse mitme katse kaudu. Ănnestumise korral, kui laaditakse Ă”igesti jagatud teek, vĂ”ib rĂŒndaja saada juurdepÀÀsu pod-keskkonnas hoitavatele parameetritele, mis on piisavad kogu klastri haldamiseks.
Haavatava ingress-nginx kasutamise kontrollimiseks saab kĂ€ivitada kĂ€su: kubectl get pods âall-namespaces âselector app.kubernetes.io/name=ingress-nginx
Allikas: opennet.ru
