Buffer-overloop in curl en libcurl, die optreedt bij toegang via SOCKS5-proxy

In de tool voor het ophalen en verzenden van gegevens via het netwerk curl en de gelijktijdig ontwikkelende bibliotheek libcurl is een kwetsbaarheid (CVE-2023-38545) ontdekt die kan leiden tot een buffer-overflow en potentieel tot het uitvoeren van kwaadaardige code aan de clientzijde wanneer met de curl-tool of een applicatie die libcurl gebruikt verbinding wordt gemaakt met een HTTPS-server die gecontroleerd wordt door een aanvaller. Het probleem doet zich alleen voor wanneer toegang via een SOCKS5-proxy in curl is ingeschakeld. Bij rechtstreekse toegang zonder proxy treedt de kwetsbaarheid niet op. De kwetsbaarheid is verholpen in de release van curl 8.4.0. De onderzoeker die de fout ontdekte, ontving een beloning van $4660 in het kader van het Internet Bug Bounty-initiatief op Hackerone.

De kwetsbaarheid is het gevolg van een fout in de code voor het oplossen van de hostnaam voordat verbinding wordt gemaakt met de SOCKS5-proxy. Bij een hostnaam van maximaal 256 tekens wordt de naam direct door curl naar de SOCKS5-proxy verzonden voor oplossing aan zijn kant, en als de naam langer is dan 255 tekens, schakelt het over naar de lokale resolver en verzendt het al een bepaald adres naar de SOCKS5. Door een fout in de code kon de vlag die aangeeft dat lokale oplossing nodig is, tijdens het trage onderhandelen van de verbinding via SOCKS5 niet goed worden ingesteld, waardoor een lange hostnaam in een buffer werd geschreven die was bedoeld voor het bewaren IP-adressen of een naam die niet langer is dan 255 tekens.

De eigenaar van de website waarmee curl verbinding maakt via de SOCKS5-proxy kan een buffer-overflow aan de clientzijde initieren door in antwoord een verzoek omleidingcode (HTTP 30x) te retourneren en in de header "Location:" een URL te plaatsen met een hostnaam waarvan de grootte ligt tussen 16 en 64 KB (de waarde van 16 KB is bepaald door de minimale grootte die nodig is voor het overschrijden van de toegewezen buffer, en de waarde van 65 KB is gerelateerd aan de maximaal toegestane lengte van een hostnaam in een URL). Als in de instellingen van libcurl verzoekomleidingen zijn toegestaan en de gebruikte SOCKS5-proxy voldoende langzaam is, zal de lange hostnaam in een kleine buffer worden geschreven die opzettelijk van een kleinere grootte is.

De kwetsbaarheid heeft voornamelijk invloed op toepassingen die op libcurl zijn gebouwd en manifesteert zich in de curl-tool alleen wanneer de optie "—limit-rate" wordt gebruikt met een waarde van minder dan 65541 — in libcurl wordt standaard een buffer van 16 KB toegewezen, terwijl in de curl-tool 100 KB wordt toegewezen, maar deze grootte varieert afhankelijk van de waarde van de parameter "—limit-rate."

Daniel Stenberg, de auteur van het project, vermeldde dat de kwetsbaarheid onopgemerkt was gebleven gedurende 1315 dagen. Er werd ook opgemerkt dat 41% van de eerder ontdekte kwetsbaarheden in curl waarschijnlijk had kunnen worden vermeden als curl was geschreven in een taal die veilige geheugenbehandeling waarborgt, maar er zijn op korte termijn geen plannen om curl naar een andere taal over te schrijven. Als maatregelen om de beveiliging van de codebasis te verbeteren, wordt voorgesteld om de testtools voor de code uit te breiden en afhankelijkheden, geschreven in programmeertalen die veilige geheugenbehandeling bieden, actiever te gebruiken. Ook wordt overwogen om geleidelijk delen van curl te vervangen door varianten die zijn geschreven in veilige talen, zoals de experimentele HTTP-backend Hyper, geïmplementeerd in de taal Rust.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster