Шкідливий черв’як Shai-Hulud, який спочатку асоціювався переважно з екосистемою npm, вийшов за її межі та був виявлений у центральному репозиторії Java-залежностей Maven Central. Це суттєво розширює поверхню атаки на ланцюжок постачання програмного забезпечення та створює додаткові ризики для розробників, що працюють як з JavaScript, так і з Java.
Поширення Shai-Hulud у Maven Central через mvnpm
Фахівці компанії Socket зафіксували заражений пакет org.mvnpm:posthog-node:4.18.1 у Maven Central. Усередині були виявлені два характерні компоненти Shai-Hulud: завантажувач setup_bun.js та основний пейлоад bun_environment.js — ті самі файли, які застосовувалися у другій хвилі атак в екосистемі npm.
Важлива деталь: компрометації зазнав не «класичний» Java-артефакт, а пакет, автоматично створений за допомогою процесу mvnpm, який трансформує npm-пакети в артефакти Maven. Таким чином, шкідливий код фактично «переїхав» у світ Java через автомірроринг JavaScript-залежностей, що підкреслює вразливість механізмів інтеграції між екосистемами.
Представники Maven Central заявили про впровадження додаткових механізмів блокування повторного пакування раніше скомпрометованих npm-компонентів. Мета — мінімізувати ймовірність подальшого поширення шкідливих артефактів через репозиторій Java.
Shai-Hulud v2: прихована крадіжка секретів і масштаби кампанії
За даними дослідників, проєкт PostHog було скомпрометовано і в npm, і в Maven, причому в усіх випадках використовувався однаковий пейлоад — Shai-Hulud версії 2. Оновлена версія черв’яка стала помітно більш малопомітною та орієнтованою на крадіжку конфіденційних секретів розробників і DevOps-команд, а не лише на деструктивні дії.
Згідно зі звітами компанії Wiz та інших учасників розслідування, станом на 24 листопада 2025 року понад 25 000 репозиторіїв GitHub містили викрадені секрети, а приблизно кожні 30 хвилин з’являлося ще близько 1000 нових репозиторіїв з опублікованими даними. Така динаміка вказує на масштабовану й автоматизовану supply chain атаку.
Технічний аналіз setup_bun.js та bun_environment.js
Експерти Step Security встановили, що шкідливе ПЗ складається з двох ключових файлів. Скрипт setup_bun.js працює як дроппер, маскуючись під інсталятор середовища Bun. Основний функціонал міститься у великому файлі bun_environment.js обсягом близько 10 МБ, який використовує багаторівневу обфускацію.
У коді пейлоада присутня hex-кодована строка з тисячами записів, спеціальний цикл для ускладнення аналізу та обфусцирована функція, що поетапно відновлює кожен фрагмент коду. Такий підхід істотно ускладнює статичний аналіз, знижує ефективність антивірусів і SCA-інструментів (Software Composition Analysis), які організації використовують для контролю залежностей.
Після виконання Shai-Hulud розгортає багатостадійну атаку з фокусом на крадіжці секретів: токенів GitHub і npm, а також облікових даних AWS, Google Cloud і Microsoft Azure. Якщо шкідливий код не може виконати чотири ключові кроки (автентифікація в GitHub, створення репозиторію, виявлення токенів GitHub та npm), він переходить до деструктивної фази та перезаписує вміст домашнього каталогу жертви, що створює ризик повної втрати робочого середовища розробника або CI-агента.
Експлуатація GitHub Actions та помилки конфігурації CI/CD
За даними Aikido Security, зловмисники активно зловживали некоректними налаштуваннями CI/CD-пайплайнів у GitHub Actions. Ключовими векторами стали тригери pull_request_target та workflow_run, які за неправильної конфігурації дозволяють виконувати код з fork-репозиторіїв з доступом до секретів основного репозиторію.
Подібні помилки привели до компрометації помітних open source-проєктів, включно з AsyncAPI, Postman та PostHog. Викрадені токени та ключі автоматично публікувалися в GitHub-репозиторії з описом «Sha1-Hulud: The Second Coming», що спрощувало для атакувальників агрегацію та подальше використання цих даних.
За оцінками GitGuardian, OX Security та Wiz, кампанія спричинила витік сотень токенів GitHub і облікових даних хмарних провайдерів. На GitHub було вивантажено понад 5000 файлів з викраденими секретами. Аналіз 4645 репозиторіїв показав наявність 11 858 унікальних секретів, з яких 2298 залишалися дійсними та публічно доступними станом на 24 листопада 2025 року. Це наочно демонструє каскадний ефект атак на ланцюжок постачання ПЗ.
Практичні кроки захисту ланцюжка постачання та GitHub Actions
Поточна хвиля атак Shai-Hulud підкреслює, що безпека розробки має будуватися як комплексний процес. Командам варто переглянути модель довіри до репозиторіїв пакетів та автозеркал, впровадити регулярний SCA-аналіз, використовувати blocklist відомих скомпрометованих артефактів, фіксувати версії залежностей та уникати автоматичної міграції пакетів без додаткової перевірки.
У контексті CI/CD та GitHub Actions доцільно мінімізувати привілеї, відмовитися від небезпечних тригерів pull_request_target та workflow_run без додаткової валідації, обмежити доступ токенів до необхідного мінімуму та впровадити у репозиторіях і логах пайплайнів. Ротація ключів, принцип мінімальних привілеїв і постійний моніторинг ланцюжка постачання ПЗ суттєво знижують наслідки майбутніх атак цього класу.
Чим раніше організації зроблять такі практики стандартом для своїх команд розробки та DevOps, тим меншим буде вплив наступних хвиль атаки на ланцюжок постачання ПЗ, подібних до кампанії Shai-Hulud, на продукти, клієнтів та репутацію бренду.