Масштабна атака на ланцюг постачання npm зачепила сотні пакетів екосистеми @antv — популярної бібліотеки візуалізації даних — а також низку широко використовуваних JavaScript-пакетів, зокрема echarts-for-react з приблизно 1,1 мільйона щотижневих завантажень. За даними дослідників із Socket, атака пов’язана з триваючою кампанією Mini Shai-Hulud, у межах якої скомпрометований обліковий запис мейнтейнера використовується для масової публікації троянізованих версій пакетів. Шкідливе навантаження викрадає понад 20 типів облікових даних — від ключів AWS і Azure до токенів GitHub і npm — і здатне до самопоширення через украдені токени. Організаціям, які використовують уражені пакети, необхідно негайно провести аудит залежностей і відкликати потенційно скомпрометовані секрети.
Масштаб компрометації та уражені пакети
Атака торкнулася пакетів, пов’язаних з обліковим записом npm-мейнтейнера atool. За даними Socket, зловмисник опублікував 639 шкідливих версій у межах 323 унікальних пакетів, із яких 558 версій припадає на 279 пакетів у просторі назв @antv. Незалежний аналіз SafeDep наводить дещо інші цифри — 631 шкідлива версія в 314 пакетах, — що вказує на певну невизначеність щодо точного охоплення кампанії.
Серед підтверджених уражених пакетів:
- Простір @antv: @antv/g2, @antv/g6, @antv/x6, @antv/l7, @antv/s2, @antv/f2, @antv/g, @antv/g2plot, @antv/graphin, @antv/data-set
- Поза @antv: echarts-for-react, timeago.js, size-sensor, canvas-nest.js
Як зазначає Socket, потенційний радіус ураження є значним, оскільки скомпрометований обліковий запис пов’язаний із широко використовуваними пакетами в екосистемах візуалізації даних, побудови графіків, картографії та React-компонентів. Організації, які автоматично підтягують нові версії залежностей, перебувають у зоні підвищеного ризику.
Технічна анатомія атаки
Механізм зараження
За даними SafeDep, атака використовує два шляхи виконання. Кожна скомпрометована версія додає хук preinstall, який викликає bun run index.js. Крім того, 630 із 631 шкідливої версії впроваджують запис optionalDependencies, що вказує на так звані imposter commits — підроблені коміти в легітимному репозиторії antvis/G2 на GitHub, які доставляють другу копію шкідливого навантаження.
Показовою є швидкість операції: SafeDep зафіксував 22-хвилинний сплеск публікацій, що охопив 314 пакетів і 631 версію з ідентичним обфускованим навантаженням. Це однозначно вказує на повністю автоматизовану операцію з використанням украденого токена, а не на поступову чи таргетовану атаку.
Можливості стілера
Шкідливе навантаження, за даними дослідників, викрадає понад 20 типів облікових даних:
- Ключі хмарних провайдерів: Amazon Web Services, Google Cloud, Microsoft Azure
- Токени розробника: GitHub, npm
- Інфраструктурні секрети: SSH-ключі, Kubernetes, Vault
- Платіжні дані: Stripe
- Рядки підключення до баз даних
- Спроба виходу за межі Docker-контейнера через сокет хоста
Зібрані дані серіалізуються, стискаються, шифруються та надсилаються на домен t.m-kosche[.]com через порт 443. Як резервний механізм ексфільтрації шкідливе ПЗ використовує украдений токен GitHub для створення публічного репозиторію під обліковим записом жертви та коміту даних у JSON-файл.
Самопоширення
Ключова особливість Mini Shai-Hulud — вбудована логіка поширення через npm. Шкідник валідовує викрадені npm-токени через API реєстру, перераховує пакети, що належать власнику токена, завантажує архіви пакетів, впроваджує шкідливе навантаження, додає хук preinstall, збільшує номер версії й повторно публікує пакети від імені скомпрометованого мейнтейнера. Таким чином, кожна компрометація породжує наступну, створюючи каскадний ефект.
Індикатор компрометації на GitHub
Репозиторії, які створює шкідливе ПЗ, містять характерний рядок опису: «niagA oG eW ereH :duluH-iahS» (якщо прочитати у зворотному напрямку — «Shai-Hulud: Here We Go Again»). На момент публікації досліджень пошук по GitHub виявив понад 2200 репозиторіїв із цим маркером — опосередкований індикатор масштабу компрометації облікових записів.
Атрибуція та ескалація загрози
Кампанія Mini Shai-Hulud, за оцінками дослідників, пов’язана з фінансово вмотивованим угрупованням TeamPCP. Однак ситуація суттєво загострилася: як повідомляє SlowMist, TeamPCP оприлюднила повний вихідний код фреймворку в рамках конкурсу атак на ланцюги постачання, оголошеного спільно з BreachForums.
Як зазначає Datadog, публікація вихідного коду діючого наступального фреймворку — подія нетипова. Це знижує поріг входу для інших зловмисників, надаючи їм готові техніки, зокрема зловживання OIDC-токенами, підробку даних про походження пакетів і хуки для закріплення в інструментах на базі ІІ.
Наслідки вже спостерігаються: за даними Mondoo, невідомий зловмисник завантажив чотири шкідливі npm-пакети, один із яких містить практично дослівну копію черв’яка Shai-Hulud із власною інфраструктурою керування. Поява клонів ускладнює атрибуцію та розширює поверхню атаки.
Як наголошує Trend Micro, організації, які використовують GitHub Actions, PyPI, Docker Hub, GitHub Container Registry, розширення VS Code та хмарні CI-раннери, безпосередньо наражаються на ризики цієї кампанії.
Оцінка впливу
Найбільшому ризику піддаються команди розробки, які використовують пакети @antv і пов’язані бібліотеки візуалізації даних у корпоративних проєктах. З огляду на те, що echarts-for-react завантажується понад мільйон разів на тиждень, потенційна кількість уражених організацій обчислюється тисячами. Самопоширюваний характер черв’яка означає, що компрометація одного мейнтейнера може каскадно торкнутися всіх пакетів, пов’язаних із його токенами. Витік хмарних ключів, SSH-секретів і токенів CI/CD відкриває шлях до повної компрометації інфраструктури.
Практичні рекомендації
- Аудит залежностей: перевірте, чи використовуються у ваших проєктах уражені пакети. Зафіксуйте версії залежностей і відкотіться до гарантовано чистих версій, опублікованих до початку кампанії.
- Відкликання секретів: якщо уражені пакети встановлювалися у вашому середовищі — негайно проведіть ротацію всіх токенів npm, GitHub, хмарних ключів AWS/GCP/Azure, SSH-ключів і рядків підключення до баз даних.
- Перевірка GitHub: виконайте пошук по своїй організації на предмет репозиторіїв з описом «niagA oG eW ereH :duluH-iahS» — їх наявність вказує на компрометацію.
- Блокування IOC: додайте домен
t.m-kosche[.]comдо чорних списків систем мережевого моніторингу. - Вимкнення автоматичних оновлень: перегляньте політику автоматичного підтягання нових версій залежностей. Використовуйте lock-файли та пінінг версій.
- Моніторинг preinstall-хуків: перевіряйте наявність підозрілих preinstall-хуків у залежностях, особливо викликів
bun run index.js.
Кампанія Mini Shai-Hulud демонструє системну вразливість екосистеми npm: єдиний скомпрометований токен мейнтейнера запускає каскад заражень, а публікація вихідного коду черв’яка перетворює поодиноку загрозу на масову. Пріоритетні дії зараз — аудит усіх залежностей із простору @antv і пов’язаних пакетів, ротація всіх секретів, які могли бути доступні в скомпрометованих середовищах, і перехід на жорсткий пінінг версій із ручною перевіркою оновлень для критичних залежностей.