TL; DRKohdattuaan kolmannen puskurin ylivuodon vuonna 2026 (ja F5:n mukaan RCE:n, jos ASLR:ää ei ole) työskennellessään säännöllisten lausekkeiden ja muuttujien kanssa, freenginx-kehittäjä Maxim Dunin päätti, että oli aika pysäyttää se ja lisäsi muuttujan koon tarkistuksen tuotteeseensa ennen datan kirjoittamista siihen. Nginx on sittemmin kopioinut tämän ominaisuuden, mikä antaa toivoa siitä, että tähän ongelmaan liittyvät uudet CVE:t poistuvat.
Nyt yksityiskohtiin.
Kesäkuun 19. päivä tehtiin tehdä Freenginxissä, joka lisää muuttujan kuvaajaan loppukentän, joka ilmaisee puskurin lopun. Aiemmin oli vain osoitin sen alkuun (pos), vaadittu pituus laskettiin (ja lasketaan edelleen) etukäteen, ja kun tiedot kopioitiin muuttujaan, oletettiin, että oikein laskettu pituus takaisi tiedon mahtumisen puskuriin. Valitettavasti tämä on jo kahdesti osoittautunut virheelliseksi toukokuussa 2026 erilaisten virheiden vuoksi.1 (linux.org.ru), 2 (linux.org.ru)), mikä johti puskurin ylivuotoihin ja vakaviin seurauksiin. Nyt, kun muuttujan puskuri luodaan, myös osoitin sen loppuun täytetään, ja ennen datan kirjoittamista muuttujaan, jos data ei sovi, pyynnön käsittely päättyy virheeseen hallitusti. Tämä tarkoittaa, että pituuden laskentavirheitä voi silti esiintyä, mutta ne eivät tuhlaa muistia; ne vain epäonnistuvat kyseisessä HTTP-pyynnössä. Seuraavat commitit (2 (freenginx.org), 3 (freenginx.org)) samanlainen suojaus lisättiin koodin muihin osiin, mukaan lukien käyttöoikeuksien lokikoodi. Versio julkaistiin 7. heinäkuuta Freenginx 1.31.3, joka sisältää tämän korjauksen.
nginx poimi nämä commitit 15. heinäkuuta (1 (github.com), 2 (github.com), 3 (github.com), jostain syystä ketjun toisen ja kolmannen vaihtaminen keskenään), tehtävä annettiin CVE-2026-42533ja F5 julkaisi virallisen Etelä-Afrikka (f5.com).
Tämänkertaisesta haavoittuvuudesta: se ilmenee, kun map-direktiiviä käytetään säännöllisten lausekkeiden kanssa, joissa on poimittuja parametreja. Muiden sen laukaisun edellyttämien ehtojen osalta commit-kuvauksen teksti ja SA-teksti eroavat hieman toisistaan: SA toteaa, että seuraavaksi on laskettava tietty merkkijono, joka käyttää mapista jäljelle jäänyttä poimittua parametria ennen saman mapin tulosta. Esimerkin commit-kuvauksessa näiden vaiheiden välillä myös poimitun parametrin sisältävä muuttuja nollataan. Oli miten oli, tämä on epätodennäköistä, että se tapahtuu useimmissa käynnissä olevissa nginxeissä, ja siksi haavoittuvuus vaikutti vain harvoihin ihmisiin. On myös syytä huomata, että korjausta pituuden laskemiseen erityisesti tätä tapausta varten ei ole commit-muokkauksissa (vai etsinkö huonosti?), vaan on vain suojaus, joka muuttaa ongelman hallituksi HTTP-pyynnön epäonnistumiseksi. Vaikka freenginxiin lisättiin joitakin korjauksia 19. heinäkuuta (5bfb, 7622, b906) laskemalla pituutta vastaavassa tilanteessa, mutta ei ole heti selvää, onko näin vai ei.
Haavoittuvuus ilmeni nginx-versiossa 0.9.6, korjaukset sisältyivät versioihin freenginx 1.31.3, nginx 1.30.4 ja nginx 1.31.3.
Nginx SA kiittää useita henkilöitä haavoittuvuuden itsenäisestä ilmoittamisesta ja "koordinoitujen tiedonantostandardien" noudattamisesta:
F5 antaa tunnustusta Ming Xuanille, DKD:lle (@pidifn), Ji'an Zhoulle ja Zhen Yanille AntAISecurityLabista, Rafael Gacekin, Sergii Negodiukin EVO.companysta, Lam Jun Rongin Calif.io:sta, Mufeed VH:lle Winfunc Researchista (winfunc.com), Vexera AI:lle (https://vexera.ai), Tu Tran Dinhille (@1w4y), Stan Shaw'lle (cyberstan), qianshuidewajueji'lle, zennethille (randomguy6407), Zhenpeng (Leo) Linille (depthfirst), Lukas Johannes Moellerille, Melih Tolga Sahinille (Vodafone Türkiye), Ayoub Nabil Boubagratille (GitHub: @ayoubnabil) ja Milan Jovicille (Kljunowsky) siitä, että he toivat tämän asian itsenäisesti tietoomme ja noudattivat koordinoidun tiedottamisen korkeimpia standardeja.
Freenginxissä korjaukseen liittyvät tiedot rajoittuvat itse asiassa commit-viestiin. muutoslokiTätä korjausta ei ole edes merkitty "tietoturvaksi" tai "virheenkorjaukseksi", vaan vain "ominaisuudeksi". Ilmeisesti tekijä ei pitänyt tätä ongelmaa kriittisenä. On mahdotonta määrittää edellä mainittujen F5:ssä raportoitujen ongelmien ja freenginxistä kopioidun commitin välistä yhteyttä tai sitä, ilmoittivatko he (tai joku muu) ongelmasta freenginxin tekijälle.
Lähde: linux.org.ru
