Den 13 maj ÄtgÀrdades en sÄrbarhet i den populÀra webbservern nginx för tunga system: CVE-2026-42945, som potentiellt kan leda till RCE. SÄrbarheten uppstod för 18 Är sedan (2008) i version 0.6.27.
För att utnyttja den krÀvs en viss kombination av direktiv i serverkonfigurationen, inte nödvÀndigtvis för alla, men förekommande ibland, till exempel:
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 $myvar;
VĂ€sentliga detaljer:
- först kommer direktivet rewrite, dÀr (den första argumentet) ett reguljÀrt uttryck med en markerad parameter (nÄgot inom parenteser) ersÀtts med (den andra argumentet) en vÀg som innehÄller ett frÄgetecken;
- direktivet set (istÀllet kan den andra rewrite eller if ocksÄ anvÀndas), som anvÀnder den markerade parametern frÄn den ursprungliga skrivna vÀgen (i det hÀr fallet $1).
SÄrbarheten fungerar sÄ hÀr:
- det första rewrite-direktivet, nÀr det stöter pÄ ett frÄgetecken, sÀtter en intern flagga is_args, vilket betyder "nu samlar vi in GET-parametrar för den skrivna URL:en, allt mÄste escaping", och (detta Àr kÀrnan i felet) glömmer att ÄterstÀlla denna flagga i slutet av sin bearbetning;
- det följande direktivet set, nÀr det formar vÀrdet för $myvar, tillÀmpar felaktigt den tidigare instÀllda is_args, och skriver in my_var det escaping-vÀrde som den markerade parametern $1; problemet Àr att bufferten för $myvar tilldelas tidigare, redan före genomförandet av substitutionerna, och dess lÀngd berÀknas med is_args=0, vilket innebÀr att det escaping vÀrdet blir lÀngre Àn den tilldelade bufferten, vilket gör att skrivning sker utanför den tilldelade bufferten in i andra serverdatastrukturer. För att detta ska hÀnda Àr det tillrÀckligt att skicka en begÀran med tecken som ska escaping, till exempel plustecken, pÄ platsen för den markerade parametern i det reguljÀra uttrycket.
Om det inte finns nÄgon ALSR pÄ vÀrden kan denna sÄrbarhet utnyttjas för fjÀrrkodexekvering med rÀttigheterna för nginx-arbetsprocessen, det finns PoC (det Àr inte ett rent exploit, utan en demonstration i sandlÄdan).
SÄrbarheten har ÄtgÀrdats i stabila grenen av nginx 1.30.1, och i den nya utvecklarversionen 1.31.0. lÀnk till commit.
AnmÀrkningsvÀrt Àr att för 14 Är sedan (2012) har ett liknande fel redan ÄtgÀrdats pÄ ett annat stÀlle i nÀrheten.
ââ-
PĂ„ F5:s webbplats finns en rekommendation för tillfĂ€llig neutralisering av sĂ„rbarheten om det inte gĂ„r att snabbt uppdatera versionen av nginx â man bör byta ut obenĂ€mnda parameterar till benĂ€mnda, och i det fallet, enligt deras uppgifter, kommer sĂ„rbarheten att inte upptrĂ€da. Exempel dĂ€rifrĂ„n:
var: rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
blev: rewrite ^/users/(?[0-9]+)/profile/(?
Information om sÄrbarheten tillhandahölls av Zhenpeng (Leo) Lin frÄn DepthFirst. Dessutom rapporterade han om följande problem som ocksÄ har ÄtgÀrdats:
- CVE-2026-40701 (commit) anvÀndning efter frigörande vid anvÀndning av ssl_verify_client+ssl_ocsp (verkar utan RCE)
- CVE-2026-42934 (commit) lÀsning utanför bufferten i utf-8 parsern under specifika omstÀndigheter, kan leda till en liten datalÀcka eller krasch av arbetsprocessen
- CVE-2026-42946 (commit) överdriven minnesallokering och lÀsning utanför bufferten vid anvÀndning av scgi/uwsgi-moduler, problemet upptrÀder vid nÀrvaron av en illasinnad backend (upstream) genom angivna protokoll, eller vid mitm av kommunikationskanalen med backenden, kan leda till lÀsning av nginx-minne eller krasch av arbetsprocessen
KĂ€lla: linux.org.ru
