The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В 42 NPM-пакета TanStack интегрирован самораспространяющийся червь

12.05.2026 22:03 (MSK)

В результате компрометации процесса формирования релизов на базе GitHub Actions в проекте TanStack атакующим удалось опубликовать в репозитории NPM 84 вредоносные версии, охватывающие 42 NPM-пакета из стека TanStack. Некоторые из скомпрометированных пакетов насчитывали более 10 миллионов загрузок в неделю.

Доступ к публикации релизов был получен из-за неверной настройки pull_request_target "Pwn Request" в GitHub Actions (указание маски в настройках привело к запуску pull_request_target для pull-запросов в сторонние форки), отравления кэша GitHub Actions через форк и возможности извлечения OIDC-токена из памяти запущенного runner-процесса (Runner.Worker) через чтение содержимого /proc/<pid>/mem.

NPM-пакеты с вредоносными изменениями были опубликованы 11 мая с 22:20 до 22:26 (MSK), замечены через 20 минут и блокированы спустя полтора часа. Для каждого из поражённых NPM-пакетов были выпущены по две вредоносные версии, в которые был интегрирован код для активации червя mini-shai-hulud, выполняющего поиск токенов и учётных данных в текущем окружении. В случае обнаружения токена подключения к каталогу NPM червь автоматически публиковал новые вредоносные релизы для разрабатываемых в текущем окружении пакетов, поражая дерево зависимостей. Таким способом было поражено более 400 NPM-пакетов, использующих пакеты TanStack в числе зависимостей.

Червь размещался в файле router_init.js и активировался при установке поражённого пакета вручную разработчиком или автоматизированно в окружении непрерывной интеграции при помощи команд "npm install", "pnpm install" или "yarn install". После активации червь выполнял поиск в системе токенов к NPM (~/.npmrc), AWS, GCP, Azure, HashiCorp и KubernetesK8s, а также закрытых ключей SSH. Найденные данные отправлялись злоумышленникам через децентрализованный P2P-мессенджер getsession.org.

В черве было предусмотрено совершение деструктивных действий в случае отзыва перехваченного NPM-токена - в системе настраивался периодический запуск скрипта ~/.local/bin/gh-token-monitor.sh, который каждые 60 секунд проверял активность токена через обращение к api.github.com/user и в случае отзыва токена выполнял команду "rm -rf ~/".

  1. Главная ссылка к новости (https://tanstack.com/blog/npm-...)
  2. OpenNews: Анализ конфиденциальных данных, захваченных червём Shai-Hulud 2
  3. OpenNews: При помощи червя Shai-Hulud скомпрометировано 600 NPM-пакетов
  4. OpenNews: Скомпрометирован NPM-пакет axios, имеющий 100 млн загрузок в неделю
  5. OpenNews: Утечка кода инструментария Claude Code из-за забытого в NPM-пакете map-файла
  6. OpenNews: Раскрыты подробности захвата учётных данных сопровождающего NPM-пакет axios
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65432-tanstack
Ключевые слова: tanstack
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (17) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Rev (ok), 23:29, 12/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Какая замечательная и безопасная экосистема у JS-ников!
     
     
  • 2.7, anonymous (??), 23:46, 12/05/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    у каждого разработчика должна быть настроена firejail.
     
  • 2.11, Джон Титор (ok), 00:39, 13/05/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 2.18, kai3341 (ok), 01:27, 13/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Какая замечательная и безопасная экосистема у JS-ников!

    Иногда лучше жевать, чем говорить. Атака стара как мир. Принципиально уязвимы __все__ пакетные менеджеры, где есть возможность исполнить произвольный код. Ирония в том, что сборка сишных экстеншнов является таким кодом, поэтому постинсталл хуки это жизненная необходимость. Бинпакеты публикуются очень не под все рахитектуры и тем более не под все ОС

     

  • 1.2, Аноним (2), 23:29, 12/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Это божественно!
     
  • 1.3, Аноним (3), 23:37, 12/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну что начинаем собрание экспертов: кого-то взломали, тут явно виноват джаваскрипт, надо было безопасный раст юзать.
     
     
  • 2.4, S404 (?), 23:41, 12/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    100% виноват Micro$oft, они ведь владеют npm
     
  • 2.8, Аноним83 (?), 00:06, 13/05/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Такое ощущение что в остальных экосистемах в разляпистыми репозиториями ни чуть не лучше, просто року до них у кого то не дошли.
    Те ничего не мешает в любой лефтпад и/или его сборочные скрипты вставить запуск любого кода.
     
  • 2.12, Джон Титор (ok), 00:41, 13/05/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     

  • 1.5, Аноним (5), 23:42, 12/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что делать ? Общий сбор!
     

  • 1.9, НектоОткудаТо (?), 00:06, 13/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Плата за использование бесплатных публичных сервисов.
    Жаловаться в таких случаях пострадавшие могут только на себя.
    Без злорадства всякого пишу, но и без сожаления.
     

  • 1.13, Джон Титор (ok), 00:53, 13/05/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.15, Аноним (15), 01:19, 13/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сиськина опять замели под ковёр. Ща и меня отправят на скамейку пузанов.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру