In freenginx en nginx is een controle op de grootte van tekstvariabelen toegevoegd voordat er gegevens in worden geschreven (+ CVE)


3

TL;DR: Toen hij geconfronteerd werd met de derde buffer overflow die in 2026 werd ontdekt (en volgens F5, RCE als ASLR niet aanwezig is) tijdens het werken met regex en variabelen, besloot de ontwikkelaar van freenginx, Maxim Dunin, dat het tijd was om dit te stoppen, en voegde hij een controle van de variabele grootte toe voordat hij gegevens erin schrijft. Dit nieuwe idee werd vervolgens overgenomen door nginx, wat de hoop biedt dat nieuwe CVE's over dit onderwerp zullen verdwijnen.

Hier zijn de details.

Op 19 juni werd er gemaakt commit in freenginx, dat een eindveld toevoegt aan de variabele beschrijving, wat aangeeft waar de buffer eindigt. Eerder was er alleen een aanduiding van het begin (pos), de benodigde lengte werd van tevoren berekend (en wordt nog steeds berekend), en op het moment van kopiƫren van gegevens naar de variabele werd aangenomen dat de eerder correct berekende lengte zou garanderen dat de gegevens in de buffer pasten. Helaas is dit al twee keer in mei 2026 verkeerd gegaan vanwege verschillende omissies (1 (linux.org.ru), 2 (linux.org.ru)), wat leidde tot buffer overflows en slechte gevolgen. Nu, bij het aanmaken van de buffer, wordt ook een aanwijzer naar het einde ervan ingevuld, en voordat gegevens naar de variabele worden geschreven, zal de verwerking van het verzoek gecontroleerd worden beƫindigd met een foutmelding als de gegevens niet in de variabele passen. Dit betekent dat fouten in het berekenen van de lengte nog steeds kunnen voorkomen, maar ze zullen nu niet meer het geheugen aanpakken, maar eenvoudig een specifieke http-verzoek laten falen. In de volgende commits (2 (freenginx.org), 3 (freenginx.org)) werd een vergelijkbare bescherming aan andere delen van de code toegevoegd, inclusief de code voor het bijhouden van de access log. Op 7 juli werd versie freenginx 1.31.3, die deze correctie bevatte, uitgebracht.

Op 15 juli werden deze commits overgenomen door nginx (1 (github.com), 2 (github.com), 3 (github.com), waarbij de tweede en derde in de keten om de een of andere reden omgewisseld zijn), en het probleem kreeg het nummer CVE-2026-42533, en F5 heeft een officiƫle SA (f5.com).

Wat betreft de specifieke kwetsbaarheid dit keer: deze komt voor bij het gebruik van de map-directive met reguliere expressies met geselecteerde parameters. Wat betreft de andere voorwaarden voor het activeren ervan, verschillen de tekst in de commit-beschrijving en de tekst in de SA iets: in de SA is vermeld dat er later een bepaalde string moet worden berekend die gebruikmaakt van de geselecteerde parameter, die is overgebleven van map, eerder dan het resultaat van dezezelfde map. In de beschrijving van de commit is er in het voorbeeld tussen deze stappen ook een reset van de variabele die de geselecteerde parameter bevat. Hoe dan ook, de meeste draaiende nginx-instanties zullen dergelijke situaties waarschijnlijk niet tegenkomen, en de kwetsbaarheid heeft daardoor waarschijnlijk maar weinig mensen geraakt. Het is ook belangrijk op te merken dat het herstel van de lengtemeting specifiek in dit geval in de gecommitteerde wijzigingen lijkt te ontbreken (of heb ik slecht gezocht?), er is alleen bescherming die het probleem omzet in een gecontroleerde HTTP-verzoekfout. Echter, op 19 juli zijn in freenginx enkele correcties toegevoegd (5bfb, 7622, b906) voor de lengtemeting voor een soortgelijke situatie, maar het is niet meteen duidelijk of dit dat is of niet.

De kwetsbaarheid is ontstaan in versie nginx 0.9.6, de correcties zijn opgenomen in freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.

In de SA van nginx worden dankbetuigingen gedaan aan een aantal personen voor onafhankelijke meldingen van de kwetsbaarheid en het naleven van de "standaarden voor gecoƶrdineerde openbaarmaking":

F5 erkent Ming Xuan, DKD (@pidifn), Ji’an Zhou en Zhen Yan van AntAISecurityLab, Rafael Gacek, Sergii Negodiuk van EVO.company, Lam Jun Rong van Calif.io, Mufeed VH van Winfunc Research (winfunc.com), Vexera AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin van depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin van Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil) en Milan Jovic (Kljunowsky) voor het onafhankelijk onder de aandacht brengen van dit probleem en het volgen van de hoogste normen voor gecoƶrdineerde openbaarmaking.

In freenginx wordt de bijbehorende informatie over de correctie feitelijk beperkt tot een melding bij de commit. In changelog- is deze correctie zelfs niet gemarkeerd met het label "beveiliging" (security) of "correctie" (bugfix), maar gewoon "toevoeging" (feature). Vermoedelijk beschouwde de auteur dit probleem niet als kritisch. Hoe de meldingen van het probleem door de genoemde personen in F5 zich verhouden tot de geclaimde commit uit freenginx, en of ze (of iemand anders) het probleem aan de auteur van freenginx hebben gemeld, is niet ontdekt.

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster