Постмортем: как взломали цепочку поставок TanStack через GitHub Actions (OIDC + Cache Poisoning)
Английский не нужен
Не указано: грейд, формат работы, география
Навыки
AWS
Azure
CI/CD
Code review
DNS / DHCP
Google Cloud
GitHub
Ещё 5
GitHub Actions
Kubernetes
OAuth / OIDC
Vault / Consul
YAML
О компании и продукте
Это и позволило вредоносному коду выполниться в контексте базового репозитория без одобрения админов. Отравление кэша. Вредоносный скрипт записал отравленный кэш pnpm-store (1.1 ГБ) в общий репозиторий под ключом ветки main
Эксфильтрацию. Отправлял данные по HTTPS и скрытым DNS-каналам в сеть Session/Oxen
Червь-эффект
Запрашивал у npm другие пакеты, где скомпрометированный юзер был админом, и пытался заразить и их (пострадали некоторые пакеты Mistral AI, UiPath, Guardrails AI)
Если ваша команда пользуется TanStack
Проверить lock-файлы на наличие зараженных версий (полный список в CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx)
Если пакеты ставились — считать раннеры/хосты скомпрометированными и провести полную ротацию всех секретов и ключей, к которым они имели доступ
Блокировать хуки сборки
В CI/CD использовать флаг --ignore-scripts при установке зависимостей (например, pnpm install --ignore-scripts или npm ci --ignore-scripts)
Изолировать кэш
Недостаточно просто ограничить OIDC-токен веткой main (ведь атакующие дождались легитимного пуша)
Необходимо строго разделять области видимости кэша
Кэш для релизных пайплайнов должен быть полностью изолирован от кэша, доступного для воркфлоу проверки PR (pull_request_target)
В GitHub Actions фиксировать сторонние экшены по SHA-хэшам коммитов, ограничить область действия OIDC конкретными защищенными ветками (refs/heads/main) и жестко изолировать триггер pull_request_target
DevOpsKaz 😛
Требования
11 мая 2026 года злоумышленники за 6 минут опубликовали 84 вредоносные версии 42 npm-пакетов семейства @tanstack/* (популярный набор библиотек для фронтенд-разработки) с легитимной подписью происхождения (SLSA provenance)
При этом учетные данные мейнтейнеров не были украдены, а 2FA была включена
Схема атаки
Pwn Request
Злоумышленник создал PR из форка
Воркфлоу bundle-size.yml использовал триггер pull_request_target
Сам по себе он безопасен (запускает код из ветки main), но внутри был шаг сборки бенчмарков, который явно подтягивал файлы из коммита форка
Разграничение прав через permissions не сработало, так как экшен использовал внутренний токен раннера для записи, а не GITHUB_TOKEN
Затем злоумышленник сделал force-push пустышки, скрыв изменения в PR
Кража OIDC-токена из памяти
Когда мейнтейнер сделал штатный пуш в main, запустился легитимный релизный воркфлоу, который восстановил отравленный кэш
Вредоносный код активировался и извлек валидный OIDC-токен прямо из оперативной памяти процесса GitHub Actions Runner, после чего легитимно залил пакеты в npm
Вредоносный код внедрялся через хук prepare (optionalDependencies) и выполнял
Паспорт вакансии
История публикации
Появилась в Вакандии31 день
Перепубликациинетпубликовалась один раз
Проверяли на источникеВидели 29 дней назад
Среди похожихНет данныху карточки не хватает полей, чтобы найти похожие
Откуда что взялось
Отмечено то, что вывели мы. Без пометки — значение назвал работодатель.
Грейдне указан
Формат работыне указан
Географияне указана
Зарплата≈ 110 000 RUB в месяцнаша оценка, в вакансии не названа
Почему на этом месте в выдаче
Порядок выдачи объявлен контрактом: свежесть решает между днями, полнота и зарплата — внутри дня.
Полнота карточки251 из 4 полей: грейд, формат, география, зарплата
Зарплата названа0вилки работодателя нет, показана наша оценка
Проверка Вакандии
Источники и свежесть
Тип источника
Карьерный сайт работодателя
Найдено публикаций
1
Посмотреть публикации и даты
telegramОсновная публикация · 2026-06-29
Безопасность
Отклик уходит на сайт источника
Вакандия показывает вакансию, но не отправляет отклик и не проверяет работодателя. Сам отклик вы оставляете на внешнем сайте — t.me.
Признаки мошенничества
Просят предоплату, «залог» или деньги за обучение и оборудование.
Требуют код из SMS, данные банковской карты или доступ к «Госуслугам».
Быстро уводят в мессенджер и торопят с решением.
Обещают большой доход без опыта и без деталей задач.
Настоящий работодатель не просит денег и платёжных данных до трудоустройства.
Продолжить поиск
Похожие вакансии
Причина сходства указана на каждой карточке
ФР
Почему похожа: похожая специализация · сопоставимая зарплата