În freenginx și nginx s-a adăugat verificarea dimensiunii variabilei de text înainte de a scrie date în aceasta (+ CVE)


3

TL;DR: În fața celei de-a treia depășiri a buffer-ului descoperită în 2026 (și, conform F5, RCE dacă nu există ASLR) în timpul procesării cu regex-uri și variabile, dezvoltatorul freenginx Maxim Dunin a decis că este timpul să pună capăt acestui lucru și a adăugat o verificare a dimensiunii variabilei înainte de a scrie date în aceasta. Această inovație a fost preluată și de nginx, ceea ce dă speranța opririi apariției unor noi CVE pe această temă.

Iată detalii.

Pe 19 iunie a fost realizat commit în freenginx, adăugând în descriptorul variabilei un câmp end, care indică sfârșitul buffer-ului. Înainte, acolo era doar un pointer la începutul său (pos), iar lungimea necesară se calcula (și se calculează în continuare) dinainte, iar în momentul copierii datelor în variabilă se presupunea că lungimea calculată corect anterior garantează că datele vor încăpea în buffer. Din păcate, de două ori în mai 2026, din cauza unor neatenții, s-a dovedit că nu este așa (1 (linux.org.ru), 2 (linux.org.ru)), ceea ce a dus la depășiri de buffer și consecințe nefaste. Ei bine, acum, la crearea buffer-ului variabilei, este completat și pointerul la sfârșitul acesteia, iar înainte de a scrie date în variabilă, dacă datele nu încap, procesarea solicitării va fi controlat încheiat cu o eroare. Așadar, erorile de calcul al lungimii pot exista în continuare, dar acum nu vor afecta memoria, ci vor eșua doar o solicitare http specifică. Următoarele commit-uri (2 (freenginx.org), 3 (freenginx.org)) au adăugat o protecție similară și în alte părți ale codului, inclusiv în codul de gestionare a jurnalelor de acces. Pe 7 iulie, a fost publicată versiunea freenginx 1.31.3, care include această corecție.

Pe 15 iulie, aceste commit-uri au fost împrumutate de nginx (1 (github.com), 2 (github.com), 3 (github.com), inexplicabil, a schimbat ordinea celui de-al doilea și al treilea în lanț), problemei i-a fost atribuită CVE-2026-42533, iar F5 a lansat un SA (f5.com).

Referitor la vulnerabilitatea specifică de data aceasta: aceasta se manifestă atunci când se utilizează directiva map cu regex-uri și parametrii extragţi. În ceea ce privește celelalte condiții necesare pentru activarea acesteia, textul din descrierea commit-ului și textul din SA diferă puțin: în SA se precizează că ar trebui să existe o calculare a unei anumite stringuri, care utilizează parametrul extras de la map, înainte de rezultatul acestui map. În descrierea commit-ului, în exemplul între aceste etape, intervine și resetarea variabilei care conține parametrul extras. Oricum, în majoritatea serverelor nginx rulate, este puțin probabil ca un astfel de lucru să fie întâlnit, iar vulnerabilitatea astfel afectează puțini utilizatori. De asemenea, merită menționat că în modificările commit-ului, nu pare să existe o corectare a calculării lungimii specifice în acest caz (sau poate că am căutat prost?), există doar o protecție care transformă problema într-o eroare controlată a cererii http. Deși pe 19 iulie în freenginx au fost adăugate anumite corecturi (5bfb, 7622, b906) pentru calcularea lungimii pentru o situație similară, dar nu se poate înțelege imediat dacă este sau nu acesta.

Vulnerabilitatea a apărut în versiunea nginx 0.9.6, corecturile au fost incluse în versiunile freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.

În SA nginx sunt menționate mulțumiri pentru câțiva oameni pentru rapoartele independente despre vulnerabilitate și respectarea «standardelor de divulgare coordonată»:

F5 îi recunoaște pe Ming Xuan, DKD (@pidifn), Ji’an Zhou, și Zhen Yan de la AntAISecurityLab, Rafael Gacek, Sergii Negodiuk de la EVO.company, Lam Jun Rong de la Calif.io, Mufeed VH de la Winfunc Research (winfunc.com), Vexera AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin de la depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin de la Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil), și Milan Jovic (Kljunowsky) pentru că au adus această problemă în atenția noastră în mod independent și pentru urmarea celor mai înalte standarde de divulgare coordonată.

În freenginx, informațiile însoțitoare despre corecturile efectuate se limitează de fapt la mesajul din commit. În changelog-ul acesta, corectura nu este marcată nici cu semnătura „securitate” (security), nici „corectare” (bugfix), ci doar „adăugare” (feature). Probabil, autorul nu a considerat această problemă critică. Cum se corelează rapoartele de problemă de la persoanele menționate în F5 și commit-ul împrumutat din freenginx, dacă ei (sau altcineva) au informat despre problemă autorul freenginx, nu a fost posibil de stabilit.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster