Mesterséges intelligencia által vezérelt kibertámadások: Hogyan lehet felismerni, megelőzni és megvédeni az intelligens fenyegetéseket?

Olvassa el most
A helyszíni fordításokhoz mesterséges intelligenciát használunk, és bár törekszünk a pontosságra, nem biztos, hogy mindig 100%-os pontosságúak. Megértését nagyra értékeljük.

IngressNightmare: CVE-2025-1974 Távoli kódvégrehajtás sebezhetőség és javítás

a OPSWAT
Ossza meg ezt a bejegyzést

2025 májusában nyilvánosságra hoztak egy kritikus biztonsági sebezhetőséget, a CVE-2025-1974-et, az IngressNightmare-t, amely a Kubernetes ingress-nginx vezérlőt érinti, és széles körben elterjedt a felhőalapú infrastruktúrákban. Ez a sebezhetőség lehetővé teszi a nem hitelesített támadók számára, hogy tetszőleges konfigurációkat injektáljanak az NGINX-be, ami potenciálisan jogosulatlan RCE (távoli kódfuttatás) és teljes klaszter kompromittálódásához vezethet.

Az OPSWAT ösztöndíjprogram részeként ösztöndíjasaink mélyreható technikai elemzést végeztek, hogy jobban megértsék a probléma kiváltó okát, kiaknázási útvonalát és az ezt a nagy horderejű problémát övező enyhítési stratégiákat.

A CVE-2025-1974 áttekintése 

A CVE-2025-1974 egy kritikus template injection sebezhetőség, amelyet az ingress-nginx 1.11.4 és különösen az 1.12.0 verzióig terjedő verzióiban azonosítottak. A Kubernetes fürthöz csomóponti szintű hozzáféréssel rendelkező támadók kihasználhatják ezt a hibát tetszőleges kód futtatására RCE segítségével az ingress-nginx vezérlőn keresztül, amely alapértelmezés szerint széleskörű jogosultságokkal rendelkezik, beleértve a hozzáférést a fürtön belüli kritikus titkokhoz.

A Kubernetes Security Response Committee 9,8-as CVSS v3.1 pontszámot (kritikus súlyosságú) adott ennek a sebezhetőségnek:

CVSS metrikák felhasználói felülete a CVE-2025-1974 számára, amely megmutatja az IngressNightmare kihasználhatóságát és hatáslehetőségeit.

Az elemzés fő összetevői

Kubernetes áttekintés

A Kubernetes (K8s) egy nyílt forráskódú platform a konténeres alkalmazások telepítésének, skálázásának és üzemeltetési menedzsmentjének automatizálására. A Kubernetes fürtök jellemzően több gépből állnak, amelyek fizikai hardvert és virtuális gépeket is tartalmazhatnak, és amelyek együttesen működnek, hogy nagy rendelkezésre állású, skálázható és kezelhető alkalmazási környezeteket biztosítsanak.

NGINX Ingress vezérlő

Az NGINX ingress controller (ingress-nginx) egy nyílt forráskódú ingress controller, amely az NGINX webszerverre épül. Egy Kubernetes fürtön belül működik, és elsősorban fordított proxyként és terheléselosztóként funkcionál. Ez a vezérlő értelmezi a felhasználók által meghatározott Ingress-erőforrásokat, és lefordítja azokat a fürtbe és a fürtön belüli forgalomáramlás irányítására szolgáló, használható NGINX-konfigurációkra.

AdmissionReview és szerepe

Az Ingress-nginx az AdmissionReview nevű webhook szolgáltatás segítségével integrálódik a Kubernetesbe. Ez a szolgáltatás kulcsfontosságú a natív Kubernetes Ingress objektumok feldolgozásához és azok validált és szintaktikailag helyes NGINX-konfigurációkba történő lefordításához. Bár az AdmissionReview biztosítja a konfiguráció pontosságát, az ingress-nginx vezérlőtől függetlenül működik, és általában nem rendelkezik szigorú hitelesítési ellenőrzésekkel. A szigorú hitelesítés hiánya az egyik kulcsfontosságú tényező, amely hozzájárult a CVE-2025-1974 kihasználhatóságához.

CVE-2025-1974 (IngressNightmare) diagram, amely az AdmissionReview-t mutatja a Kubernetes Ingress NGINX vezérlő munkafolyamatában

