Beliebte Python-Bibliothek urllib3 von einer Denial-of-Service-Sicherheitslücke betroffen
Hayley Denbraver
9. März 2020
0 Min. LesezeitUrllib3, ein leistungsstarker und beliebter HTTP-Client für Python, ist von einer neu entdeckten Denial-of-Service-Sicherheitslücke betroffen. Urllib3 kommt im gesamten Python-Ökosystem zum Einsatz – mehr als 1.200 Pakete führen es als Abhängigkeit auf, darunter beliebte Pakete wie requests, selenium, kubernetes und weitere. Wenn Sie ein Python-Projekt haben, verwenden Sie mit hoher Wahrscheinlichkeit urllib3.
Im vergangenen Jahr haben wir über eine CRLF-Injection-Sicherheitslücke in urllib3 berichtet.
Denial-of-Service-Sicherheitslücke
In Version 1.25.2 wurde Logik hinzugefügt, um in util/url.py ungültige Zeichen im Anfrageziel per Percent-Encoding zu kodieren. Die Methode _encode_invalid_chars ermöglicht in ihrer vorliegenden Form einen Denial-of-Service-Angriff. Das Array percent_encodings enthält alle Treffer von Percent-Encoding-Sequenzen. Es werden keine Duplikate entfernt. Für eine URL der Länge N wächst die Größe von percent_encodings linear. Der nächste Schritt (die Normalisierung bereits per Percent-Encoding kodierter Bytes) benötigt für jede Percent-Encoding-Sequenz ebenfalls eine lineare Laufzeit. Dadurch ergibt sich eine polynomiale Laufzeit (O(n2)). Diese Ineffizienz könnte gezielt ausgenutzt werden, um CPU-Ressourcen zu beanspruchen und so einen Denial-of-Service-Angriff auszulösen. Würden Duplikate aus percent_encodings entfernt, entspräche die Berechnungszeit von _encode_invalid_chars der effizienteren linearen Laufzeit.
Die anfällige Methode wurde in Version 1.25.8 aktualisiert, um effizienter zu arbeiten. Sie ist daher nicht mehr anfällig für diese Denial-of-Service-Sicherheitslücke.
Ist mein Projekt anfällig?
Da urllib3 im Python-Ökosystem weit verbreitet ist, sollten Sie Ihre Python-Projekte überprüfen, um festzustellen, ob Sie anfällige Versionen verwenden. Aktualisieren Sie zur Behebung des Problems urllib3 auf die aktuelle Version 1.25.8. Da viele Python-Pakete von urllib3 abhängen, ist die Sicherheitslücke wahrscheinlich als indirekte Abhängigkeit in Ihrem Projekt vorhanden. Je nach direkter Abhängigkeit ist ein Upgrade möglicherweise nicht in jedem Fall möglich.
Mit Snyk können Sie Ihre Python-Abhängigkeiten ganz einfach überprüfen. Unser kostenloser Tarif umfasst unbegrenzte Scans für Open-Source-Projekte und 200 Scans pro Monat für private Repositories. Vor Kurzem hat Snyk den Support für Python in Snyk Open Source verbessert. So können Entwickler Sicherheitslücken in Abhängigkeiten mithilfe automatisierter Pull Requests mit Korrekturen beheben. Scannen Sie Ihr Projekt noch heute!
Snyk liebt Python
Bei Snyk lieben wir Open Source und möchten dazu beitragen, dass es so gesund wie möglich bleibt. Deshalb berichten wir über neue Sicherheitslücken – nicht, weil die Pakete schlecht sind (das sind sie nicht), sondern weil wir Entwickler dabei unterstützen möchten, Open-Source-Software sicher zu verwenden. Wir möchten auch allen helfen, die neue Sicherheitslücken entdecken, diese verantwortungsvoll zu melden. Sie können Sicherheitslücken, die Sie gefunden haben, oder solche, die in der Snyk Vulnerability Database fehlen, melden. Wir helfen Ihnen dabei, die Sicherheitslücke zu überprüfen und den Maintainer zu kontaktieren. Weitere Informationen finden Sie hier.
Starten Sie mit Capture-the-Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.
