TL; DRPo tom, čo sa v roku 2026 objavil tretí problém s pretečením vyrovnávacej pamäte (a podľa F5 ide o RCE, ak neexistuje ASLR) pri práci s regulárnymi výrazmi a premennými, sa vývojár freenginxu Maxim Dunin rozhodol, že je čas to zastaviť, a pred zápisom údajov do svojho produktu pridal kontrolu veľkosti premennej. Nginx odvtedy túto funkciu skopíroval, čo dáva nádej, že nové CVE súvisiace s týmto problémom budú eliminované.
Teraz k detailom.
19. júna bolo urobené zaviazať sa vo Freenginxe, ktorý pridáva do deskriptora premennej koncové pole označujúce koniec buffera. Predtým existoval iba ukazovateľ na jeho začiatok (pos), požadovaná dĺžka sa (a stále sa) vypočítavala vopred a v čase, keď sa dáta kopírovali do premennej, sa predpokladalo, že správne vypočítaná dĺžka zaručí, že sa dáta zmestia do buffera. Bohužiaľ, toto sa už dvakrát v máji 2026 ukázalo ako nesprávne kvôli rôznym prehliadnutiam.1 (linux.org.ru), 2 (linux.org.ru)), čo viedlo k pretečeniu vyrovnávacej pamäte a hrozným následkom. Teraz, keď sa vytvorí vyrovnávacia pamäť premennej, naplní sa aj ukazovateľ na jej koniec a pred zápisom údajov do premennej, ak sa údaje nezmestia, spracovanie požiadavky sa kontrolovaným spôsobom ukončí chybou. To znamená, že chyby pri výpočte dĺžky môžu stále pretrvávať, ale nebudú plytvať pamäťou; zlyhajú iba pri konkrétnej HTTP požiadavke. Nasledujúce commity (2 (freenginx.org), 3 (freenginx.org)) podobná ochrana bola pridaná aj do iných častí kódu vrátane kódu na zaznamenávanie prístupov. Verzia bola zverejnená 7. júla Freenginx 1.31.3, ktorý zahŕňa túto opravu.
15. júla boli tieto commity vyzdvihnuté službou nginx (1 (github.com), 2 (github.com), 3 (github.com), z nejakého dôvodu zámena druhého a tretieho v reťazci), problém bol priradený CVE-2026 42533,a F5 vydala oficiálne SA (f5.com).
Pokiaľ ide o konkrétnu zraniteľnosť tentoraz: prejavuje sa pri použití direktívy map s regulárnymi výrazmi s extrahovanými parametrami. Pokiaľ ide o ďalšie podmienky potrebné na jej spustenie, text v popise commitu a text v SA sa mierne líšia: SA uvádza, že ďalej sa musí vypočítať určitý reťazec, ktorý použije extrahovaný parameter zostávajúci z mapy, pred výsledkom tej istej mapy. V popise commitu v príklade sa medzi týmito krokmi vynuluje aj premenná obsahujúca extrahovaný parameter. Nech je to akokoľvek, je nepravdepodobné, že by sa to stalo vo väčšine bežiacich nginxov, a preto sa zraniteľnosť dotkla len málo ľudí. Za zmienku tiež stojí, že oprava pre výpočet dĺžky špecificky pre tento prípad nie je v commitovaných úpravách (alebo som zle hľadal?), existuje iba ochrana, ktorá problém premení na kontrolované zlyhanie HTTP požiadavky. Hoci niektoré opravy boli do freenginxu pridané 19. júla (5bfb, 7622, b906) výpočet dĺžky pre podobnú situáciu, ale nie je hneď jasné, či je to tak alebo nie.
Zraniteľnosť sa objavila vo verzii nginx 0.9.6, opravy boli zahrnuté vo verziách freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.
Spoločnosť nginx SA ďakuje viacerým jednotlivcom za nezávislé nahlásenie zraniteľnosti a dodržiavanie „koordinovaných štandardov zverejňovania“:
F5 oceňuje Ming Xuan, DKD (@pidifn), Ji'an Zhou a Zhen Yan z AntAISecurityLab, Rafaela Gaceka, Sergiiho Negodiuka z EVO.company, Lam Jun Ronga z Calif.io, Mufeeda VH z Winfunc Research (winfunc.com), Vexeru AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin z depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin z Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil) a Milan Jovic (Kljunowsky) za to, že nás nezávisle upozornili na tento problém a dodržiavali najvyššie štandardy koordinovaného zverejňovania.
Vo freenginx sú sprievodné informácie o oprave v skutočnosti obmedzené na správu o commite. changelogTáto oprava nie je ani označená ako „zabezpečenie“ alebo „oprava chyby“, iba ako „funkcia“. Zrejme autor nepovažoval tento problém za kritický. Nie je možné určiť vzťah medzi problémami nahlásenými spomínanými osobami vo F5 a commitom skopírovaným z freenginx, alebo či oni (alebo niekto iný) nahlásili problém autorovi freenginx.
Zdroj: linux.org.ru
