Ultralytics-AI-Pwn-Request-Supply-Chain-Angriff
11. Dezember 2024
0 Min. LesezeitDer ultralytics-Supply-Chain-Angriff erfolgte zwischen dem 4. und 7. Dezember 2024 in zwei klar abgegrenzten Phasen. In der ersten Phase wurden zwei schädliche Versionen auf PyPI veröffentlicht: Version 8.3.41 erschien am 4. Dezember um 20:51 UTC und war etwa 12 Stunden lang verfügbar, bis sie am 5. Dezember um 09:15 UTC entfernt wurde. Version 8.3.42 wurde kurz darauf, am 5. Dezember um 12:47 UTC, veröffentlicht und war etwa eine Stunde lang verfügbar, bevor sie um 13:47 UTC entfernt wurde.
Die zweite Phase ereignete sich am 7. Dezember, als der Angreifer zwei weitere schädliche Versionen direkt auf PyPI veröffentlichte und GitHub Actions vollständig umging. Version 8.3.45 wurde um 01:41 UTC veröffentlicht und war etwa 8 Stunden lang bis 10:08 UTC verfügbar. Version 8.3.46 erschien um 02:27 UTC und war etwa 7,5 Stunden lang bis zu ihrer Entfernung um 10:09 UTC verfügbar.
Der Angriff wurde zunächst über mehrere Kanäle erkannt, darunter das automatisierte Missbrauchserkennungssystem von Google Colab, das bereits wenige Stunden nach der ersten Veröffentlichung einer schädlichen Version verdächtige Aktivitäten meldete. Nutzerinnen und Nutzer verschiedener Projekte berichteten von ungewöhnlichen CPU-Auslastungsmustern, und Paket-Maintainer stellten Abweichungen zwischen dem GitHub-Repository und den PyPI-Releases fest.
Die Chronologie des Exploits
2024-06-04 Erster Commit des Snyk GitHub Actions Scanners
Link: https://github.com/snyk-labs/github-actions-scanner
2024-08-14 Adnan Khan meldet GHSA-7x29-qqmq-v6qc an die Ultralytics-Maintainer – Schwachstelle durch Template-Injection
Link: https://github.com/ultralytics/actions/security/advisories/GHSA-7x29-qqmq-v6q
2024-08-14 v0.0.3 von ultralytics/actions mit Behebung von GHSA-7x29-qqmq-v6qc veröffentlicht
Link: https://github.com/ultralytics/actions/security/advisories/GHSA-7x29-qqmq-v6qc
2024-08-24 v0.0.24 von ultralytics/actions führt die Schwachstelle mit Commit c1365ce erneut ein
2024-12-03 22:28:49 @jiwuwgknvm beginnt mit Experimenten für einen als Waffe eingesetzten Angriff
2024-12-03 22:33:47 @jiwuwgknvm reicht PR #17984 ein (inzwischen gelöscht), der einen Token-Stealer in run.sh enthält
2024-12-04 19:33:00 @openimbot reicht PR #18018 mit Template-Injection ein
Link: https://github.com/ultralytics/ultralytics/pull/18018
2024-12-04 19:57:00 @openimbot reicht PR #18020 mit einer anderen Template-Injection ein
Link: https://github.com/ultralytics/ultralytics/pull/18020
2024-12-04 20:50:00 Release v8.3.41 wird von @UltralyticsAssistant ausgelöst
2024-12-04 20:51:12 Release v8.3.41 auf PyPI erstellt
2024-12-04 23:46:00 Google-Colab-Issue #4979 gemeldet – Konto wegen Kryptomining gesperrt
Link: https://github.com/googlecolab/colabtools/issues/4979
2024-12-05 05:34:00 Issue #18027 eröffnet – Abweichung bei PyPI gemeldet
Link: https://github.com/ultralytics/ultralytics/issues/18027
2024-12-05 05:35:00 ComfyUI-Issue #843 eröffnet – Meldung zu Kryptomining
Link: https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/843
2024-12-05 07:50:00 Issue #18030 eröffnet – 100 % CPU-Auslastung
Link: https://github.com/ultralytics/ultralytics/issues/18030
2024-12-05 09:15:06 v8.3.41 von PyPI entfernt (nach etwa 12 Stunden)
2024-12-05 09:39:00 Comic-translate-Issue #184 eröffnet – Meldung zu Mining
Link: https://github.com/ogkalu2/comic-translate/issues/184
2024-12-05 12:46:00 Release v8.3.42 wird von @glenn-jocher ausgelöst
2024-12-05 12:47:29 v8.3.42 auf PyPI erstellt
2024-12-05 13:47:30 v8.3.42 von PyPI entfernt (nach etwa 1 Stunde)
2024-12-05 15:17:00 @glenn-jocher gibt bekannt, dass @openimbot bei Ultralytics gesperrt wurde
2024-12-06 19:51:00 AdvancedLivePortrait-WebUI-Issue #19 eröffnet – Sicherheitswarnung
Link: https://github.com/jhj0517/AdvancedLivePortrait-WebUI/issues/19
2024-12-07 01:41:45 v8.3.45 direkt auf PyPI veröffentlicht (ohne CI/CD)
2024-12-07 02:27:14 v8.3.46 direkt auf PyPI veröffentlicht (ohne CI/CD)
2024-12-07 04:00:00 Adnan Khan gibt bekannt, dass v8.3.45 und v8.3.46 schädlich sind
2024-12-07 10:08:32 v8.3.45 von PyPI entfernt (nach etwa 8 Stunden)
2024-12-07 10:09:08 v8.3.46 von PyPI entfernt (nach etwa 7,5 Stunden)
Ein Kryptowährungsangriff zum Schürfen von Monero
Die schädlichen Versionen von ultralytics enthielten eine Payload zum Schürfen von Kryptowährungen, die unbemerkt im Hintergrund laufen und erhebliche Systemressourcen beanspruchen sollte. Der Miner war eine Implementierung von XMRig, die speziell für das Schürfen der Kryptowährung Monero konfiguriert war. Die Malware war so ausgefeilt, dass sie die automatisierten Missbrauchserkennungssysteme von Google Colab auslöste. Infolgedessen wurden die Konten einiger Nutzerinnen und Nutzer aufgrund der für Mining typischen hohen CPU-Auslastung vorübergehend gesperrt.
Der Miner wurde durch Änderungen an zwei wichtigen Funktionen in das Paket eingeschleust: safe_download und safe_run. In der ersten Phase wurde ein clientseitiger Downloader in die Funktion safe_download eingefügt, um die eigentliche Mining-Payload abzurufen. Die Funktion safe_run wurde so geändert, dass sie den Miner im Hintergrund ausführte und dessen Ressourcenverbrauch vor beiläufiger Beobachtung zu verbergen versuchte. Die für das Schürfen von Kryptowährungen erforderliche hohe CPU-Auslastung machte die Malware jedoch für viele Nutzerinnen und Nutzer erkennbar.
So bereiten Sie sich auf die Behebung des Ultralytics-Vorfalls vor
Prüfen Sie, ob Ihre Python-Abhängigkeit betroffen ist
Zeiträume der betroffenen Versionen:
v8.3.41: 2024-12-04 20:51 UTC bis 2024-12-05 09:15 UTC (etwa 12 Stunden)
v8.3.42: 2024-12-05 12:47 UTC bis 2024-12-05 13:47 UTC (etwa 1 Stunde)
v8.3.45: 2024-12-07 01:41 UTC bis 2024-12-07 10:08 UTC (etwa 8 Stunden)
v8.3.46: 2024-12-07 02:27 UTC bis 2024-12-07 10:09 UTC (etwa 7,5 Stunden)
So prüfen Sie, ob Sie betroffen sind:
Prüfen Sie die
pip install-Protokolle für diese ZeiträumePrüfen Sie Ihre aktuelle Version:
pip show ultralyticsPrüfen Sie die Systemprotokolle für diese Zeiträume auf ungewöhnliche CPU-Aktivität
Prüfen Sie, ob in diesen Zeiträumen automatisierte Builds oder CI/CD-Läufe stattgefunden haben
Projekte, die bekanntermaßen von Ultralytics abhängen
Ultralytics ist eine KI-Bibliothek, die im Python-Ökosystem für KI und maschinelles Lernen weit verbreitet ist, insbesondere für Aufgaben der Computer Vision. Zu den bekannten Projekten zählen:
ComfyUI: Nutzt YOLOv8 für die Objekterkennung in zahlreichen beliebten Custom Nodes. Das Projekt hat sich hier zur Situation geäußert.
Comic-Translate: Nutzt YOLO-Modelle zur Texterkennung
Roboflow: Integration von YOLOv8 zur Objekterkennung
Viele weitere Stable-Diffusion-Tools und Web-UIs
Der Supply-Chain-Angriff auf ultralytics/actions erklärt
Der Angriff nutzte eine ausgefeilte Kette von Schwachstellen in GitHub Actions aus und zielte mit einer als Template-Injection über den Branch-Namen bekannten Technik gezielt auf das Workflow-Automatisierungssystem. Der Angriff lief im Detail wie folgt ab:
Der ursprüngliche Angriff erfolgte über zwei schädliche Pull Requests (PR #18018 und PR #18020), die vom Konto @openimbot eingereicht wurden. Diese PRs nutzten eine Schwachstelle im Workflow format.yml aus, der einen unsicheren pull_request_target-Trigger mit nicht maskierten Template-Ausdrücken kombinierte.
Der Angriff verlief in mehreren Schritten:
Der Angreifer erstellte einen Branch mit einem sorgfältig konstruierten Namen, der Shell-Befehle enthielt:
Als der Workflow diesen Branch-Namen verarbeitete, wurde der Template-Ausdruck aufgrund der folgenden anfälligen Zeile direkt im Shell-Kontext expandiert:
Der expandierte Befehl lud ein schädliches Shell-Skript herunter und führte es aus. Dieses Skript:
Exfiltrierte GitHub-Tokens und Geheimnisse
Manipulierte den von setup-python verwendeten pip-Cache
Änderte Release-Distributionen, um den Kryptowährungs-Miner einzuschleusen
Stahl möglicherweise PyPI-API-Zugangsdaten
Die Schwachstelle war besonders wirksam, weil eine benutzerdefinierte Action in ultralytics/actions ausgenutzt wurde, die ein zuvor behobenes Sicherheitsproblem erneut eingeführt hatte.
Scannen mit Snyk Open Source
Die Schwachstellendatenbank und die CLI-Tools von Snyk können Ihnen dabei helfen festzustellen, ob Sie eine kompromittierte Version des Ultralytics-Pakets verwenden. Sie können außerdem dazu dienen, Open-Source-Projekte zu testen. So scannen Sie Ihr Projekt:
1. Installieren Sie die Snyk CLI:
2. Authentifizieren Sie sich bei Snyk:
3. Scannen Sie Ihr Python-Projekt:
So finden Sie heraus, ob Sie eine der bekannten schädlichen Versionen (8.3.41, 8.3.42, 8.3.45 oder 8.3.46) des Ultralytics-Pakets verwenden. Außerdem werden Ihre Abhängigkeiten auf weitere potenzielle Schwachstellen geprüft.
Nutzen Sie den Snyk GitHub Actions Scanner in Ihrem DevSecOps-Toolkit
Der Snyk GitHub Actions Scanner ist ein Open-Source-Tool, mit dem sich anfällige GitHub-Actions-Konfigurationen erkennen lassen, wie sie bei diesem Vorfall ausgenutzt wurden. Das Tool ist kein offizielles Snyk-Produkt, aber eine wertvolle Ergänzung Ihres DevSecOps-Toolkits.
So verwenden Sie den Scanner:
1. Klonen Sie das Repository und installieren Sie die Abhängigkeiten:
2. Richten Sie Ihr GitHub-Token ein:
3. Scannen Sie ein Repository:
Der Scanner sucht nach mehreren kritischen Problemen, darunter:
PWN_REQUEST: Erkennt Workflows, die pull_request_target verwenden und zugleich Branches von Pull Requests auschecken – genau die Schwachstelle, die bei diesem Vorfall ausgenutzt wurde. Das ist gefährlich, weil pull_request_target mit den Repository-Geheimnissen ausgeführt wird, aber von nicht vertrauenswürdigen externen Mitwirkenden ausgelöst werden kann.
CMD_EXEC: Erkennt nicht maskierte Template-Ausdrücke wie
${{ }}in run-Direktiven, die zu Command Injection führen können.
Für einen umfassenderen Scan, der referenzierte Actions prüft:
Dabei werden referenzierte Actions bis zu einer Tiefe von fünf Ebenen geprüft, um Schwachstellen in Ihrer gesamten Action-Kette zu erkennen.
KI-Sicherheitsrisiken und Supply-Chain-Sicherheit
Der Vorfall mit ultralytics reiht sich in die lange Liste der Sicherheitsverletzungen in Open-Source-Supply-Chains ein. Sowohl npm als auch die PyPI-Registries sind von Malware-Angriffen betroffen, die häufig auf Kryptowährungen abzielen. Oft führen die Ursachen zurück zu Sicherheitspraktiken der Maintainer und einer sicheren Projektkonfiguration. Dieser GitHub-Actions-Angriff zeigt, wie wichtig es ist, bewährte Sicherheitspraktiken konsequent einzuhalten.
KI-Sicherheitsrisiken beschränken sich nicht auf Vorfälle in Open-Source-Supply-Chains, sondern betreffen auch das maschinelle Lernen und Modell-Registries. Bedrohungen wie Remote Code Execution können Entwicklerinnen und Entwickler über Schwachstellen in Deep-Learning-Dateiformaten und unsicheren, KI-generierten Code, den Entwicklerinnen und Entwickler häufig mithilfe von LLMs einsetzen treffen.
Erfahren Sie, wie Sie mit Snyk KI-generierten Code absichern.
Gestalten Sie mit Snyk die Zukunft von Coding-Assistenten
Erfahren Sie mehr über Coding-Assistenten und wie Sie diese Tools in Entwicklungs-Workflows integrieren.
