Pufferüberlauf in curl und libcurl, der bei der Nutzung über SOCKS5-Proxy auftritt.

In dem Tool zur Datenübertragung über das Netzwerk curl und der parallel entwickelten Bibliothek libcurl wurde eine Sicherheitsanfälligkeit (CVE-2023-38545) entdeckt, die zu einem Buffer Overflow führen kann und potenziell die Ausführung von Angreifer-Code auf der Client-Seite ermöglicht, wenn das Tool curl oder eine Anwendung, die libcurl nutzt, auf einen von einem Angreifer kontrollierten HTTPS-Server zugreift. Das Problem tritt nur auf, wenn der SOCKS5-Proxizugang in curl aktiviert ist. Bei direktem Zugriff ohne Proxy zeigt sich die Verwundbarkeit nicht. Die Sicherheitsanfälligkeit wurde in der Version curl 8.4.0 behoben. Der Sicherheitsforscher, der den Fehler entdeckt hat, erhielt eine Belohnung in Höhe von 4.660 $ im Rahmen der Internet Bug Bounty Initiative auf Hackerone.

Die Schwachstelle entsteht durch einen Fehler im Code der Hostnamen-Resolution, bevor eine Verbindung zum SOCKS5-Proxy hergestellt wird. Bei einer Hostnamenlänge von bis zu 256 Zeichen übergibt curl den Namen sofort an den SOCKS5-Proxy zur Auflösung auf dessen Seite. Bei einem Namen, der länger als 255 Zeichen ist, wird jedoch auf den lokalen Resolver umgeschaltet und eine bereits bestimmte Adresse an den SOCKS5 übergeben. Aufgrund eines Fehlers im Code konnte das Flag, das auf die Notwendigkeit der lokalen Auflösung hinweist, während der langsamen Verbindungsaushandlung über SOCKS5 mit einem falschen Wert gesetzt werden, was dazu führte, dass der lange Hostname in einen für die Speicherung ausgelegten Puffer geschrieben wurde. IP-Adressen oder eines Namens, der 255 Zeichen nicht überschreitet.

Der Website-Besitzer, auf den curl über einen SOCKS5-Proxy zugreift, kann einen Buffer Overflow auf der Client-Seite initiieren, indem er einen Redirect-Code (HTTP 30x) zurückgibt und im Header "Location:" eine URL mit einem Hostnamen angibt, dessen Größe zwischen 16 und 64 KB liegt (die 16 KB ergeben sich aus der minimalen Größe, die notwendig ist, um den zugewiesenen Puffer zu überlaufen, während die 65 KB mit der maximal erlaubten Länge eines Hostnamens in einer URL zusammenhängen). Wenn in den libcurl-Einstellungen Redirects aktiviert sind und der verwendete SOCKS5-Proxy ausreichend langsam ist, wird der lange Hostname in einen kleinen Puffer geschrieben, der absichtlich kleiner ist.

Die Schwachstelle betrifft hauptsächlich Anwendungen, die auf libcurl basieren, und tritt in der curl-Utility nur beim Einsatz der Option "—limit-rate" mit einem Wert unter 65541 auf – in libcurl wird standardmäßig ein Puffer mit einer Größe von 16 KB zugewiesen, während in der curl-Utility 100 KB verwendet werden; diese Größe ändert sich jedoch je nach Wert des Parameters "—limit-rate".

Daniel Stenberg, der Autor des Projekts, erwähnte, dass die Sicherheitsanfälligkeit 1315 Tage unentdeckt blieb. Es wurde auch festgestellt, dass 41 % der zuvor identifizierten Sicherheitsanfälligkeiten in curl wahrscheinlich vermieden werden könnten, wenn curl in einer Programmiersprache geschrieben wäre, die sicheren Umgang mit Speicher gewährleistet. Allerdings ist nicht geplant, curl in naher Zukunft in eine andere Sprache umzuschreiben. Um die Sicherheit der Codebasis zu erhöhen, wird vorgeschlagen, die Testwerkzeuge zu erweitern und verstärkt Abhängigkeiten zu nutzen, die in Programmiersprachen geschrieben sind, die sicheren Umgang mit Speicher gewährleisten. Zudem wird die schrittweise Ersetzung von Teilen von curl durch Alternativen in Betracht gezogen, die in sicheren Sprachen wie dem experimentellen HTTP-Backend Hyper, das in Rust implementiert wurde, geschrieben sind.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster