Ingress-nginx haavatavused, mis vÔimaldavad koodi tÀitmist ja Kubernetes klastrite juhtimist

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

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster