Sie sind hier: Home » Aktuelle Meldungen » Meldung
Meldung Nr: RUS-CERT-949

[Generic/Python] Schwachstellen im Marshalling-Code
(2002-09-02 20:08:38.99279+00) Druckversion

Quelle: http://cert.uni-stuttgart.de/archive/bugtraq/2002/07/msg00189.html

Python-Programme, die über von Python bereitgestellte Marshalling-Verfahren Daten einlesen, interpretieren bestimmte Eingaben als Programmcode.

Betroffene Systeme

  • Systeme, die Python verwenden.

Einfallstor
Der Angreifer muß in der Lage sein, Marshalling-Daten an eine Python-Anwendung zu übermitteln.

Auswirkung
Marshalling-Daten können Programmcode enthalten, der vom Python-Interpreter ausgeführt wird.

Typ der Verwundbarkeit
design flaw

Gefahrenpotential
hoch bis sehr hoch (abhängig von der Python-Anwendung, auf die mit dieser Schwachstelle ein Angriff durchgeführt wird)
(Hinweise zur Einstufung des Gefahrenpotentials.)

Kontext
Marshalling ist ein Verfahren, bei dem Datenstrukturen in eine Darstellung als Bytefolge überführt werden. Diese Bytefolge kann dann in Dateien gespeichert, übertragen usw. werden. Der Empfänger macht den Marshalling-Vorgang wieder rückgängig und gewinnt damit die Datenstrukturen zurück.

Python bietet zwei Marshalling-Verfahren an: Das Modul marshal implementiert eine plattformabhängige Variante (bei der auch Objekte gespeichert werden können, die Programmcode enthalten), pickle implementiert eine plattformunabhängige Variante, die direkt keine Code-Objekte speichern kann. (Daneben existiert noch cPickle, eine schnellere Reimplementierung von pickle in C.)

Beschreibung
Bei der Umkehr des Marshalling-Vorgangs durch pickle kann ein speziell gestalteter Eingabestrom dazu führen, daß beliebiger Code durch den Python-Prozeß ausgeführt wird. Bislang sind zwei unterschiedliche Angriffe bekannt:

  • Versionen vor Python 2.0 verwendeten eval, um Zeichenketten im Eingabestrom zu interpretieren; dadurch können diese Daten beliebige Python-Funktionen (z.B. os.system) aufrufen.

  • Versionen vor Python 2.2 führen beim Aufrufen von Konstruktoren für Objekte keine Prüfung durch, ob die aufzurufenden Funktionen überhaupt Konstruktoren sind (os.system ließe sich z.B. auch als Konstruktor verwenden) oder ob durch die Konstruktion unerwünschte Seiteneffekte auftreten.

In Python 2.2 sind zwar beide Schwachstellen behoben worden; dennoch sollte nicht davon ausgegangen werden, daß mit marshal oder pickle/cPickle Daten (und nicht Programmcode) aus nicht vertrauenswürdiger Quelle sicher geladen werden kann.

Dem RUS-CERT ist keine Anwendung bekannt, bei der tatsächlich über diese Schwachstelle Angriffe durchgeführt werden können.

Gegenmaßnahmen

  • Verzicht auf den Einsatz von Marshalling zum Einlesen von Daten aus nicht vertrauenswerter Quelle.

(fw)

Hinweis
Die in diesem Text enthaltene Information wurde für die Mitglieder der Universität Stuttgart recherchiert und zusammengestellt. Die Universität Stuttgart übernimmt keinerlei Haftung für die Inhalte. Dieser Artikel darf ausschließlich in unveränderter Form und nur zusammen mit diesem Hinweis sowie dem folgenden Copyrightverweis veröffentlicht werden. Eine Veröffentlichung unter diesen Bedingungen an anderer Stelle ist ausdrücklich gestattet.

Copyright © 2017 RUS-CERT, Universität Stuttgart, https://cert.uni-stuttgart.de/

Vorherige Meldung Weitere Meldungen... Nächste Meldung

Bitte lesen Sie auch die Grundsätze, nach denen das RUS-CERT Tickermeldungen veröffentlicht. Der regelmäßige Bezug von Tickermeldungen über E-Mail und RSS-Feed ist ebenfalls möglich.