I det under utveckling projektet Kubernetes ingress-kontroller ingress-nginx har fyra sÄrbarheter upptÀckts, som gör det möjligt att köra sin egen kod pÄ servrar inom molnsystem som anvÀnder Kubernetes-plattformen och fÄ full privilegierad Ätkomst till Kubernetes-klustret. Problemen har tilldelats en kritisk risknivÄ (9,8 av 10). Forskarna som identifierade problemen gav sÄrbarheterna kodnamnet IngressNightmare och noterade att sÄrbarheterna pÄverkar cirka 43% av molnmiljöerna. SÄrbarheterna har ÄtgÀrdats i versionerna ingress-nginx 1.11.5 och 1.12.1.
Ingress-kontrollern fungerar som en gateway och anvÀnds i Kubernetes för att organisera Ätkomst frÄn det externa nÀtverket till tjÀnster inuti klustret. Kontrollen ingress-nginx Àr den mest populÀra och anvÀnder server NGINX för att vidarebefordra förfrÄgningar till klustret, dirigera externa förfrÄgningar och lastbalansera. Kubernetes-projektet tillhandahÄller grundlÀggande ingress-kontroller för AWS, GCE och nginx, dÀr den senare inte har nÄgot med kontrollern kubernetes-ingress att göra, vars underhÄll hanteras av företaget F5/NGINX (de aktuella sÄrbarheterna pÄverkar inte projekt som utvecklas av NGINX-utvecklarna, omnÀmnandet av nginx i namnet ingress-nginx Àr endast relaterat till anvÀndningen av nginx som proxy).
SÄrbarheterna gör det möjligt för en icke-autentiserad angripare att köra sin egen kod i kontexten av ingress-nginx-kontrollern, med möjlighet att skicka en förfrÄgan till Admission-webbhantverkaren. Under nÀtverksgenomsökningen har över 6500 sÄrbara Kubernetes-kluster upptÀckts som anvÀnder offentligt tillgÀngliga sÄrbara kontroller med en öppen förfrÄgan hanterare för Admission.
I standardkonfigurationen kan kod som körs av angriparen fÄ Ätkomst till instÀllningarna för ingress-objektet, dÀribland lagras Àven autentiseringsuppgifter för att nÄ Kubernetes-servrar, vilket möjliggör privilegierad Ätkomst till hela klustret. Som en sÀkerhetsÄtgÀrd rekommenderas det att stÀnga av funktionen 'Validating Admission Controller' i ingress-nginx.
Admission-kontrolleren startas i en separat pod-miljö och utför kontroll av inkommande ingress-objekt innan de distribueras. Som standard accepterar webbhÀndelsen Admission förfrÄgningar utan autentisering frÄn offentliga nÀtverk. Vid kontrollen skapar Admission-kontrolleren en konfiguration för http-servern nginx baserat pÄ innehÄllet i det mottagna ingress-objektet och kontrollerar dess korrekthet.
Identifierade sÄrbarheter gör det möjligt att fÄ in sina egna instÀllningar i nginx genom att skicka ett sÀrskilt utformat ingress-objekt direkt till Admission-kontrolleren. Forskare har upptÀckt att vissa egenskaper i kontrollförfrÄgningar som anges i fÀltet '.request.object.annotations' direkt sÀtts in i nginx-konfigurationen. Den genererade konfigurationen tillÀmpas inte, utan testas endast genom att köra körbar fil 'nginx' med alternativet '-t'.
Specifikt utförs insÀttning av externa data i konfigurationen för parametrarna 'mirror-target', 'mirror-host' (CVE-2025-1098), 'auth-tls-match-cn' (CVE-2025-1097) och 'auth-url' (CVE-2025-24514). Till exempel, i konfigurationsraden 'set $target {{ $externalAuth.URL }};' sÀtts istÀllet för '{{ $externalAuth.URL }}' in den URL som anges i parametern 'auth-url'. Korrektheten av URL:en kontrolleras inte. DÀrmed kan en angripare skicka ett vÀrde som 'http://example.com/#; instÀllningar' som URL och infoga sina egna instÀllningar i konfigurationsfilen.
För att köra godtycklig kod under kontrollen av konfigurationen med kommandot 'nginx -t' utnyttjade forskarna det faktum att utöver syntaxkontrollen laddar nginx bibliotek med moduler och öppnar filer som nÀmns i konfigurationen för att bedöma deras tillgÀnglighet. Bland annat laddas det delade bibliotek som anges i direktivet ssl_engine nÀr direktivet behandlas. SSL-motorn.
För att ladda sitt bibliotek pÄ Kubernetes-servern utnyttjade forskarna (CVE-2025-1974) det faktum att nginx vid behandling av stora förfrÄgningar sparar förfrÄgningskroppen i en temporÀr fil som omedelbart tas bort, men det finns en öppen filbeskrivare för denna fil i filsystemet '/proc'. SÄledes kan man samtidigt skicka förfrÄgningar för att spara den temporÀra filen och initiera konfigurationskontrollen dÀr sökvÀgen i direktivet 'ssl_engine' anger filbeskrivaren i filsystemet '/proc'.
För att en filbeskrivare ska vara tillgÀnglig under en lÀngre tid kan vÀrdet för "Content-Length" i begÀran anges till ett betydligt högre vÀrde Àn de faktiska överförda data (servern kommer att vÀnta pÄ mottagning av de ÄterstÄende data). En ytterligare svÄrighet Àr behovet av att gissa PID för processen och numret pÄ filbeskrivaren kopplad till det laddade delade biblioteket, men eftersom det i containern vanligtvis anvÀnds ett minimalt antal körande processer kan de nödvÀndiga vÀrdena gissas genom att göra flera försök. Vid framgÄng och inladdning av ett insatt delat bibliotek kan angriparen fÄ tillgÄng till de lagrade parametrarna inom pod-miljön, tillrÀckliga för att styra hela klustret.
För att kontrollera anvÀndningen av den sÄrbara ingress-nginx kan kommandot köras: kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx
KĂ€lla: opennet.ru
