Червь Shai-Hulud обошёл защиту GitHub Actions через кэш
🔥 Червь Shai-Hulud обошёл защиту GitHub Actions через кэш
Атака началась 11 мая 2026 и за пять часов поразила 172 npm-пакета экосистем TanStack, Mistral AI, OpenSearch и UiPath — 400 с лишним зловредных версий. Червь не крадёт токены разработчиков напрямую. Он манипулирует кэшем сборки: pull request из форка прокидывает код в общий кэш, а релизный раннер мейнтейнера подхватывает заражённый артефакт и исполняет его в доверенном окружении. Управлять вредоносным кодом не надо — CI сам забирает чужую полезную нагрузку.
Вторым ударом стал обход маскировки секретов GitHub Actions. Червь запускается через Bun — аналог Node.js, для которого нет стандартного мониторинга процессов, — и читает память процесса раннера напрямую: /proc//mem. В логах секреты замаскированы, но в оперативной памяти лежат открытым текстом. Попутно выгребаются креды из ~/.ssh, ~/.docker/config.json, ~/.aws/credentials, история оболочки и IMDS-эндпоинт облачных провайдеров.
Самое неприятное — червь публикует заражённые версии с валидным провенансом Build Level 3. Он запущен в том же пайплайне, который npm и Sigstore считают доверенным, поэтому OIDC честно выдаёт временный токен публикации, а Fulcio подписывает артефакт сертификатом, привязанным к легитимному identity репозитория. Результат: подпись есть, SLSA-провенанс есть, а червь уже залит.
→ Первая волна: 11 мая 2026, 400+ версий в 172 пакетах
→ Вторая волна: 19 мая, 323 пакета за 22 минуты — полностью автоматически
→ Утечка секретов — через CDN Session (filev2.getsession.org) и dead-drop-коммиты в GraphQL-репозитории от claude@users.noreply.github.com
→ Деталь: токен червя содержит фразу IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner — отзыв вызывает rm -rf ~/
TeamPCP эксплуатировали разрыв между моделью угроз SLSA и реальностью CI. SLSA доказывает, что артефакт собран в правильном репозитории, но понятия не имеет, какой именно код отработал в этом пайплайне. Пока сборка и релиз живут в одном доверенном домене, подпись становится формальностью, а не гарантией. Готовы ли вы изолировать все свежие версии пакетов на 2–3 дня, чтобы не подхватить такое?
По данным habr_infosec
#supplychain #npm #Sigstore #OIDC #TeamPCP