- Artikel über die schwerwiegende Sicherheitslücke CVE-2023-38545, die in curl 8.4.0 entdeckt wurde und seit Langem als das gravierendste Sicherheitsproblem in curl gilt
- Das Problem ist ein Heap-Overflow, der durch einen Fehler in der Funktion zum Verbindungsaufbau über einen SOCKS5-Proxy verursacht wird
- Die Schwachstelle wurde Anfang 2020 eingeführt, als die Funktion von einem blockierenden Aufruf in eine nicht blockierende Zustandsmaschine umgewandelt wurde, um die Leistung bei umfangreichen parallelen Übertragungen über SOCKS5 zu verbessern
- Der Fehler befindet sich im
INIT-Zustand der Zustandsmaschine, wo eine lokale Variable gesetzt wird, die bestimmt, ob curl den Host lokal auflöst oder den Namen an den Proxy weitergibt. Ist der Hostname zu lang, wechselt der Code in den Modus für lokale Auflösung, was zu einem Speicherüberlauf führen kann, wenn der Hostname länger ist als der Zielpuffer
- Ein Overflow kann auftreten, wenn die Puffergröße auf weniger als 65541 Byte gesetzt ist und der Hostname länger ist als die Puffergröße. Dafür muss ein Angreifer einen übergroßen Hostnamen in die Formel einspeisen, um den Fehler auszulösen
- Ein Angreifer, der einen HTTPS-Server kontrolliert, auf den ein Client mit libcurl über einen SOCKS5-Proxy zugreift, kann der Anwendung über eine HTTP-30x-Antwort eine manipulierte Weiterleitung zurückgeben und so einen Heap-Buffer-Overflow auslösen
- Das Problem wurde in curl 8.4.0 behoben, indem curl nun einen Fehler zurückgibt, wenn der Hostname zu lang ist, anstatt von entfernter Auflösung auf lokale Auflösung umzuschalten. Außerdem wurde ein dedizierter Testfall für dieses Szenario hinzugefügt
- Der Autor räumt ein, dass dieser Fehler nicht entstanden wäre, wenn curl in einer speichersicheren Sprache statt in C geschrieben worden wäre, betont jedoch, dass eine Portierung von curl in eine andere Sprache derzeit nicht geplant ist
- Der Autor schlägt vor, mehr Abhängigkeiten zuzulassen, zu nutzen und zu unterstützen, die in speichersicheren Sprachen geschrieben sind; dies sei ein praktikabler Ansatz und könnte nach und nach Teile von curl ersetzen
- Der Autor gesteht den Fehler ein und entschuldigt sich; mit einer besseren Testsuite hätte sich die Schwachstelle erkennen lassen. Außerdem erwähnt er statische Codeanalysewerkzeuge, die das Problem in dieser Funktion nicht entdeckt haben
- Abschließend schreibt der Autor, dass das Ausliefern eines Heap-Overflows in Code, der auf mehr als 20 Milliarden Instanzen installiert ist, keine empfehlenswerte Erfahrung ist
1 Kommentare
Hacker-News-Kommentare