TL;DR: StÀlld inför den tredje bufferöverskridningen som upptÀcktes under 2026 (och enligt F5, RCE om ASLR inte anvÀnds) vid arbete med regexp och variabler, bestÀmde sig utvecklaren av freenginx, Maxim Dunin, för att det var dags att sÀtta stopp för detta, och la till en kontroll av variabelns storlek innan den skrivs. Detta nyheter har nu Àven tagits till nginx, vilket ger hopp om att nya CVE pÄ detta tema snart kan upphöra.
Nu detaljer.
Den 19 juni gjordes commit i freenginx, vilket lÀgger till ett fÀlt till variabeln som anger slutet av bufferten. Tidigare fanns bara en pekare till början (pos), och den nödvÀndiga lÀngden berÀknades (och berÀknas fortfarande) i förvÀg, och vid kopiering av data till variabeln förutsattes det att rÀtt dimensionerad lÀngd skulle sÀkerstÀlla att data skulle fÄ plats i bufferten. TyvÀrr har det vid tvÄ tillfÀllen i maj 2026, pÄ grund av olika förbiseenden, visat sig att sÄ inte var fallet (1 (linux.org.ru), 2 (linux.org.ru)), vilket ledde till buffertöverskridningar och negativa konsekvenser. Nu, nÀr bufferten för variabeln skapas, fylls Àven pekaren till dess slut, och innan data skrivs till variabeln, om data inte fÄr plats, kommer behandlingen av förfrÄgan kontrollerat att avslutas med ett fel. Det innebÀr att lÀngdberÀkningsfel fortfarande kan intrÀffa, men de kommer nu inte lÀngre att krossa minnet, utan endast misslyckas med den aktuella http-förfrÄgan. De följande committerna (2 (freenginx.org), 3 (freenginx.org)) har lagt till liknande skydd pÄ andra stÀllen i koden, inklusive koden för accessloggen. Den 7 juli publicerades versionen freenginx 1.31.3, som innehÄller denna fix.
Den 15 juli blev dessa commits adopterade av nginx (1 (github.com), 2 (github.com), 3 (github.com), av nÄgon anledning i omvÀnd ordning mellan den andra och den tredje i kedjan), problemet tilldelades CVE-2026-42533, och F5 slÀppte en officiell SA (f5.com).
AngĂ„ende den specifika sĂ„rbarheten denna gĂ„ng: den uppstĂ„r nĂ€r man anvĂ€nder map-direktiv med regex som har matchande parametrar. BetrĂ€ffande de andra nödvĂ€ndiga villkoren för att den ska utlösas skiljer sig texten i commitbeskrivningen och texten i SA nĂ„got: i SA anges att det senare bör ske en berĂ€kning av en specifik strĂ€ng som anvĂ€nder den matchade parametern frĂ„n map, tidigare Ă€n resultatet av samma map. I commitbeskrivningen ingĂ„r det dessutom en nollstĂ€llning av en variabel som innehĂ„ller den matchade parametern mellan dessa steg. Hur som helst kommer sĂ„dana situationer troligtvis inte att finnas i de flesta körda nginx:er, och dĂ€rmed har sĂ„rbarheten pĂ„verkat fĂ„. Det Ă€r ocksĂ„ vĂ€rt att pĂ„peka att det, i de committade Ă€ndringarna, tycks saknas nĂ„gra rĂ€ttelser för berĂ€kning av lĂ€ngden specifikt i detta fall (eller sĂ„ letade jag dĂ„ligt?), det finns bara ett skydd som omvandlar problemet till en kontrollerad felaktig http-förfrĂ„gan. Ăven den 19 juli tillfördes vissa rĂ€ttelser i freenginx.5bfb, 7622, b906) berĂ€kning av lĂ€ngden för en liknande situation, men det Ă€r svĂ„rt att omedelbart avgöra om det Ă€r det eller inte.
SÄrbarheten uppkom i nginx version 0.9.6, och rÀttelserna kom i versionerna freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.
I SA nginx anges tack till ett antal individer för oberoende rapporter om sÄrbarheten och upprÀtthÄllandet av "standarder för samordnad informationslÀmning":
F5 tackar Ming Xuan, DKD (@pidifn), Jiâan Zhou och Zhen Yan frĂ„n AntAISecurityLab, Rafael Gacek, Sergii Negodiuk frĂ„n EVO.company, Lam Jun Rong frĂ„n Calif.io, Mufeed VH frĂ„n Winfunc Research (winfunc.com), Vexera AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin frĂ„n depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin frĂ„n Vodafone TĂŒrkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil) och Milan Jovic (Kljunowsky) för att de oberoende har tagit upp detta problem med oss och följt de högsta standarderna för samordnad informationslĂ€mning.
I freenginx begrÀnsas den tillhörande informationen om rÀttelsen praktiskt taget till meddelandet i commit. I changelog-e Àr denna rÀttelse inte ens markerad med "sÀkerhet" (security) eller "bugfix", utan helt enkelt "tillÀgg" (feature). Förmodligen betraktade författaren inte denna frÄga som kritisk. Hur meddelandena om problemet frÄn de nÀmnda individerna i F5 relaterar till den lÄnade committen frÄn freenginx, och om de (eller nÄgon annan) informerade författaren av freenginx om problemet, gÄr inte att klargöra.
KĂ€lla: linux.org.ru
