picklescan ist eine beliebte Open-Source-Bibliothek für Python, die entwickelt wurde, um Schwachstellen im Zusammenhang mit unsicherer Deserialisierung im Python-pickle-Format zu erkennen und zu verhindern. Sie wird häufig in Machine Learning (ML)- und Künstliche Intelligenz (KI)-Pipelines eingesetzt, um vortrainierte Modelle vor dem Laden auf bösartigen Code zu scannen, und spielt eine entscheidende Rolle als Sicherheitskontrolle im MLOps-Lebenszyklus. Jede Anwendung, die serialisierte Daten aus nicht vertrauenswürdigen Quellen verarbeitet, kann sich auf dieses Tool verlassen, um sich zu schützen.
Die Auswirkungen dieser Schwachstelle sind kritisch. Sie stellt eine vollständige Umgehung des Sicherheitsmechanismus des Scanners dar und macht ihn wirkungslos. Ein Angreifer kann eine bösartige Datei erstellen, die das Tool fälschlicherweise als „sicher“ zertifiziert. Sobald diese von einer nachgelagerten Anwendung geladen wird, führt dies zur nicht authentifizierten Remote Code Execution (RCE).
Es ist öffentlicher Exploit-Code für diese Schwachstelle verfügbar, und angesichts der Tatsache, dass es sich um die Umgehung einer Sicherheitskontrolle handelt, ist eine aktive Ausnutzung sehr wahrscheinlich. Jede Organisation, die anfällige Versionen von picklescan verwendet, um nicht vertrauenswürdige Dateien zu bereinigen – insbesondere solche, die ML-Modelle von Drittanbietern einbinden –, ist einem unmittelbaren Risiko einer Systemkompromittierung ausgesetzt.
| Produkt | picklescan |
| Datum | 05.12.2025 12:14:05 |
Technische Zusammenfassung
Die Schwachstelle beruht auf einer unzureichenden Prüfung gefährlicher Module und Funktionen innerhalb der unsafe_globals-Validierungslogik. Die Hauptursache ist eine CWE-183: Permissive Regular Expression (oder ein ähnlicher logischer Fehler), bei der der Scanner einen exakten String-Vergleich mit einer Blockliste bekannter gefährlicher Module (z. B. „asyncio“, „subprocess“) durchführt, jedoch die Untermodule dieser Pakete nicht rekursiv überprüft.
Die Angriffskette sieht wie folgt aus:
- Ein Angreifer erstellt eine bösartige Pickle-Datei, die einen Payload enthält, der eine gefährliche Funktion aus einem Untermodul eines blockierten Pakets aufruft (z. B. asyncio.unix_events anstelle des übergeordneten Pakets asyncio).
- Die anfällige Version von picklescan analysiert die Datei. Ihr Scanner vergleicht das Modul „asyncio.unix_events“ mit seiner internen Blockliste.
- Da die Blockliste nur den exakten Eintrag „asyncio“ enthält, findet die Prüfung keine Übereinstimmung, und picklescan meldet die bösartige Datei fälschlicherweise als sicher.
- Eine nachgelagerte Anwendung vertraut der Ausgabe des Scanners und lädt die Pickle-Datei über
pickle.load(). - Der Python-Deserialisierer führt den eingebetteten Payload aus und gewährt dem Angreifer die willkürliche Ausführung von Code mit den Berechtigungen des Anwendungsprozesses.
Betroffene Versionen:
- Versionen von picklescan 0.0.30 und früher sind anfällig.
Ein konzeptionelles Beispiel für die fehlerhafte Logik:
# Fehlerhafte Logik (konzeptionell)
def is_dangerous(module_name):
blocklist = {"os", "subprocess", "asyncio"}
return module_name in blocklist # Schlägt bei "os.path" fehl
# Korrigierte Logik (konzeptionell)
def is_dangerous_fixed(module_name):
blocklist = {"os", "subprocess", "asyncio"}
# Prüft, ob das Modul oder eines seiner übergeordneten Pakete in der Blockliste steht
parts = module_name.split('.')
for i in range(len(parts)):
sub_module = ".".join(parts[:i+1])
if sub_module in blocklist:
return True
return False
Diese Umgehung untergräbt die Sicherheitsgarantie der Bibliothek vollständig und ermöglicht es einem erfahrenen Angreifer, das System vollständig zu kompromittieren.
Empfehlungen
- Sofortiges Patchen: Aktualisieren Sie die Bibliothek
picklescanauf eine Version nach 0.0.30. Alle früheren Versionen gelten als anfällig. - Abhilfemaßnahmen: Wenn ein sofortiges Patchen nicht möglich ist, behandeln Sie alle Dateien, die von anfälligen Versionen von
picklescangescannt wurden, als nicht vertrauenswürdig. Die effektivste Maßnahme ist das Deaktivieren des automatischen Ladens von Pickle-Dateien oder ML-Modellen aus nicht verifizierten oder nicht vertrauenswürdigen Quellen. - Hunting und Überwachung:
- Scannen Sie alle vorhandenen Pickle-Dateien und ML-Modelle in der Umgebung erneut mit einer korrigierten Version des Scanners.
- Überwachen Sie Anwendungsprotokolle auf anomales Verhalten, Fehler bei der Deserialisierung oder unerwartete Erstellung von Kindprozessen (z. B. Shells, Reverse Shells) durch Python-Anwendungen, die Pickle-Dateien verarbeiten.
- Analysieren Sie den Netzwerkverkehr auf unerwartete ausgehende Verbindungen von Servern, die ML-Modelle bereitstellen oder Daten verarbeiten.
- Incident Response: Isolieren Sie bei Verdacht auf eine Kompromittierung den betroffenen Host sofort vom Netzwerk, um seitliche Bewegungen (Lateral Movement) zu verhindern. Bewahren Sie die bösartige Datei und die Systemprotokolle für eine forensische Analyse auf. Starten Sie ein Protokoll zur Rotation der Zugangsdaten für alle Dienste, die auf der kompromittierten Maschine ausgeführt werden oder von dieser aus zugänglich sind.
- Defense in Depth: Deserialisieren Sie niemals Daten aus nicht vertrauenswürdigen Quellen. Führen Sie Anwendungen, die externe Daten verarbeiten (wie APIs zum Laden von ML-Modellen), in Sandbox- oder Container-Umgebungen mit minimalen Privilegien und strengen Filtern für den ausgehenden Datenverkehr aus.
[Callforaction-THREAT-Footer]
Leave a Reply