TL; DRNakon Å”to je naiÅ”ao na treÄe prelijevanje bafera otkriveno 2026. godine (i, prema F5, RCE ako nema ASLR-a) tokom rada s regexp-ovima i varijablama, programer Freenginxa Maxim Dunin odluÄio je da je vrijeme da to zaustavi i dodao je provjeru veliÄine varijable svom proizvodu prije pisanja podataka u nju. Nginx je od tada kopirao ovu funkciju, dajuÄi nadu da Äe se novi CVE-ovi povezani s ovim problemom eliminirati.
A sada detalji.
19. juna je napravljeno poÄiniti u Freenginxu, koji dodaje zavrÅ”no polje deskriptoru varijable, koje oznaÄava kraj bafera. Ranije je postojao samo pokazivaÄ na njegov poÄetak (poz), potrebna dužina se (i joÅ” uvijek se) izraÄunavala unaprijed, a do trenutka kada su se podaci kopirali u varijablu, pretpostavljalo se da Äe ispravno izraÄunata dužina garantovati da Äe se podaci uklopiti u bafer. Nažalost, ovo se veÄ dva puta pokazalo netaÄnim u maju 2026. godine zbog raznih propusta.1 (linux.org.ru), 2 (linux.org.ru)), Å”to je dovelo do prepunjenja bafera i teÅ”kih posljedica. Sada, kada se kreira bafer varijable, popunjava se i pokazivaÄ na njegov kraj, a prije upisivanja podataka u varijablu, ako podaci ne odgovaraju, obrada zahtjeva Äe se kontrolirano zavrÅ”iti s greÅ”kom. To znaÄi da greÅ”ke u izraÄunavanju dužine mogu i dalje postojati, ali neÄe troÅ”iti memoriju; samo Äe neuspjeh u obradi odreÄenog HTTP zahtjeva. SljedeÄe izmjene (2 (freenginx.org), 3 (freenginx.org)) sliÄna zaÅ”tita je dodana i drugim dijelovima koda, ukljuÄujuÄi kod za evidentiranje pristupa. Verzija je objavljena 7. jula Freenginx 1.31.3, Å”to ukljuÄuje ovu ispravku.
15. jula, nginx je preuzeo ove commitove (1 (github.com), 2 (github.com), 3 (github.com), iz nekog razloga zamjenjujuÄi drugi i treÄi u lancu), problem je bio dodijeljen CVE-2026-42533, a F5 je objavio službenu SA (f5.com).
Å to se tiÄe specifiÄne ranjivosti ovog puta: ona se manifestuje koriÅ”tenjem map direktive sa regexp-ovima sa ekstrahovanim parametrima. Å to se tiÄe ostalih uslova potrebnih za njeno aktiviranje, tekst u opisu commita i tekst u SA se neznatno razlikuju: SA navodi da se sljedeÄi mora izraÄunati odreÄeni string, koji koristi ekstrahovani parametar koji je ostao od mape, prije rezultata te iste mape. U opisu commita u primjeru, izmeÄu ovih koraka, varijabla koja sadrži ekstrahovani parametar se takoÄer poniÅ”tava. MeÄutim, malo je vjerovatno da Äe se ovo dogoditi u veÄini pokrenutih nginx-ova, te je stoga ranjivost pogodila malo ljudi. TakoÄer vrijedi napomenuti da se ispravka za izraÄunavanje dužine posebno za ovaj sluÄaj ne nalazi u commit-ovanim izmjenama (ili sam loÅ”e tražio?), postoji samo zaÅ”tita koja problem pretvara u kontrolisani neuspjeh HTTP zahtjeva. Iako su neke ispravke dodane u freenginx 19. jula (5bfb, 7622, b906) izraÄunavanje dužine za sliÄnu situaciju, ali nije odmah jasno da li je to sluÄaj ili ne.
Ranjivost se pojavila u verziji nginx 0.9.6, a ispravke su ukljuÄene u verzije freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.
Nginx SA zahvaljuje brojnim pojedincima na nezavisnom prijavljivanju ranjivosti i pridržavanju "koordiniranih standarda otkrivanja":
F5 zahvaljuje Ming Xuanu, DKD (@pidifn), Ji'an Zhouu i Zhen Yanu iz AntAISecurityLaba, Rafaelu Gaceku, Sergiiju Negodiuku iz EVO.company, Lam Jun Rongu iz Calif.io, Mufeedu VH-u iz Winfunc Researcha (winfunc.com), Vexeri AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin iz depthfirst-a, Lukas Johannes Moeller, Melih Tolga Sahin iz Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil) i Milan JoviÄ (Kljunowsky) za nezavisno skretanje pažnje na ovo pitanje i poÅ”tivanje najviÅ”ih standarda koordiniranog otkrivanja informacija.
U freenginxu, prateÄe informacije o ispravci su zapravo ograniÄene na poruku o potvrÄivanju (commit). ChangelogOva ispravka nije Äak ni oznaÄena kao "sigurnosna" ili "ispravka greÅ”ke", veÄ samo kao "funkcija". Izgleda da autor nije smatrao ovaj problem kritiÄnim. NemoguÄe je utvrditi vezu izmeÄu prijavljenih problema od strane gore navedenih osoba u F5 i commita kopiranog sa freenginx-a, ili da li su oni (ili bilo ko drugi) prijavili problem autoru freenginx-a.
izvor: linux.org.ru