Sebezhetőségek kihasználása és technikai elemzés

Kihasználási mechanizmus

A CVE-2025-1974 kihasználása alapvetően egy rosszindulatú kéréssel kezdődik. A támadók rosszindulatú kérést intéznek az AdmissionReview webhookhoz, és arra kényszerítik az NGINX-et, hogy dinamikusan töltsön be egy megosztott könyvtárat futásidőben. E mechanizmus alapján munkatársaink elemezték mind az AdmissionReview webhookot, mind az NGINX munkafolyamatát, hogy megértsék ezt a kihasználási utat.

CVE-2025-1974 (IngressNightmare) diagram, amely a Kubernetes kihasználásának útját mutatja rosszindulatú ingress objektumon és NGINX-en keresztül.

Sablon befecskendezés sebezhetőség

Az AdmissionReview webhookon a bejövő kérések feldolgozása során a CheckIngress funkció a Kubernetes Ingress objektumokat érvényes NGINX konfigurációs fájlokká alakítja. Az áramlás a következőképpen zajlik:

Go kódrészlet, amely a CVE-2025-1974 (IngressNightmare) sebezhetőséghez kapcsolódó sablonbefecskendezési logikát mutatja be
  1. Minden egyes konfigurációt elemez és átad a generateTemplate-nek, hogy az előre definiált NGINX sablonok szerint formázza meg.
  2. Ezt követően a testTemplate ellenőrzi a generált konfigurációt az alapul szolgáló NGINX bináris rendszerrel szemben.

Minden NGINX konfiguráció az ingress-nginx forráskódjában található nginx.tmpl fájlban található előre definiált sablonokon alapul:

A CVE-2025-1974-hez (IngressNightmare) kapcsolódó sablon injekciós sebezhetőséget bemutató kódrészlet (IngressNightmare)

A generateTemplate függvényen belül a konfiguráció feldolgozása a következő kódrészletben látható módon történik:

Go kódrészlet, amely a CVE-2025-1974 (IngressNightmare) sablonbefecskendezéshez kapcsolódó megjegyzések elemzési logikáját mutatja be

A bemeneti érvényesítés és a szanálás azonban nem elegendő. Konkrétan, az Ingress objektumból származó uid mezőt közvetlenül az NGINX konfigurációs sablonjába illesztik be, ami injekciós pontot hoz létre. Egy támadó ezt kihasználhatja, ha olyan szerkesztett bemenetet ad meg, mint például uid="1234#;\n\n}\n}\n}\n injection_value".

Ez a rosszindulatú bemenet lehetővé teszi a globális hatókörbe való befecskendezést az NGINX sablonba, lehetővé téve a támadók számára, hogy tetszőleges NGINX direktívákat indítsanak el, és potenciálisan RCE-t érjenek el.

A CVE-2025-1974 (IngressNightmare) sebezhetőséggel kapcsolatos sablonbefecskendezést mutató Nginx konfigurációs kódja

A sablonbeviteltől a távoli kódvégrehajtásig

A testTemplate() függvény magyarázata

Miután a generateTemplate függvény létrehozta az NGINX konfigurációt, a testTemplate függvény létrehoz egy ideiglenes konfigurációs fájlt, és futtatja az NGINX könyvtárat az nginx -c {config_file} paranccsal . -t. Ez rákényszeríti az NGINX binárisát a konfiguráció elemzésére és érvényesítésére.

Go kód a CVE-2025-1974 (IngressNightmare) sebezhetőséggel kapcsolatos testTemplate() függvényhez és interfészekhez

A sebezhetőség kihasználásához a támadónak azonosítania kell egy olyan utasítást, amely képes rosszindulatú kódot végrehajtani. Kezdetben munkatársaink a load_module direktívát azonosították potenciálisan hasznosnak, mivel ez a direktíva lehetővé teszi az NGINX számára külső bővítmények betöltését. Ez a direktíva azonban csak a konfigurációelemzés korai fázisában engedélyezett, ami nem felel meg a mi befecskendezési pontunknak.

