Skip to main content

Schwachstelle in NumPy ermöglicht die Ausführung beliebigen Codes

Artikel von
Headshot of Hayley Denbraver

Hayley Denbraver

NumPy Arbitrary Code Execution Vulnerability small

5. Februar 2019

0 Min. Lesezeit

Eine kürzlich entdeckte Schwachstelle in NumPy, dem weit verbreiteten Open-Source-Paket für wissenschaftliches Rechnen mit Python, ermöglicht die Ausführung beliebigen, potenziell schädlichen Codes.

NumPy

NumPy ist Teil des SciPy-Ökosystems, einer Sammlung von Open-Source-Softwarepaketen für Mathematik, Naturwissenschaften und Ingenieurwesen. NumPy wird sowohl in der Industrie als auch in der Wissenschaft eingesetzt und hat über 9.000 Sterne auf GitHub sowie mehr als 700 Mitwirkende. Den über PyPIs BigQuery verfügbaren Daten zufolge wurde NumPy in den letzten drei Monaten fast 4 Millionen Mal heruntergeladen.

Die Schwachstelle

Am 16. Januar 2019 eröffnete der GitHub-Nutzer nanshihui ein Issue und wies darauf hin, dass die Funktion numpy.load aufgrund ihrer Verwendung des Python-pickle-Moduls anfällig für die Ausführung beliebigen Codes ist. Das Python-pickle-Modul serialisiert und deserialisiert Python-Objekte. Beim „Pickling“ wird die Python-Objekthierarchie in einen Bytestrom umgewandelt; beim „Unpickling“ wird ein Bytestrom wieder in eine Objekthierarchie umgewandelt. Es ist gefährlich, gepickelte Arrays aus nicht vertrauenswürdigen Quellen zu akzeptieren, da sie sich vor dem Unpickling nicht überprüfen lassen. Werden bösartige Shellcode-Daten als Eingabe bereitgestellt, können sie beim Unpickling ausgeführt werden.

Die Schwachstelle ist in NumPy-Versionen ab 1.10 (veröffentlicht im Oktober 2015) bis einschließlich der neuesten Version 1.16 vorhanden. Weitere Informationen zu dieser Schwachstelle finden Sie hier in der Datenbank von Snyk.

In den betroffenen NumPy-Versionen ist standardmäßig zugelassen, gepickelte Objekt-Arrays zu laden. Dies sollte nur bei vertrauenswürdigen Quellen geschehen, ist aber als Standardverhalten eine schlechte Praxis.

Derzeit sind keine Fälle bekannt, in denen diese Schwachstelle ausgenutzt wurde. Das könnte sich jedoch ändern, wenn das Problem bekannter wird. Für den Exploit ist weder eine Authentifizierung noch umfassendes technisches Wissen erforderlich.

Zum Zeitpunkt der Veröffentlichung dieses Artikels waren weder ein Patch noch ein Upgrade verfügbar; das NumPy-Team arbeitet jedoch daran. Sie können sicherstellen, dass Sie nicht betroffen sind, indem Sie allow_pickle=False an jede Instanz von numpy.load übergeben, die Daten aus einer nicht vertrauenswürdigen Quelle lädt.

Sind Sie betroffen?

Wenn Sie Snyk nutzen, werden Sie im Rahmen Ihrer regulären Benachrichtigungen informiert, falls Ihre Projekte anfällige NumPy-Abhängigkeiten enthalten.

Falls Sie Snyk noch nicht ausprobiert haben, testen Sie unsere benutzerfreundliche Oberfläche oder verwenden Sie unsere CLI, um Tests lokal auszuführen.