Eine Forschergruppe der Universität Turku (Finnland) hat die Ergebnisse ihrer Analyse von Paketen im PyPI-Repository hinsichtlich der Verwendung potenziell gefährlicher Konstruktionen veröffentlicht, die zu Schwachstellen führen können. Bei der Analyse von 197.000 Paketen wurden 749.000 potenzielle Sicherheitsprobleme identifiziert. In 46 % der Pakete gibt es mindestens ein solches Problem. Zu den am häufigsten vorkommenden Problemen gehören Mängel in der Verarbeitung von Ausnahmen und der Einsatz von Konstruktionen, die Code-Einschübe zulassen.
Von den identifizierten 749.000 Problemen wurden 442.000 (41 %) als nicht signifikant, 227.000 (30 %) als Probleme mittlerer Gefährlichkeit und 80.000 (11 %) als gefährlich eingestuft. Einige Pakete stechen aus der Masse hervor und enthalten Tausende von Problemen: Zum Beispiel wurden im Paket PyGGI 2589 Probleme gefunden, die hauptsächlich mit der Verwendung der Konstruktion "try-except-pass" zusammenhängen, während im Paket appengine-sdk 2356 Probleme gefunden wurden. Auch in den Paketen genie.libs.ops, pbcore und genie.libs.parser gibt es eine große Anzahl von Problemen.
Es sollte angemerkt werden, dass die Ergebnisse auf der Grundlage einer automatisierten statischen Analyse erhalten wurden, die den Kontext der Anwendung bestimmter Konstruktionen nicht berücksichtigt. Der Entwickler des Tools Bandit, das zur Durchsuchung des Codes verwendet wurde, äußerte die Meinung, dass aufgrund der vergleichsweise hohen Anzahl an Fehlalarmen die Ergebnisse des Prüfungsverfahrens nicht direkt als Schwachstellen betrachtet werden können, ohne jede einzelne Problemstellung zusätzlich manuell zu überprüfen.
Der Analyzer betrachtet die Verwendung unzuverlässiger Zufallszahlengeneratoren und Hash-Algorithmen wie MD5 als Sicherheitsproblem, während solche Algorithmen im Code für Zwecke verwendet werden können, die die Sicherheit nicht beeinflussen. Der Analyzer betrachtet ebenfalls die Verarbeitung externer Daten in unsicheren Funktionen wie pickle, yaml.load, subprocess und eval als Problem, jedoch ist diese Verwendung nicht zwingend mit der Entstehung von Schwachstellen verbunden, und in der Praxis kann der Einsatz der genannten Funktionen ohne Sicherheitsbedrohung umgesetzt werden.
Zu den in der Studie verwendeten Prüfungen gehören:
- Verwendung potenziell unsicherer Funktionen wie exec, mktemp, eval, mark_safe usw.
- Unsichere Festlegung von Zugriffsrechten für Dateien.
- Anschluss eines Netzwerk-Sockets an alle Netzwerkschnittstellen.
- Verwendung von fest im Code angegebenen Passwörtern und Schlüsseln.
- Verwendung eines vordefinierten temporären Verzeichnisses.
- Verwendung von pass und continue in Catch-All-Style-Fehlerbehandlungsfunktionen.
- Ausführung von Web-Anwendungen auf Basis des Web-Frameworks Flask mit aktiviertem Debugging-Modus.
- Verwendung unsicherer Methoden zur Deserialisierung von Daten.
- Verwendung der Hash-Funktionen MD2, MD4, MD5 und SHA1.
- Verwendung unsicherer Verschlüsselungsmethoden wie DES und unsicherer Verschlüsselungsmodi.
- Verwendung einer unsicheren Implementierung von HTTPSConnection in bestimmten Python-Versionen.
- Angabe des Schemas file:// in urlopen.
- Verwendung von Zufallszahlengeneratoren bei der Durchführung kryptografischer Aufgaben.
- Verwendung des Telnet-Protokolls.
- Verwendung unsicherer XML-Parser.
Zusätzlich kann festgestellt werden, dass im Verzeichnis PyPI 8 bösartige Pakete entdeckt wurden. Vor der Entfernung wurden die problematischen Pakete mehr als 30.000 Mal heruntergeladen. Um bösartige Aktivitäten zu verbergen und Warnungen einfacher statischer Analysatoren zu umgehen, wurde in den Paketen eine Kodierung von Codeblöcken mit Base64 und eine Ausführung nach der Dekodierung über einen eval-Aufruf verwendet.
In den Paketen noblesse, genesisbot, are, suffer, noblesse2 und noblessev2 wurde Code gefunden, der zur Abgreifung von Kreditkartennummern und Passwörtern, die in den Browsern Chrome und Edge gespeichert sind, sowie zur Übertragung von Token aus Anwendungen wie Discord dient und Systemdaten, einschließlich Screenshots des Bildschirminhalts, überträgt. In den Paketen pytagora und pytagora2 gab es die Möglichkeit, externen ausführbaren Code herunterzuladen und auszuführen.
Quelle: opennet.ru