A load_module szintaxisát és kontextusát bemutató kód képernyőkép, amely a CVE-2025-1974 (IngressNightmare) szempontjából releváns.
A terminál kimenete az nginx config teszt hibáját mutatja a CVE-2025-1974 (IngressNightmare) load_module hibával kapcsolatban

E kihívás megoldása érdekében további kutatásokat folytattunk, amelyek az ssl_engine direktívához vezettek, amelyet így írtunk le: "A modult az OpenSSL dinamikusan betöltheti a konfigurációs tesztelés során". Ez kíváncsiságot keltett a modulok dinamikus betöltésének képessége miatt, ami mélyebb vizsgálatot tett szükségessé.

Képernyőkép az ssl_engine eszköz szintaxisának magyarázatáról a CVE-2025-1974 (IngressNightmare) kontextusban

Az ssl_engine irányelv megértése

Annak érdekében, hogy jobban megértsük, hogyan kezeli az NGINX az ssl_engine direktívát, valamint hogy meghatározzuk, milyen feltételek mellett engedélyezi az NGINX további modulok dinamikus betöltését ezen a direktíván keresztül, belenéztünk az NGINX forráskódjába.

C kódrészlet az NGINX konfiguráció elemzése, amely a CVE-2025-1974 (IngressNightmare) ssl_engine direktívára vonatkozik.

Indításkor az NGINX betölti a kezdeti állapotát, majd soronként elemzi a konfigurációs fájlokat. Minden egyes direktívát az nginx_command_t struktúra kezel, az ssl_engine direktíva pedig közvetlenül az ngx_openssl_commands-t hívja meg.

A CVE-2025-1974 (IngressNightmare) ssl_engine irányelvvel kapcsolatos ngx_command_s C-struktúra definíciója
1. ábra. ngx_command_s definíciója
Kódrészlet, amely az ssl_engine direktíva tömböt mutatja, a CVE-2025-1974 (IngressNightmare) kontextusra vonatkozóan
2. ábra ssl_engine ngx_command_t struktúra

Az ngx_openssl_commands függvény elemzése során munkatársaink felfedezték, hogy az OpenSSL támogatásra támaszkodik, különösen az ENGINE_by_id függvényre, amelyet a hardveresen gyorsított SSL modulokhoz használnak.

C kódrészlet az ssl_engine direktíva logikájáról, amely a CVE-2025-1974 (IngressNightmare) elemzés szempontjából releváns.

Az ENGINE_by_id függvény elemzése során pedig megállapítottuk, hogy lehetővé teszi a megosztott könyvtárak dinamikus betöltését. Sőt, ha a könyvtárat az __attribute__ ((constructor))) kiterjesztéssel fordítjuk le, akkor a kapcsolódó függvényt betöltéskor azonnal végre lehet hajtani. Ez azt jelzi, hogy az ssl_engine direktíva kihasználásával egy támadó tetszőleges megosztott könyvtárakat tölthet be a gépre, ami potenciálisan RCE-hez vezethet.

Célzott megosztott könyvtárak és támadási stratégia

A kód megbízható végrehajtásának megkönnyítése érdekében a következő lépés egy megosztott könyvtár azonosítása. Ahelyett, hogy külső könyvtárakra támaszkodnánk, az NGINX saját viselkedéséből adódik egy életképesebb és ellenőrzött megközelítés: az ügyfél testpuffer mechanizmusa. Ez a funkció lehetővé teszi az NGINX számára, hogy a nagyméretű bejövő kéréseket ideiglenes fájlokba pakolja, ami a kiszámítható fájlkezelési viselkedésen alapuló kihasználási lehetőségeket nyit meg.

A CVE-2025-1974 (IngressNightmare) támadás szempontjából releváns nginx.conf kód, amely a temp elérési utakat és a puffer beállításokat mutatja.

Alapértelmezés szerint, ha egy bejövő kérés meghaladja a 8 KB-ot, az NGINX a kérés testét egy ideiglenes fájlba írja, amely a /tmp/nginx/client-body címen található, cfg-{random_value} formátumú fájlnévvel. Ezek az ideiglenes fájlok legfeljebb 60 másodpercig maradnak meg a beérkezett üzenet sikeres darabjai között.

CVE-2025-1974 (IngressNightmare) diagram, amely az NGINX megosztott könyvtárakat és ideiglenes fájlokat célzó támadási folyamatot mutatja.

