Pufferüberlauf in Curl und Libcurl, der sich beim Zugriff über einen SOCKS5-Proxy manifestiert

Im Dienstprogramm zum Empfangen und Senden von Daten über das Curl-Netzwerk und in der parallel entwickelten Bibliothek libcurl wurde eine Schwachstelle (CVE-2023-38545) identifiziert, die zu einem Pufferüberlauf und möglicherweise zur Ausführung von Angreifercode führen kann von der Clientseite, wenn der Zugriff über das Dienstprogramm „curl“ oder eine Anwendung mit „libcurl“ erfolgt, an einen vom Angreifer kontrollierten HTTPS-Server. Das Problem tritt nur auf, wenn in Curl der Zugriff über einen SOCKS5-Proxy aktiviert ist. Beim direkten Zugriff ohne Proxy tritt die Schwachstelle nicht auf. Die Sicherheitslücke wurde in der Version Curl 8.4.0 behoben. Der Sicherheitsforscher, der den Fehler entdeckte, erhielt im Rahmen der Internet Bug Bounty-Initiative von Hackerone eine Belohnung von 4660 US-Dollar.

Die Sicherheitslücke wird durch einen Fehler im Hostnamen-Auflösungscode vor dem Zugriff auf den SOCKS5-Proxy verursacht. Wenn der Hostname bis zu 256 Zeichen lang ist, übergibt Curl den Namen sofort zur Auflösung auf seiner Seite an den SOCKS5-Proxy. Wenn der Name mehr als 255 Zeichen umfasst, wechselt er zum lokalen Resolver und übergibt die bereits definierte Adresse an SOCKS5 . Aufgrund eines Fehlers im Code konnte das Flag, das die Notwendigkeit einer lokalen Auflösung angibt, während der langsamen Aushandlung einer Verbindung über SOCKS5 auf den falschen Wert gesetzt werden, was zur Aufzeichnung eines langen Hostnamens in einem mit der Erwartung zugewiesenen Puffer führte Speicherung der IP-Adresse oder des Namens, maximal 255 Zeichen.

Der Besitzer einer Site, auf die Curl über einen SOCKS5-Proxy zugreift, kann einen clientseitigen Pufferüberlauf auslösen, indem er einen Anforderungsumleitungscode (HTTP 30x) zurückgibt und den „Location:“-Header auf eine URL mit einem Hostnamen im Bereich von 16 setzt auf 64 KB (16 KB ist die Mindestgröße, die zum Überlaufen des zugewiesenen Puffers erforderlich ist, und 65 KB ist die maximal zulässige Hostnamenlänge in einer URL). Wenn die Anforderungsumleitung in den libcurl-Einstellungen aktiviert ist und der verwendete SOCKS5-Proxy langsam genug ist, wird der lange Hostname in einen kleinen Puffer geschrieben, der natürlich kleiner ist.

Die Sicherheitslücke betrifft hauptsächlich Anwendungen, die auf libcurl basieren, und tritt im Curl-Dienstprogramm nur auf, wenn die Option „--limit-rate“ mit einem Wert kleiner als 65541 verwendet wird – libcurl weist standardmäßig einen Puffer mit einer Größe von 16 KB zu, und im Curl-Dienstprogramm Es beträgt 100 KB, die Größe ändert sich jedoch je nach Wert des Parameters „-limit-rate“.

Daniel Stenberg, der Autor des Projekts, erwähnte, dass die Schwachstelle 1315 Tage lang unentdeckt blieb. Außerdem heißt es, dass 41 % der zuvor identifizierten Schwachstellen in Curl wahrscheinlich hätten vermieden werden können, wenn Curl in einer speichersicheren Sprache geschrieben worden wäre, es gibt jedoch keine Pläne, Curl in absehbarer Zukunft in eine andere Sprache umzuschreiben. Als Maßnahmen zur Verbesserung der Sicherheit der Codebasis wird vorgeschlagen, die Tools zum Testen von Code zu erweitern und in Programmiersprachen geschriebene Abhängigkeiten, die einen sicheren Betrieb mit dem Speicher gewährleisten, aktiver zu nutzen. Es wird auch die Möglichkeit in Betracht gezogen, Teile von Curl nach und nach durch Optionen zu ersetzen, die in sicheren Sprachen geschrieben sind, wie beispielsweise das in Rust implementierte experimentelle Hyper-HTTP-Backend.

Source: opennet.ru

Kommentar hinzufügen