Een kwetsbaarheid in hoe curl HTTP/2-uploads afhandelt stelt een kwaadwillende server die een upload ontvangt in staat het geheugen van de client te corrumperen. De onderzoeker die het rapporteerde zette dat om in code-executie op de uploadende machine.
Het curl-project verholp het op 14 oktober in curl 8.23.0. Overname van een client vereist exacte kennis van hoe die gebouwd is en van de geheugenindeling; curl verwacht dat een echte aanval eerder in een crash zal eindigen.
De fout, een use-after-free die is geregistreerd als CVE-2026-92392, treft curl en libcurl versies 8.12.0 tot en met 8.22.0, zowel de commandoregeltool als de bibliotheek die veel andere programma’s voor transfers gebruiken. curl classificeert de kwetsbaarheid als High op zijn eigen vier-niveauschaal, de eerste High-ernstige fout sinds de SOCKS5-heap overflow van oktober 2023. Het project versnelde zijn releasetijd met twee weken om de fix te kunnen uitbrengen.
De aanval wordt vanaf de serverzijde uitgevoerd. De client moet een bestand van ongeveer 135 KB uploaden via HTTP/2 naar een door de aanvaller beheerde server, en het certificaat van die server moet de checks van de client passeren. libcurl onderhandelt standaard HTTP/2 voor https://-URL’s wanneer de server het aanbiedt, en de bibliotheek moet met HTTP/2-ondersteuning zijn gebouwd.
De fout is aanwezig sinds curl 8.12.0, uitgebracht in februari 2025. Er zijn geen publieke meldingen van misbruik in het wild. Het rapport van de onderzoeker op HackerOne, met het kwaadaardige server-script en een Docker-container die de code-executie zou reproduceren, werd op 14 oktober publiek gemaakt samen met het advisory.
Wat te installeren, en wat te doen tot die tijd
Werk bij naar 8.23.0 of pas de fix-commit toe op een lokale build. curl’s machine-leesbare advisory vermeldt ook gefixeerde versies op drie oudere branches, en het project zei dat het bijgewerkte Rock-solid curl-releases (de long-term-supportlijn voor klanten met supportcontracten) in lijn met 8.23.0 uit zal brengen:
- curl en libcurl 8.12.0 tot en met 8.22.0: upgrade naar 8.23.0
- 8.14.x-branch: 8.14.3
- 8.16.x-branch: 8.16.2
- 8.20.x-branch: 8.20.2
- Debian 13 (trixie): 8.14.1-2+deb13u7 tot en met DSA-6558-1, volgens Debian’s tracker. Debian 12 (bookworm) bevat de kwetsbare code niet.
De release repareert in totaal 24 CVE’s. De overige 23 zijn geclassificeerd als Low.
Als je nog niet kunt updaten, is het advies van curl om geen HTTP/2 te gebruiken. De optie –http1.1 vraagt de tool HTTP/1.1 te gebruiken, en applicaties zetten CURLOPT_HTTP_VERSION op CURL_HTTP_VERSION_1_1. In de curl-documentatie wordt die instelling een verzoek genoemd, omdat een bestaande verbinding met een andere versie hergebruikt kan worden.
HTTP/2-ondersteuning in libcurl is een build-optie. Een build zonder die ondersteuning kan geen HTTP/2 onderhandelen en kan dus niet het uploadpad bereiken dat in het advisory wordt beschreven.
Hoe een vijandige server de bug omzet in code-executie
Daniel Stenberg, curl’s hoofdontwikkelaar, verklaarde de bug in een bericht dat tegelijk met de release werd gepubliceerd, en het openbare rapport beschrijft het codepad. HTTP/2 vervoert meerdere transfers over één verbinding, en libcurl houdt elke transfer bij met een object dat het een easy handle noemt.
Tijdens een upload laat de server de transfer stagneren door het HTTP/2-window op nul te zetten, een deel van de response terug te geven en vervolgens de stream te resetten terwijl de verbinding open blijft. curl behandelt die reset als een reden om te proberen opnieuw te versturen.
Bij het opruimen vertelt curl eerst aan de HTTP/2-laag dat de transfer is voltooid, en spoelt daarna de rest van de niet-verzonden upload door op dezelfde verbinding. Zonder geregistreerde transfer worden die overgebleven bytes als een nieuw verzoek gelezen. Het regelpatroon dat de onderzoeker in het geüploade bestand opneemt laat ze als request-lines lijken. Als dat gebeurt, wordt een nieuwe stream geopend die een pointer naar de easy handle opslaat.
De herhaalpoging voltooit via een nieuwe HTTP/1.1-verbinding, en de applicatie geeft de handle vrij. De oude verbinding houdt echter nog die pointer vast en gebruikt die wanneer de server een frame op die stream stuurt, wat kan gebeuren terwijl het programma afsluit.
In het exploit van de onderzoeker belandt data die de server stuurt in het geheugen dat de vrijgegeven handle gebruikte. Een uitgaand verzoek lekt lokale adressen, die de server nodig heeft om address space layout randomization (ASLR) te omzeilen. Een functiepointer in dat geheugen wordt met bytes van de server overschreven, en curl roept die daarna aan.
Voor code-executie moet de aanvaller de exacte curl-versie, architectuur, libc-allocator en heapindeling van het doel kennen, twee parallelle transfers in de juiste timing houden, en de payload in ongeveer 23 bytes passen, aldus curl’s advisory. “De meest waarschijnlijke uitkomst van een poging tot aanval is eerder gewoon een crash,” schreef Stenberg en schatte de kans op succes als klein. Daarom kwalificeerde curl de fout als High in plaats van Critical.
curl gebruikt vier ernstniveaus en publiceert geen CVSS-score. De National Vulnerability Database had het record nog niet geanalyseerd op 14 oktober.
De fix is een herschikking van zes regels in lib/multi.c door Stefan Eissing. De HTTP/2-laag geeft nu pas zijn verwijzingen naar de handle op nadat de overgebleven uploaddata zijn weggespoeld, niet ervoor.
Het rapport bereikte curl op 15 september via HackerOne, en het securityteam bevestigde het binnen enkele uren, volgens Stenberg. Op 7 oktober kondigde het project vooraf een High-ernstige fix aan voor de volgende release en verkortte daarmee de cyclus van acht naar zes weken.
curl schrijft de vondst toe aan “Luna with Claude, Anthropic.” Stenberg noemt de melder bij naam als Luna Tong van Anthropic, zegt dat de vondst via het nieuwe OSS Scanner van het bedrijf binnenkwam en veronderstelt dat hun AI-modellen betrokken waren.
Anthropic maakte OSS Scanner op 8 oktober openbaar als een opt-in dienst die ingeschreven open-sourceprojecten met zijn modellen scant en de resultaten per e-mail verzendt zonder menselijke review, elk rapport met een reproducerende test en, indien beschikbaar, een kandidaatpatch. Het curl-rapport kwam drie weken voordat die publieke lancering plaatsvond. In Anthropics aankondiging citeerde men Stenberg die zei dat de scanner “een van de ergste curl-kwetsbaarheden in de afgelopen jaren” had ontdekt, zonder specifieke naam te noemen.
Dezelfde beheerder schreef in juli 2025 dat ongeveer een vijfde van de securitymeldingen dat jaar wat hij “AI slop” noemde waren, en dat slechts ongeveer één op de twintig daadwerkelijk echt bleek.
curl heeft meerdere jaren besteed aan het verminderen van het aantal interne pointers naar handles ten gunste van identifiers die alleen bij behoefte worden opgezocht, schreef Stenberg, maar dat garandeert geen bescherming tegen een andere use-after-free. curl noemt de bug een fout die een geheugenveilige taal waarschijnlijk vermeden zou hebben, en het project is niet van plan curl in zo’n taal te herschrijven.
