Sonntag, 10. Juli 2011

urllib/urllib2 Sicherheitslücke behoben

Guido van Rossum hat kürzlich einen Fix für CVE-2011-1521 gepusht, das ein Sicherheitsproblem in den URL-Bibliotheken von Python beschreibt. Obwohl Sicherheitslücken selten sind, ist dies eine gute Gelegenheit, um über den Prozess hinter dem Berichten, Behandeln und Beheben von Problemen zu informieren, wenn sie denn entstehen.

Problem berichten

Wenn Du eine Sicherheitslücke in CPython entdeckt hast, dann bitten wir Dich zuerst darum die Details vertraulich zu behandeln. Nachdem Du festgestellt hast, dass Du ein echtes Sicherheitsproblem gefunden hast, ist es am wichtigsten dein Wissen an die Kernentwickler weiterzugeben, indem Du einen prägnanten, aber detaillierten Bericht erstellst.

Ein guter Bericht erklärt, wie die relevanten Teile des Systems von dem Problem betroffen sind. Es ist auch hilfreich zu wissen, ob das Problem auf einer bestimmten Plattform oder wegen einer Abhängigkeit auftritt. Es ist nützlich die betroffenen Versionen zu wissen und es ist wahrscheinlich, dass alle aktuellen Releases auf die Schwachstelle hin überprüft werden. Zu guter Letzt: Wenn Du einen Testfall für das Problem hast, dann stelle sicher, dass Du ihn beifügst. Deinen Bericht solltest du an security@python.org schicken.

Niels Heinen vom Google Security Team hat kürzlich einen guten Bericht eingereicht. Er entdeckte ein Problem mit der HTTP 302-Umleitungsbehandlung in den urllib- und urllib2-Modulen der Standardbibliothek. Er fand heraus, dass ein Server Requests auf unpassende Schemata umleiten konnte und so Situationen erzeugten, die Systeme oder Daten kompromittieren könnten. In seinem ersten Bericht, erklärt Niels zwei Szenarien, in denen Weiterleitungen Probleme aufdecken könnten.

Da urlib/urllib2 einen Handler für das file:// URL-Schema anbietet, könnte eine Weiterleitung nach file:///etc/passwd Passwort-Daten preisgeben. Niels erklärte weiterhin, dass eine Weiterleitung auf ein Systemgerät wie file:///dev/zero zu Erschöpfung von Ressourcen und damit zu einem Denial of Service führen könnte.

Handhabung von Berichten

Aufgrund der sensiblen Natur von Sicherheitslücken, wird die security@python.org-Mailingliste von einer kleinen Gruppe vertrauenswürdiger Entwickler betreut, die Berichte analysieren und so schnell wie möglich auf sie reagieren. Wenn Du deine Kommunikation mit der Liste verschlüsseln willst, findest du auf der Security News-Seite die OpenPGP-Details.

Wenn die Gruppe feststellt, dass es wirklich eine Sicherheitslücke gibt, kann ein öffentlicher Fehlerbericht mit einem beigefügten Patch erstellt werden. In diesem Fall machte Guido van Rossum das Problem mit Issue #11662 öffentlich, inklusive erstem Patch.

Beheben des Problems

Guidos Patch schränkt die Weiterleitung auf die URL-Schemata http://, https:// und ftp:// ein. FTP-Weiterleitung wurde für akzeptabel befunden und es ist in der Tat eine häufige Weiterleitung: Spiegel-Server für Downloads leiten manchmal an geographisch passende FTP-Server weiter.

In Python 2.x verursacht die redirect_internal-Methode von FancyURLopener nun einen IOError, wenn eine Weiterleitung an ein ungeeignetes Schema angefragt wird, genauso wie http_error_302 von HTTPRedirectHandler, nur ist es hier ein HTTPError. In Python 3 wurde urllib.request entsprechend repariert. Zusammen mit dem Patch gibt es zwei Tests, die sowohl die Weiterleitung zu passenden wie zu unpassenden Schemata testen.

Was die Weiterleitung an Nutzer angeht, so wird bald das letzte Sicherheits-Release von Python 2.5 veröffentlicht. Obwohl noch keine Termine für die Wartungszweige -- 2.6, 2.7, 3.1 und 3.2 -- festgelegt sind, bekamen alle den Code um die Lücke zu schließen.

Englische Version

Keine Kommentare:

Kommentar posten