Miután a kérés részleges testét egy ideiglenes fájlba írta, az NGINX addig halogatja a törlést, amíg a teljes test meg nem érkezik. Ha a kérés hiányos marad, és 60 másodpercig nem érkezik adat, a fájl végül törlésre kerül. Az utolsó adatdarab szándékos visszatartásával azonban egy támadó használatban tarthatja az ideiglenes fájlt, így az kihasználhatóvá válik.

A CVE-2025-1974 (IngressNightmare) támadási folyamatot bemutató ábra, amely az NGINX megosztott könyvtárakat és a fájlok törlését célozza.

Bár a feltöltött fájl tartalma ellenőrizhető, a véletlenszerű fájlnév miatt nehéz megtalálni azt a fájlrendszerben. A tárolási útvonal a client_body_temp_path segítségével konfigurálható, de a fájlnév véletlenszerűen generálódik futásidőben, így kiszámíthatatlan. Ez a véletlenszerűség jelentősen megnehezíti a célzott hozzáférést még nyers erővel is. Ennek kiküszöbölésére a csapat a Linux operációs rendszerben rejlő viselkedéseket használta ki. Vegyük a következő példát:

A CVE-2025-1974-et (IngressNightmare) kihasználó Python kód fájlírással és végtelen hurok logikával

This code opens a file and keeps it in an active state, closely mimicking the behavior of NGINX's client body buffer mechanism. Using /proc/{pid}/fd directory, attackers can find symbolic links created by the Linux kernel that map open file descriptors to their corresponding file paths. This route allows attackers to reduce the brute-force space to only two variables: the process ID (pid) and the file descriptor (fd).

A terminál kimenete a CVE-2025-1974 (IngressNightmare) támadási stratégia szempontjából releváns folyamat és fájlleíró részleteket mutatja.

A kizsákmányolás szimulálása

A fenti elemzés alapján az Ingress-NGINX podon belül az RCE gyakorlati kihasználása a következő:

  1. Egy rosszindulatú megosztott könyvtár feltöltése az NGINX ügyféltest puffermechanizmusának használatával, hogy ideiglenesen a fájlrendszerben tárolja azt.
  2. A sablonbefecskendezéssel olyan nyers erővel történő próbálkozást kezdeményezhet, amely arra kényszeríti az NGINX-et, hogy a korábban feltöltött megosztott könyvtárat sebezhető direktívákon keresztül töltse be.
VE-2025-1974 (IngressNightmare) kihasználási folyamatábrája, amely a támadási útvonalat mutatja az Ingress-NGINX-en keresztül az NGINX-ig

A megosztott könyvtárat tartalmazó hasznos teher elkészítése

A kód betöltéskor történő végrehajtásának biztosítása érdekében a rosszindulatú megosztott könyvtáron belül egy belépési pontfüggvényt definiálnak konstruktorkiterjesztéssel. Ez a függvény az NGINX betöltésekor végrehajtódik, és célja, hogy fordított héjkapcsolatot hozzon létre egy távoli állomáshoz. 

C kód a CVE-2025-1974 (IngressNightmare) hasznos terheléshez, amely megosztott könyvtárral és fordított shell paranccsal dolgozik.

A fordítás után az eredményül kapott megosztott könyvtár mérete kényelmesen meghaladta a 8 KB-ot, így az NGINX további kitöltés nélkül pufferelte.

Terminal listázása, amely a danger.so megosztott könyvtárat mutatja a CVE-2025-1974 (IngressNightmare) hasznos terhelés létrehozásához

A munkatársaink ezután egy felnagyított Content-Length értékű (pl. 1MB) kérést állítottak össze, hogy méretbeli eltérést mutassanak. Ez arra késztette az NGINX-et, hogy a teljes testet pufferelje ahelyett, hogy azonnal feldolgozná, biztosítva ezzel, hogy a megosztott objektum egy kiszámítható helyre íródjon.

Go kód a megosztott könyvtárral való hasznos teher létrehozásához, a CVE-2025-1974 (IngressNightmare) exploithoz kapcsolódóan

A megosztott könyvtár kiváltása injektálással

