Arendatavas Kubernetes ingress-kontrolleri projektis ingress-nginx tuvastati neli haavatavust, mis vĂ”imaldavad saavutada oma koodi tĂ€itmist pilvesĂŒsteemide serverites, mis kasutavad Kubernetes platvormi, ning saada tĂ€ielik privileegide juurdepÀÀs Kubernetes klastrile. Probleemidele on antud kriitilise taseme oht (9.8 10-st). Probleemide avastanud uurijad nimetasid haavatavustega seotud koodinimeks IngressNightmare ja mĂ€rkisid, et haavatavused mĂ”jutavad umbes 43% pilveskeskkondadest. Haavatavused on kĂ”rvaldatud versioonides ingress-nginx 1.11.5 ja 1.12.1.
Ingress-kontroller toimib vĂ€ravana ja seda kasutatakse Kuberneteses, et korraldada juurdepÀÀsu vĂ€lisest vĂ”rgust klastris asuvatele teenustele. Ingress-nginx kontroller on kĂ”ige populaarsem ja rakendab server NGINX edastamiseks pĂ€ringutele klastrisse, vĂ€listest pĂ€ringutest marsruutimiseks ja koormuse tasandamiseks. Kubernetes projekt pakub pĂ”hilisi ingress-kontrollereid AWS, GCE ja nginx, kusjuures viimane ei ole ĂŒldse seotud kubernetes-ingress kontrolleriga, mille hooldust teostab F5/NGINX (tuletatud haavatavused ei mĂ”juta projekte, mida arendavad NGINX arendajad; nginx-i mainimine ingress-nginx nimekirjas on seotud ainult nginx-i kasutamisega proksi).
Haavatavused vĂ”imaldavad autentimata rĂŒndajal saavutada oma koodi tĂ€itmist ingress-nginx kontrolleri kontekstis, saades vĂ”imaluse saata pĂ€ring Admission web-teenusele. VĂ”rgu skaneerimise kĂ€igus tuvastati ĂŒle 6500 haavatava Kubernetes klastrite, mis kasutavad avalikke haavatavaid kontrollereid avatud Admission kĂ€sitsemiseks.
Vaikimisi konfiguratsioonis vĂ”ib rĂŒndaja kood saada juurdepÀÀsu Ingress objekti seadistustele, kus sĂ€ilitatakse muu hulgas ka tunnused Kubernetes serveritele pÀÀsemiseks, mis vĂ”imaldab saavutada privileegitud juurdepÀÀsu kogu klastrile. Kaitse möödaviimiseks soovitatakse keelata ingress-nginx-is "Validating Admission Controller" funktsioon.
Admission kontroller kÀivitub eraldi pod-ökonoomikas ja kontrollib sissetulevate ingress-objektide valideerimist enne nende juurutamist. Vaikimisi vÔtab Admission web-teenus vastu autentimata pÀringud avalikest vÔrkudest. Kontrollimise kÀigus loob Admission kontroller nginx http-serveri konfiguratsiooni lÀhtudes saadud ingress-objekti sisust ja kontrollib selle korrektset.
Tuvastatud haavatavused vĂ”imaldavad Nginx-i seadistuste sisestamist, saates spetsiaalselt vormistatud ingress-objekti otse Admissioni kontrollerile. Uurijad on avastanud, et mĂ”ned kontrollpĂ€ringute omadused, mis on mÀÀratud vĂ€lja â.request.object.annotationsâ, sisestatakse otse Nginx-i konfiguratsiooni. Generaatoriga loodud konfiguratsioon ei rakendata, vaid testitakse kĂ€ivitades tĂ€itmisfaili ânginxâ valikuga â-tâ.
EelkĂ”ige toimub vĂ€listest andmetest konfiguratsiooni sisestamine parameetritele âmirror-targetâ, âmirror-hostâ (CVE-2025-1098), âauth-tls-match-cnâ (CVE-2025-1097) ja âauth-urlâ (CVE-2025-24514). NĂ€iteks konfiguratsioonireas âset $target {{ $externalAuth.URL }};â sisestatakse â{{ $externalAuth.URL }}â asemele URL, mis on mÀÀratud parameetris âauth-urlâ. Samuti ei kontrollita URL-i Ă”igust. SeetĂ”ttu vĂ”ib rĂŒndaja edastada URL-i vÀÀrtusena nĂ€iteks âhttp://example.com/#; seadedâ ja sisestada oma seaded konfiguratsioonifaili.
Juhul, kui on vaja tĂ€iendavat koodi Nginx-i konfiguratsiooni kontrollimise kĂ€igus kĂ€suga ânginx -tâ, kasutasid uurijad seda, et lisaks sĂŒntaksikontrollile laadib Nginx spetsiifilisi teeke moodulitelt ning avab konfiguratsioonis nimetatud faile, et hinnata nende kĂ€ttesaadavust. Muuhulgas, ssl_engine direktiivi töötlemisel laaditakse direktiivis osutatud jagatud teek. SSL-mootori.
Kuna uurijad kasutasid oma teegi ĂŒleslaadimiseks Kubernetes'i serverisse (CVE-2025-1974) seda, et Nginx salvestab suuri pĂ€ringuid töötlemisel pĂ€ringu sisu ajutisse faili, mis kustutatakse kohe, kuid failisĂŒsteemis â/procâ jÀÀb selle faili jaoks avatud failideskriptor. Seega on vĂ”imalik samal ajal saata pĂ€ringuid ajutise faili salvestamiseks ja konfiguratsiooni kontrollimise algatamiseks, mille direktiivis âssl_engineâ on mÀÀratud teed failideskriptorile failisĂŒsteemis â/procâ.
Kuna failikirjeldaja oleks pikemat aega kergesti kĂ€ttesaadav, saab pĂ€ringus mĂ€rkida «Content-Length» vÀÀrtuseks teadlikult suurema arvu kui tegelikult edastatud andmed (server ootab ĂŒlejÀÀnud andmete saabumist). TĂ€iendavaks keerukuseks on vajadus arvata vĂ€lja protsessi PID ja failikirjeldaja number, mis on seotud laetud jagatud teegiga, kuid kuna konteineris kasutakse tavaliselt minimaalset arvu kĂ€ivitatud protsesse, siis vajalikud vÀÀrtused arvutatakse mĂ”ne katse abil. Edu korral ja laetud asendatud jagatud teegi puhul vĂ”ib rĂŒndaja pÀÀseda ligi pod-keskkonnas salvestatud parameetritele, mis on piisavad kogu klastriga juhtimiseks.
VĂ”rreldes haavatava ingress-nginx-i kasutamise kontrollimiseks saab kĂ€ivitada kĂ€su: kubectl get pods âall-namespaces âselector app.kubernetes.io/name=ingress-nginx
Allikas: opennet.ru
