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

05 Jun 2026 15:45 UTC

Атака на ланцюг постачання Miasma поширюється через черв’як Phantom Gyp

Author Photo
SOC Prime Team linkedin icon Стежити
Атака на ланцюг постачання Miasma поширюється через черв’як Phantom Gyp
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Нова версія черв’яка Miasma поширюється через екосистему npm, зловживаючи шкідливим binding.gyp файлом, що запускає виконання коду під час npm install. Цей метод обходить багато традиційних перевірок скриптів, завантажує альтернативну середу виконання Bun, краде облікові дані CI/CD та хмари і надсилає зібрані дані на обліковий запис GitHub, що виступає як сховище. Понад 57 пакетів було скомпрометовано під час бурхливої кампанії, що розгорнулась менш ніж за дві години 3 червня 2026 року. Черв’як також встановлює бекдори в конфігураційні файли AI кодасистента.

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

Дослідники відтворили інцидент в підтвердженому GitHub Actions runner і захопили повний процес виконання, мережевий трафік і артефакти коду, задіяні в атаці. Їх аналіз виявив техніку Phantom Gyp, чотириетапний ланцюг зашифрованих корисних навантажень і використання Bun для уникнення виявлення, зосередженого лише на поведінці Node.js. Крадіжка облікових даних здійснювалася шляхом читання пам’яті запуску та запитів до кінцевих точок метаданих хмарного інстанса. Вилучення потім відбувалося через запити до автентифікованого GitHub API на шкідливий акаунт, який динамічно створював репозиторії для збереження викрадених даних.

Пом’якшення

Захисники повинні зменшити ризик шляхом блокування етапів нативного складання, вимкнення node-gyp де це можливо, або ігнорування скриптів встановлення в середовищах з високим ризиком. Вікна зниження активності реєстру та перевірка підписів SLSA можуть також допомогти обмежити фальсифікацію пакетів. Команди безпеки повинні стежити за несподіваними завантаженнями Bun, занадто великими файлами кореневого index.js і створенням нових репозиторіїв GitHub за допомогою токенів, виданих CI. Будь-які виявлені токени чи облікові дані хмари повинні бути негайно змінені.

Відповідь

Організації повинні виявляти binding.gyp файли, які містять такі шаблони, як <!(node index.js ...), сигналізувати про завантаження середовища виконання Bun і як тільки підтверджена шкідлива активність, зупиняти уражений робочий процес. Репозиторії повинні бути проскановані на ін’єкцію конфігураційних файлів AI асистента і швидко очищені. Усі викрадені токени повинні бути відкликані та змінені, повноваження CI/CD перевірені, а також розпочате повне розслідування інциденту для визначення обсягу викритих облікових даних.

Потік атаки

Ми ще оновлюємо цю частину. Підпишіться, щоб отримати сповіщення

Повідомити мені

Виявлення

Віддалене завантаження/вивантаження файлів через стандартні інструменти (через cmdline)

Команда SOC Prime
05 червня 2026

Скрипт для Linux створено у тимчасових папках (через file_event)

Команда SOC Prime
05 червня 2026

Схований файл був створений на Linux-хості (через file_event)

Команда SOC Prime
05 червня 2026

IOCs (HashSha256), щоб виявити: Атака на постачальний ланцюг Miasma npm: самопоширювальний черв’як за допомогою Phantom Gyp

AI Правила від SOC Prime
05 червня 2026

IOCs (HashMd5), щоб виявити: Атака на постачальний ланцюг Miasma npm: самопоширювальний черв’як за допомогою Phantom Gyp

AI Правила від SOC Prime
05 червня 2026

Виявлення атаки на постачальний ланцюг Miasma npm [Мережеві індикатори]

AI Правила від SOC Prime
05 червня 2026

Виявлення атаки на постачальний ланцюг Miasma npm за допомогою техніки Phantom Gyp [Створення процесу в Linux]

AI Правила від SOC Prime
05 червня 2026

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

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

Підстава: Цей розділ детально описує точний хід техніки (TTP) нападника, призначеної для активації правила виявлення. Команди та наратив мусіть безпосередньо відображати ідентифіковані TTPs і прагнути до генерації точної телеметрії, яку очікує логіка виявлення.

  • Наратив і команди атаки:
    Зловмисник компрометує пакет npm з відкритим кодом, додаючи шкідливий binding.gyp. Коли розробник запускає npm install, процес збірки пакету викликає node-gyp rebuild. Всередині створеного скрипту побудови зловмисник:

    1. Завантажує середовище виконання Bun (підписаний бінарний файл) за допомогою curl в тимчасову директорію (/tmp/b-<rand>/).
    2. Підвищує права викликом sudo python3 для розпакування zip і розміщення бінарного файлу у /usr/local/bin.
    3. Збирає токен розробника на GitHub використовуючи gh auth token.
    4. Виконує шкідливе навантаження (bun run /tmp/p1764ajw42rg.js) яке вилучає дані.

    Кожен крок з’являється в логах створення процесу, задовольняючи список Sigma rule’s.

  • Сценарій регресійного тесту: Наступний Bash скрипт відтворює точну послідовність команд в контрольованому лабораторному середовищі.

    # miasma_phantom_gyp_simulation.sh
    set -euo pipefail
    
    # 1. Підготувати підроблений пакет npm зі шкідливим binding.gyp
    PKG_DIR=$(mktemp -d /tmp/miasma_pkg.XXXX)
    cd "$PKG_DIR"
    npm init -y >/dev/null 2>&1
    cat > binding.gyp <<'EOF'
    {
      "targets": [
        {
          "target_name": "evil",
          "sources": [ "evil.c" ]
        }
      ]
    }
    EOF
    echo "int main(){return 0;}" > evil.c
    # Встановити node‑gyp локально
    npm install node-gyp >/dev/null 2>&1
    
    # 2. Запустити node‑gyp rebuild (перший індикатор)
    ./node_modules/.bin/node-gyp rebuild
    
    # 3. Завантажити середовище виконання Bun (другий індикатор)
    TMPDIR=$(mktemp -d /tmp/b-XXXXXX)
    curl -sSL "https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/bun-linux-x64-baseline.zip" -o "$TMPDIR/bun.zip"
    
    # 4. Підвищити права за допомогою sudo python3 щоб розпакувати (третій індикатор)
    sudo python3 - <<PYTHON
    import zipfile, sys, os
    zip_path = os.getenv('TMPDIR') + '/bun.zip'
    with zipfile.ZipFile(zip_path, 'r') as z:
    z.extractall(os.getenv('TMPDIR'))
    PYTHON
    
    # 5. Отримати токен GitHub (четвертий індикатор)
    # Зауваження: Для цього потрібно встановити GitHub CLI і пройти попередню аутентифікацію.
    gh auth token > "$TMPDIR/gh_token.txt"
    
    # 6. Виконати шкідливе навантаження за допомогою Bun (п'ятий індикатор)
    # Створити підроблене JS навантаження
    echo "console.log('exfiltrated');" > "$TMPDIR/p1764ajw42rg.js"
    "$TMPDIR/bun" run "$TMPDIR/p1764ajw42rg.js"
    
    echo "Симуляція завершена. Перевірте ваш SIEM на згенеровані тривоги."
  • Команди очищення: Видалити тимчасові артефакти і реверсувати артефакти підвищення привілеїв.

    # cleanup_miasma_simulation.sh
    set -euo pipefail
    
    # Видалити тимчасові директорії
    rm -rf "$PKG_DIR" "$TMPDIR"
    
    # Опціонально видалити встановлений бінарний файл Bun з /usr/local/bin, якщо його там розміщено
    if command -v bun >/dev/null; then
        sudo rm -f "$(command -v bun)"
    fi
    
    # Очистити будь-які захоплені токени GitHub
    shred -u "$HOME/.config/gh/hosts.yml" 2>/dev/null || true
    
    echo "Очищення завершено."