Miután a megosztott könyvtár a helyén volt, a következő lépésként egy rosszindulatú direktívát juttattunk be az NGINX konfigurációjába a sebezhető uid mezőt használva. Ez a direktíva tartalmazta az ssl_engine-t, amely a pufferelt fájl elérési útvonalára mutatott:

JSON kód, amely a Kubernetes Ingress objektumot mutatja a CVE-2025-1974 (IngressNightmare) exploit injekcióval

A sikeres RCE megköveteli, hogy az ssl_engine utasítás hivatkozzon a pufferelt fájl helyes elérési útvonalára. Ez egy automatizált, nyers erővel végrehajtott szkript segítségével érhető el, amely szisztematikusan végigjárja a folyamatazonosítók és fájlleírók lehetséges kombinációit, hogy azonosítsa a pufferelt megosztott objektumra mutató érvényes szimbolikus hivatkozást.

Go kód kihasználása CVE-2025-1974 (IngressNightmare) megosztott könyvtár injekció és webhook érvényesítés révén

Az alábbiakban egy minta a generált NGINX sablonból, amely az exploitot kiváltotta.

Nginx konfigurációs kód, amely CVE-2025-1974 (IngressNightmare) injekciót mutat az ssl_engine és mirror direktívákon keresztül

Sikeres kihasználás után a támadó shell hozzáférést szerezhetett az ingress-nginx pod kontextusában, amely alapértelmezés szerint hozzáférhetett az érzékeny Kubernetes fürt titkaihoz.

A terminál kimenete a kubectl get secrets -A parancsot mutatja, amely a CVE-2025-1974 (IngressNightmare) szempontjából releváns.

Kárenyhítés és helyreállítás

A CVE-2025-1974-hez kapcsolódó kockázatok hatékony csökkentéséhez a szervezeteknek olyan megoldásra van szükségük, amely átláthatóságot és ellenőrzést biztosít a nyílt forráskódú komponensek felett.

Az OPSWAT SBOM, a MetaDefender® platform egyik alaptechnológiája, ezt az igényt a szoftverkomponensek, könyvtárak, Docker-konténerek és függőségek leltározásával elégíti ki. Lehetővé teszi a szervezetek számára, hogy nyomon kövessék, biztosítsák és proaktívan frissítsék komponenseiket.

UI képernyőkép a CVE-2025-1974 (IngressNightmare) kritikus sebezhetőségről az nginx-ingress-controllerben

A fenti példában a MetaDefender Core™ SBOM technológiája a CVE-2025-1974 sebezhetőséget tartalmazó nginx-ingress-controller csomagot vizsgálta. A rendszer automatikusan kritikusnak jelölte a problémát, és útmutatást adott az elérhető javított verziókról, így a csapatok gyorsan prioritást adhattak a sebezhetőségnek, és gyorsan javíthatták azt, mielőtt kihasználhatóvá válna.

OPSWAT SBOM elérhető a MetaDefender Core és a MetaDefender Software Supply Chain™ rendszerben, lehetővé téve a biztonsági csapatok számára, hogy gyorsabban azonosítsák a sebezhetőségeket, és gyorsabban reagáljanak rájuk. Az OPSWAT SBOM segítségével a biztonsági csapatok:

  • Gyorsan megtalálhatja a sebezhető komponenseket - Azonnal azonosíthatja a deserializációs támadások által érintett nyílt forráskódú komponenseket. Ez biztosítja a gyors intézkedést a sebezhető könyvtárak foltozása vagy cseréje terén. 
  • Proaktív javítások és frissítések biztosítása - Folyamatosan figyelje a nyílt forráskódú komponenseket OPSWAT SBOM-on keresztül, hogy a deserializációs sebezhetőségek előtt járjon. OPSWAT SBOM képes észlelni az elavult vagy nem biztonságos komponenseket, lehetővé téve az időben történő frissítést és a támadásoknak való kitettség csökkentését. 
  • Megfelelés és jelentéstétel fenntartása - OPSWAT SBOM segít a szervezeteknek megfelelni a megfelelési követelményeknek, mivel a szabályozási keretek egyre inkább előírják a szoftverellátási láncok átláthatóságát.
Címkék:

Maradjon naprakész az OPSWAT oldalon!

Iratkozzon fel még ma, hogy értesüljön a vállalat legfrissebb híreiről, történetekről, eseményinformációkról és sok másról.