Bufferoverloop in curl en libcurl, manifesteert zich bij toegang via een SOCKS5-proxy

Er is een kwetsbaarheid (CVE-2023-38545) geïdentificeerd in het hulpprogramma voor het ontvangen en verzenden van gegevens via het curl-netwerk en de libcurl-bibliotheek, die parallel wordt ontwikkeld, wat kan leiden tot een bufferoverloop en mogelijk de uitvoering van aanvallercode op de clientzijde wanneer toegang wordt verkregen via het curl-hulpprogramma of een toepassing die libcurl gebruikt, naar een HTTPS-server die wordt beheerd door de aanvaller. Het probleem treedt alleen op als toegang via een SOCKS5-proxy in krul is ingeschakeld. Bij rechtstreekse toegang zonder proxy treedt de kwetsbaarheid niet op. Het beveiligingslek is opgelost in curl 8.4.0-release. De beveiligingsonderzoeker die de bug ontdekte, ontving een beloning van $ 4660 als onderdeel van Hackerone's Internet Bug Bounty-initiatief.

Het beveiligingslek wordt veroorzaakt door een fout in de resolutiecode van de hostnaam voordat toegang wordt verkregen tot de SOCKS5-proxy. Als de hostnaam maximaal 256 tekens lang is, geeft curl de naam onmiddellijk door aan de SOCKS5-proxy voor resolutie aan zijn kant, en als de naam meer dan 255 tekens bevat, schakelt hij over naar de lokale resolutie en geeft het reeds gedefinieerde adres door aan SOCKS5 . Als gevolg van een fout in de code kon de vlag die de noodzaak van lokale resolutie aangeeft, op de verkeerde waarde worden ingesteld tijdens de langzame onderhandeling van een verbinding via SOCKS5, wat leidde tot de opname van een lange hostnaam in een buffer die was toegewezen met de verwachting van het opslaan van het IP-adres of de naam, niet meer dan 255 tekens.

De eigenaar van een site waartoe curl via een SOCKS5-proxy toegang heeft, kan een bufferoverflow aan de clientzijde activeren door een verzoekomleidingscode (HTTP 30x) te retourneren en de header 'Location:' in te stellen op een URL met een hostnaam in het bereik van 16 tot en met tot 64 KB (16 KB is de minimaal vereiste grootte om de toegewezen buffer te overlopen, en 65 KB is de maximaal toegestane hostnaamlengte in een URL). Als verzoekomleiding is ingeschakeld in de libcurl-instellingen en de gebruikte SOCKS5-proxy langzaam genoeg is, wordt de lange hostnaam naar een kleine buffer geschreven, uiteraard van kleinere omvang.

Het beveiligingslek treft voornamelijk toepassingen die zijn gebaseerd op libcurl en verschijnt alleen in het curl-hulpprogramma wanneer de optie “--limit-rate” wordt gebruikt met een waarde kleiner dan 65541 - libcurl wijst standaard een buffer toe van 16 KB groot, en in het curl-hulpprogramma het is 100 KB, maar de grootte verandert afhankelijk van de waarde van de parameter “-limit-rate”.

Daniel Stenberg, de auteur van het project, zei dat de kwetsbaarheid 1315 dagen onopgemerkt bleef. Er staat ook dat 41% van de eerder geïdentificeerde kwetsbaarheden in curl waarschijnlijk voorkomen hadden kunnen worden als curl in een geheugenveilige taal was geschreven, maar er zijn geen plannen om curl in de nabije toekomst in een andere taal te herschrijven. Als maatregelen om de beveiliging van de codebasis te verbeteren, wordt voorgesteld om de tools voor het testen van code uit te breiden en actiever gebruik te maken van afhankelijkheden geschreven in programmeertalen die een veilige werking met geheugen garanderen. Het overweegt ook de mogelijkheid om delen van curl geleidelijk te vervangen door varianten die in veilige talen zijn geschreven, zoals de experimentele Hyper HTTP-backend geïmplementeerd in Rust.

Bron: opennet.ru

Voeg een reactie