Viešai buvo atskleistas kritinis Nginx perrašymo modulio pažeidžiamumas, atskleidžiantis krūvos buferio perpildymą, kuris egzistuoja nuo 2008 m. Šis pažeidžiamumas, pažymėtas kaip CVE-2026-42945 ir pavadintas „Nginx Rift“, leidžia neautentifikuotai nuotoliniu būdu vykdyti kodą serveriuose ir naudojant konkrečias rewrite direktyvas. Atradimas buvo atliktas savarankiškai, naudojant AI varomą saugos analizės sistemą, pabrėždama tiek automatinio pažeidžiamumo aptikimo galią, tiek skubų poreikį nedelsiant pataisyti.
Pažeidžiamumo apžvalga
CVE ID: CVE-2026-42945
Paveiktas komponentas: ngx_http_perrašymo_modulis
Pažeidžiamumo tipas: krūvos buferio perpildymas
CVSS balas: Kritinis
Paveiktos versijos: Nginx 0.6.27–1.30.0
Fiksuotos versijos: Nginx 1.31.0, 1.30.1
Poveikis: neautentifikuotas nuotolinis kodo vykdymas (RCE)
Pagrindinė priežastis: klasikinė dviejų praėjimų variklio klaida
„Nginx“ scenarijų variklis naudoja dviejų eigų procesą, kad tvarkytų kintamųjų pakeitimą:
- Pirmasis pravažiavimas (ilgio skaičiavimas): Apskaičiuokite reikiamą buferio dydį
- Antrasis leidimas (kopija): nukopijuokite duomenis į skirtą buferį
Pažeidžiamumas kyla dėl nenuoseklumo, kaip is_args vėliava tvarkoma tarp šių dviejų praėjimų:
Klaida:
- The
is_argsvėliavėlė nustatoma pagrindiniame variklyje, kai perrašymo pakeitime yra a?charakteris - Tačiau ilgio skaičiavimo leidimas veikia su naujai nuliniu antriniu varikliu, kur
is_args = 0 - Dėl to ilgio skaičiavimas grąžina neapdorotą fiksavimo ilgį
- Kopijavimo leidimas mato
is_args = 1ir skambinangx_escape_urisuNGX_ESCAPE_ARGS - Šis pašalinimas išplečia kiekvieną išeinamą baitą iki 3 baitų (pvz., tarpas tampa
%20) - Kopijavimo operacija perpildo per mažo dydžio krūvos buferį užpuoliko valdomais URI duomenimis
Eksploatavimo grandinė
Viešasis koncepcijos įrodymas (PoC) parodo visą naudojimo grandinę:
1 veiksmas: suaktyvinkite buferio perpildymą
Pažeidžiamumą sukelia konkretus Nginx konfigūracijos modelis:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /backend?path=$1 break;
set $captured $1;
}
Kai siunčiama užklausa su ilgu URI su specialiaisiais simboliais, perrašymo operacijos metu įvyksta buferio perpildymas.
2 veiksmas: pritraukite Feng Shui už korupciją
Išnaudojimas naudoja „kryžminių užklausų krūvos feng shui“, kad būtų nustatyta a ngx_pool_t struktūra šalia perpildyto buferio. Tai apima:
- Kelių POST užklausų siuntimas su kruopščiai sukurtais korpusais
- Krūvos apipurškimas duomenimis, kurie bus paskirstyti šalia pažeidžiamo buferio
- Sugadindamas
cleanupžymeklį gretimame baseino struktūroje
3 veiksmas: kodo vykdymas per baseino valymą
Kai baseinas sunaikinamas, sugadintas valymo žymeklis nukreipiamas į klastotę ngx_pool_cleanup_s struktūra, kuri skambina system() su užpuoliko valdomais argumentais.
Paveiktos Nginx versijos
Nginx atviras šaltinis:
- Paveikta: nuo 0.6.27 iki 1.30.0
- Ištaisyta: 1.31.0, 1.30.1
Nginx Plus:
- Paveikta: R32–R36
- Pataisyta: R36 P4, R35 P2, R32 P6
Išnaudojimo prielaidos
Nors pažeidžiamumas yra rimtas, išnaudojimui reikia tam tikrų sąlygų:
- Perrašyti direktyvą: Būtina naudoti
rewritesu neįvardytais įrašais (pvz.,$1,$2) ir a?pakaitinėje eilutėje - Nustatyti direktyvą: Turi būti paskesnis
setdirektyvą, kuri nurodo fiksavimo grupę - ASLR aplinkkelis: Viešasis PoC daro prielaidą, kad ASLR yra išjungtas, nors visas įrašas rodo, kad ASLR galima apeiti
Dažni pažeidžiami modeliai
Nors konkretus modelis gali atrodyti neįprastas, kelios realaus pasaulio konfigūracijos yra pažeidžiamos:
PHP integracija:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
URL perrašymas:
rewrite ^/old-path/(.*)$ /new-path?id=$1 break;
set $request_id $1;
API maršrutas:
rewrite ^/api/v1/(.*)$ /backend?endpoint=$1 break;
set $endpoint $1;
ASLR ir realaus pasaulio rizika
Viešasis PoC dėl paprastumo išjungia ASLR, todėl kai kurie pažeidžiamumą atmeta kaip mažos rizikos. Tačiau šis vertinimas yra pavojingai neteisingas:
Kodėl ASLR ne visiškai apsaugo
-
Nginx Forking modelis: Nginx naudoja pagrindinį procesą, kuris sujungia darbuotojų procesus. Antriniai procesai paveldi pirminio atminties išdėstymą, o tai reiškia, kad kelios užklausos gali būti nukreiptos į tą pačią adresų erdvę be pakartotinio atsitiktinio atrankos.
-
Informacijos nutekėjimas: pats pažeidžiamumas gali nutekėti informaciją apie atminties išdėstymą arba užpuolikai gali susieti jį su kitais pažeidžiamumu, kad gautų šią informaciją.
-
Brute Force galimybė: Su neribotais bandymais strigti prieš darbuotojų procesus (kurie automatiškai paleidžiami iš naujo), užpuolikai laikui bėgant gali priverstinai sunaikinti ASLR entropiją.
-
Laiko atakos: Sudėtingi užpuolikai gali naudoti laiko nustatymo šoninius kanalus, kad nustatytų atminties išdėstymo informaciją.
Istorinis precedentas
BROP (angl. Blind Return Oriented Programming) ataka parodė, kad ASLR galima apeiti kruopščiai išnaudojant šakute pagrįstus serverius. Nginx architektūra yra ypač pažeidžiama šių metodų.
Švelninimo strategijos
Neatidėliotini veiksmai
-
Atnaujinkite Nginx: Nedelsdami atnaujinkite į 1.31.0 arba 1.30.1 versiją
-
Naudokite pavadintus fiksavimus: Pakeiskite neįvardytus fiksavimus pavadintais fiksacijomis:
# Vulnerable rewrite ^/api/(.*)$ /backend?path=$1 break; # Safe rewrite ^/api/(?<path>.*)$ /backend?path=$path break; -
Pašalinkite pažeidžiamas direktyvas: Jei įmanoma, pašalinkite
rewriteirsetdirektyvas, atitinkančias pažeidžiamą modelį
Laikini sprendimai
- Išjungti perrašymo modulį: Jei nereikia, visiškai išjunkite perrašymo modulį
- Naudokite alternatyvius metodus: perkelkite URL perrašymo logiką į programos kodą
- Įgyvendinti WAF taisykles: Įdiekite žiniatinklio programų ugniasienės taisykles, kad aptiktumėte išnaudojimo bandymus
- Stebėti žurnalus: stebėkite, ar prieigos žurnaluose nėra neįprastų šablonų, kurie gali rodyti išnaudojimo bandymus
Atradimo metodas: AI padedamas pažeidžiamumo aptikimas
Šį pažeidžiamumą „DepthFirst“ saugos analizės sistema aptiko savarankiškai, vienu spustelėjimu įdiegus „Nginx“ šaltinio kodą. Šis atradimo metodas kelia svarbių klausimų:
Poveikis saugumui
- Automatinis aptikimas: AI varomi įrankiai gali nustatyti pažeidžiamumą, kurio žmonės praleido daugelį metų
- Skalė: Šie įrankiai gali greitai analizuoti didžiules kodų bazes
- Nuoseklumas: Automatinė analizė nepatiria nuovargio ar neapsižiūrėjimo
- Grėsmė: Kenkėjiški veikėjai gali naudoti panašius įrankius, kad aptiktų pažeidžiamumą prieš pardavėjus
Dviašmenis kardas
Nors automatizuotas pažeidžiamumo aptikimas yra galingas, tai taip pat reiškia:
- Pažeidžiamumas bus rastas greičiau
- Langas tarp atradimo ir išnaudojimo susiaurėja
- Organizacijos turi greičiau pataisyti
- Nulinės dienos pažeidžiamumas gali tapti dažnesnis
Poveikio vertinimas
Rinkos dalis
„Nginx“ valdo maždaug 39–43 % viešųjų interneto serverių visame pasaulyje. Šis pažeidžiamumas gali paveikti milijonus serverių.
Paveikti naudojimo atvejai
- Atvirkštiniai tarpiniai serveriai: „Nginx“ egzemplioriai apima programų serverius
- Apkrovos balansuotojai: Nginx naudojamas apkrovai balansuoti
- API šliuzai: Nginx veikia kaip API šliuzas
- PHP integracija: Nginx su PHP-FPM naudojant perrašymo taisykles
- Senas URL perrašymas: serveriai, migruojantys iš „Apache“ su perrašymo taisyklėmis
Pardavėjo atsakymas
F5 („Nginx“ savininkas):
OpenResty:
Linux platinimai:
- Ubuntu: pataisyta nuo 2026 m. gegužės 15 d
- „Debian“: galimi pataisymai, skirti nestabiliems („trixie“)
- Kiti platinimai: išleidžiami pataisymai
Koncepcijos įrodymas
Viešą PoC galima rasti adresu https://github.com/DepthFirstDisclosures/Nginx-Rift
Saugyklos turinys:
poc.py: Python išnaudojimo scenarijussetup.sh: Docker konteinerio sąrankaenv/: Docker aplinkos konfigūracijaREADME.md: Išsamus naudojimo vadovas
PoC paleidimas:
./setup.sh
docker compose -f env/docker-compose.yml up
python3 poc.py --shell
Rekomendacijos sistemos administratoriams
- Nedelsiant: patikrinkite „Nginx“ konfigūracijas, ar nėra pažeidžiamų modelių
- Skubiai: planuokite ir vykdykite „Nginx“ atnaujinimus į pataisytas versijas
- Trumpalaikis: Įdiekite išnaudojimo bandymų stebėjimą
- Ilgalaikis: apsvarstykite galimybę pereiti prie atminties saugių alternatyvų arba įdiegti papildomus saugos sluoksnius
Rekomendacijos kūrėjams
- Kodo peržiūra: peržiūrėkite „Nginx“ konfigūracijas, ar nėra pažeidžiamų modelių
- Testavimas: Išbandykite programas naudodami pataisytas Nginx versijas
- Alternatyvos: vietoj Nginx perrašymo taisyklių apsvarstykite galimybę naudoti Lua modulius arba programos lygio maršrutą
- Saugumas: įgyvendinkite nuodugnias gynybos strategijas, kurios nesiremia vien ASLR
Išvada
CVE-2026-42945 reiškia kritinį pažeidžiamumą, kuris nebuvo aptiktas 18 metų. Jo atradimas naudojant automatizuotą dirbtinio intelekto analizę rodo, kad pažeidžiamumas bus rastas ir naudojamas ateityje.
Pažeidžiamumas yra rimtas, tačiau riziką galima sumažinti nedelsiant pataisius ir pakeitus konfigūraciją. Organizacijos, kuriose veikia „Nginx“, turėtų tai laikyti kritiniu saugumo incidentu ir atitinkamai teikti pirmenybę naujinimams.
Platesnė pamoka yra ta, kad net subrendusi, plačiai naudojama programinė įranga gali ilgą laiką turėti kritinių spragų. Norint išlaikyti saugią infrastruktūrą, būtina nuolatinė saugumo analizė, tiek automatizuota, tiek rankiniu būdu.
Veiksmo elementai:
Jei tekste radote klaidą, siųskite pranešimą autoriui pažymėdami klaidą ir paspausdami Ctrl-Enter.
Norėdami komentuoti, turite būti prisijungę.
Prisijunkite
Nuoroda į informacijos šaltinį