TL;DR: Kohtudes 2026. aastal avastatud kolmanda puhverülesega (ja F5 versiooni järgi RCE, kui ASLR pole) regulaarsete väljendite ja muutuja töötluse käigus, otsustas arendaja freenginxil, Maksim Dunin, et on aeg see lõpetada ning lisas oma tootes muutuja suuruse kontrolli enne andmete selle kirjutamist. Sealt võeti see uuendus endaga kaasa ka nginx, mis annab lootust uute CVE-de lõpetamiseks selle teema osas.
Nüüd üksikasjad.
19. juunil tehti kommitt freenginxis, mis lisab muutuja descriptorisse lõpu välja, mis näitab puhveri lõppu. Varem oli seal ainult alguse näitaja (pos), vajalik pikkus arvutati (ja arvutatakse endiselt) ette, ja andmete muutuja copy momentil eeldati, et õigesti varem arvutatud pikkus garanteerib, et andmed mahuvad puhvri sisse. Kahjuks on mai 2026. aastal mitmete erinevate unustamiste tõttu selgunud, et see pole alati nii (1 (linux.org.ru), 2 (linux.org.ru)), mis viis puhverületusteni ja halbadeni tagajärgedeni. Nii et nüüd, kui puhvri muutuja luuakse, täidetakse ka näitaja selle lõpus ning enne andmete kirjutamist muutuja, kui andmed ei mahu, kontrollitakse taotluse töötlemise lõpetamist veaga. See tähendab, et pikkuse arvutamise vead võivad jätkuvalt esineda, kuid need ei lõhke enam mälu, vaid ebaõnnestuvad ainult konkreetse http-päringu. Järgmiste commit'idega (2 (freenginx.org), 3 (freenginx.org)) lisati sarnane kaitse ka teistesse koodikohtadesse, sealhulgas access-logi haldamise koodi. 7. juulil avaldati versioon freenginx 1.31.3, mis sisaldab seda parandust.
15. juulil võeti need commit'id nginx-i poolt (1 (github.com), 2 (github.com), 3 (github.com), mikski olid teise ja kolmanda vahetuses), probleemile määrati CVE-2026-42533, ja F5 väljastas ametliku SA (f5.com).
Konkreetse haavatavuse osas: see ilmneb map direktiivi kasutamisel regulaaravaldistega koos eraldatud parameetritega. Ülejäänud vajalike tingimuste osas, mis selle aktiveerimiseks vajalikud, erinedavad commit'i kirjelduses olev tekst ja SA tekst veidi: SA-s on märgitud, et hiljem peaks olema mingi stringi arvutamine, mis kasutab map suurelt eraldatud parameetrit, enne selle sama map'i tulemust. Commit'i kirjelduses osaleb nende sammude vahel veel muutuja nullimine, mis sisaldab eraldatud parameetrit. Igal juhul, enamikul käivitatud nginx-edest seda tõenäoliselt ei esine ja seetõttu on haavatavus vähe kellelegi mõjunud. Tuleb märkida, et täpselt selles juhtumis ei paista olevat parandusi konkreetse pikkuse arvutamise kohta (või ma ei leidnud neid piisavalt hästi?), seal on ainult kaitse, mis muudab probleemi kontrollitud http-päringu ebaõnnestumiseks. Kuigi 19. juulil lisati freenginx-i mingid parandused (5bfb, 7622, b906) sarnase olukorra pikkuse arvutamiseks, kuid kohe ei ole selge, kas see on see või mitte.
Haavatavus ilmnes nginx versioonis 0.9.6, parandused jõudsid freenginx versioonidesse 1.31.3, nginx 1.30.4, nginx 1.31.3.
SA nginx-is on tänud mitmete isikute suunal, kes on sõltumatult teavitunud haavatavusest ja järginud "koordineeritud teabe avalikustamise standardeid":
F5 tunnustab Ming Xuani, DKD (@pidifn), Ji’an Zhout ja Zhen Yani AntAISecurityLabist, Rafael Gacekit, Sergii Negodiuki EVO.companyst, Lam Jun Rongi Calif.io-st, Mufeed VH-d Winfunc Research-ist (winfunc.com), Vexera AI-d (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw'd (cyberstan), qianshuidewajueji, zenneth'i (randomguy6407), Zhenpeng (Leo) Lin'i depthfirst'ist, Lukas Johannes Moelleri, Melih Tolga Sahin'i Vodafone Türkiyest, Ayoub Nabil Boubagrat'it (GitHub: @ayoubnabil) ja Milan Jovic'it (Kljunowsky) selle küsimusega meile tähelepanu juhtimise eest ja kõrgeimate koordineeritud avalikustamise standardite järgimise eest.
Freenginx'i asjakohane teave parandamise osas piirneb tegelikult commit'i kohta käiva teadetega. changelog-s ei ole see parandus märgitud ei "turvalisuse" (security) ega "paranduse" (bugfix) märgistega, vaid lihtsalt "lisana" (feature). Tõenäoliselt ei pidanud autor seda probleemi kriitiliseks. Kuidas on F5 poolt nimetatud isikute probleemiteated seostatavad freenginx'i commitiga, kas nad (või keegi teine) teatasid freenginx'i autorile probleemist, ei õnnestunud välja selgitada.
Allikas: linux.org.ru
