Крупная атака на цепочку поставок: вредоносный код внедрён в популярный сканер уязвимостей Trivy и связанные с ним инструменты

information security

В конце марта 2026 года индустрия информационной безопасности столкнулась с одним из наиболее изощрённых инцидентов последнего времени, наглядно демонстрирующим хрупкость современных цепочек поставок программного обеспечения. Целью злоумышленников стал Trivy - широко распространённый сканер уязвимостей с открытым исходным кодом от компании Aqua Security. Атака привела к компрометации нескольких ключевых компонентов проекта, включая основной бинарный файл сканера и официальные GitHub Actions, что создало угрозу для тысяч организаций, использующих эти инструменты в своих процессах DevSecOps.

Описание

Инцидент, который расследовали специалисты Wiz Research совместно с другими участниками рынка, представляет собой многоуровневую целенаправленную кампанию. Угроза началась 19 марта, когда злоумышленники, идентифицирующие себя как TeamPCP, получили доступ к репозиториям проекта. Используя скомпрометированные учётные записи, они внедрили вредоносный код, маскирующийся под легитимные обновления. В результате была создана и распространена через официальные каналы, включая GitHub Releases, Docker Hub и другие контейнерные реестры, поддельная версия сканера v0.69.4. Критически важно, что атака не была единовременной; злоумышленники продемонстрировали высокую степень адаптивности и сохраняли доступ к инфраструктуре, расширяя своё влияние даже после первоначального обнаружения.

Механика атаки была продумана до мелочей. Скомпрометированный бинарный файл Trivy при запуске параллельно с легитимной функциональностью сканера активировал вредоносный модуль. Этот модуль выполнял сбор конфиденциальных данных с хоста, включая переменные окружения, файлы с учётными данными для SSH, облачных провайдеров (таких как AWS, GCP, Azure) и Kubernetes, а также данные сетевых интерфейсов. Собранная информация шифровалась с использованием гибридной схемы AES-256 и RSA-4096. Первичной целью для эксфильтрации служил домен с опечаткой (typosquatted domain) "scan.aquasecurtiy[.]org", имитирующий официальный ресурс Aqua Security. В качестве резервного механизма вредоносная программа использовала украденный "GITHUB_TOKEN" для создания в аккаунте жертвы репозитория с названием "tpcp-docs" и размещения там похищенных данных.

Отдельную и, возможно, более масштабную угрозу представляла компрометация официальных GitHub Actions проекта - "trivy-action" и "setup-trivy". Злоумышленники силовым обновлением (force-push) заменили подавляющее большинство тегов этих действий на вредоносные версии. Когда сторонний проект запускал в своём рабочем процессе (workflow) скомпрометированное действие, вредоносный код исполнялся на его GitHub Actions runner. Полезная нагрузка проводила глубокий сбор секретов, включая дамп памяти процесса "Runner.Worker" в поисках шаблонов, содержащих конфиденциальные данные. Wiz Research в своём отчёте детально описывает, что собранные данные аналогичным образом шифровались и отправлялись на контролируемый злоумышленниками сервер. Эта часть атаки превращала популярный инструмент безопасности в мощное средство для кражи критически важных секретов непосредственно из CI/CD-пайплайнов компаний.

Особую тревогу вызывает механизм закрепления в системе, который вредоносная программа пыталась установить на машинах разработчиков. Определяя их по отсутствию переменной окружения "GITHUB_ACTIONS", код создавал скрипт на Python и конфигурацию для systemd, обеспечивающие постоянное выполнение. Этот скрипт периодически опрашивал резервный командный сервер, развёрнутый на децентрализованной платформе ICP (Internet Computer Protocol), готовый в любой момент доставить более опасную полезную нагрузку. Хотя на момент анализа сервер перенаправлял на безобидное видео, его содержимое могло быть изменено в любой момент, что открывало путь для установки программ-вымогателей, шпионского ПО или инструментов для удалённого доступа.

Развитие ситуации после 19 марта подтвердило серьёзность инцидента. 22 марта злоумышленники расширили активность, опубликовав вредоносные образы контейнеров Trivy версий 0.69.5 и 0.69.6 в Docker Hub, а также выложив в открытый доступ внутренние репозитории Aqua Security на GitHub. Кроме того, была зафиксирована их активность в экосистеме npm, где они использовали украденные токены публикации для распространения червя под названием "CanisterWorm". Эти действия указывают на то, что первоначальный доступ был использован для кражи значительного массива учётных данных, включая ключи GPG и токены для Docker Hub, что позволило атаке перекинуться на новые векторы.

Для специалистов по безопасности последствия этого инцидента двояки. В краткосрочной перспективе критически необходим аудит всех сред, где использовался Trivy, особенно версий 0.69.4, 0.69.5 и 0.69.6, а также проверка логов выполнения GitHub Actions за период с 19 по 22 марта на предмет аномальной активности, такой как обращения к доменам с опечатками или создание репозитория "tpcp-docs". Однако главный урок лежит в области долгосрочного укрепления безопасности цепочки поставок. Данная атака наглядно показала уязвимость практики указания версий через теги в Git. Злоумышленники, получив доступ, могут переместить тег на вредоносный коммит, и все системы, ссылающиеся на него, автоматически загрузят скомпрометированный код. Единственной надёжной защитой от этого является фиксация зависимостей, включая GitHub Actions, по их полному криптографическому хэшу (SHA), что гарантирует неизменность используемой версии. Этот инцидент служит суровым напоминанием о том, что инструменты, призванные обеспечивать безопасность, сами становятся лакомой целью для атакующих, и их защита требует не менее пристального внимания, чем защита основного продукта.

Индикаторы компрометации

IPv4

  • 45.148.10.212

Domains

  • plug-tab-protective-relay.trycloudflare.com
  • scan.aquasecurtiy.org
  • tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io

SHA1

  • 0891663bc55073747be0eb864fbec3727840945d
  • 0d49ceb356f7d4735c63bd0d5c7e67665ec7f80c
  • 18f01febc4c3cd70ce6b94b70e69ab866fc033f5
  • 19851bef764b57ff95b35e66589f31949eeb229d
  • 1d74e4cf63b7cf083cf92bf5923cf037f7011c6b
  • 2297a1b967ecc05ba2285eb6af56ab4da554ecae
  • 22e864e71155122e2834eb0c10d0e7e0b8f65aa3
  • 252554b0e1130467f4301ba65c55a9c373508e35
  • 276ca9680f6df9016db12f7c48571e5c4639451d
  • 2a51c5c5bb1fd1f0e134c9754f1702cfa359c3dd
  • 2b1dac84ff12ba56158b3a97e2941a587cb20da9
  • 2e7964d59cd24d1fd2aa4d6a5f93b7f09ea96947
  • 3201ddddd69a1419c6f1511a14c5945ba3217126
  • 384add36b52014a0f99c0ab3a3d58bd47e53d00f
  • 38623bf26706d51c45647909dcfb669825442804
  • 386c0f18ac3d7f2ed33e2d884761119f4024ff8a
  • 3c615ac0f29e743eda8863377f9776619fd2db76
  • 3d1b5be1589a83fc98b82781c263708b2eb3b47b
  • 3dffed04dc90cf1c548f40577d642c52241ec76c
  • 405e91f329294fb696f55793203abf1f6aba9b40
  • 4209dcadeaea6a7df69262fef1beeda940881d4d
  • 4bdcc5d9ef3ddb42ccc9126e6c07faa3df2807e3
  • 506d7ff06abc509692c600b5b69b4dc6ceaa4b15
  • 555e7ad4c895c558c7214496df1cd56d1390c516
  • 61fbe20b7589e6b61eedcd5fe1e958e1a95fbd13
  • 66c90331c8b991e7895d37796ac712b5895dda3b
  • 6d8d730153d6151e03549f276faca0275ed9c7b2
  • 6ec7aaf336b7d2593d980908be9bc4fed6d407c6
  • 6fc874a1f9d65052d4c67a314da1dae914f1daff
  • 7550f14b64c1c724035a075b36e71423719a1f30
  • 794b6d99daefd5e27ecb33e12691c4026739bf98
  • 7a4b6f31edb8db48cc22a1d41e298b38c4a6417e
  • 7b955a5ece1e1b085c12dac7ac10e0eb1f5b0d4d
  • 7f6f0ce52a59bdfc5757c3982aac2353b58f4c73
  • 820428afeb64484d311211658383ce7f79d31a0a
  • 848d665ed24dc1a41f6b4b7c7ffac7693d6b37be
  • 8519037888b189f13047371758f7aed2283c6b58
  • 85cb72f1e8ee5e6e44488cd6cbdbca94722f96ed
  • 8aa8af3ea1de8e968a3e49a40afb063692ab8eae
  • 8ae5a08aec3013ee8f6132b2a9012b45002f8eaa
  • 8afa9b9f9183b4e00c46e2b82d34047e3c177bd0
  • 8cfb9c31cc944da57458555aa398bb99336d5a1f
  • 9092287c0339a8102f91c5a257a7e27625d9d029
  • 91d5e0a13afab54533a95f8019dd7530bd38a071
  • 91e7c2c36dcad14149d8e455b960af62a2ffb275
  • 9738180dd24427b8824445dbbc23c30ffc1cb0d8
  • 985447b035c447c1ed45f38fad7ca7a4254cb668
  • 99b93c070aac11b52dfc3e41a55cbb24a331ae75
  • 9ba3c3cd3b23d033cd91253a9e61a4bf59c8a670
  • 9c000ba9d482773cbbc2c3544d61b109bc9eb832
  • 9e8968cb83234f0de0217aa8c934a68a317ee518
  • a5b4818debf2adbaba872aaffd6a0f64a26449fa
  • a9bc513ea7989e3234b395cafb8ed5ccc3755636
  • aa3c46a9643b18125abb8aefc13219014e9c4be8
  • ab6606b76e5a054be08cab3d07da323e90e751e8
  • ad623e14ebdfe82b9627811d57b9a39e283d6128
  • b7252377a3d82c73d497bfafa3eabe84de1d02c4
  • b745a35bad072d93a9b83080e9920ec52c6b5a27
  • b7befdc106c600585d3eec87d7e98e1c136839ae
  • b9faa60f85f6f780a34b8d0faaf45b3e3966fdda
  • bb75a9059c2d5803db49e6ed6c6f7e0b367f96be
  • c19401b2f58dc6d2632cb473d44be98dd8292a93
  • c5967f85626795f647d4bf6eb67227f9b79e02f5
  • cf1692a1fc7a47120e6508309765db7e33477946
  • cf19d27c8a7fb7a8bbf1e1000e9318749bcd82cf
  • d488f4388ff4aa268906e25c2144f1433a4edec2
  • da73ae0790e458e878b300b57ceb5f81ac573b46
  • ddb6697447a97198bdef9bae00215059eb5e8bc2
  • ddb94181dcbc723d96ffc07fddd14d97e4849016
  • ddb9da4475c1cef7d5389062bdfdfbdbd1394648
  • e0198fd2b6e1679e36d32933941182d9afa82f6f
  • e53b0483d08da44da9dfe8a84bf2837e5163699b
  • ea56cd31d82b853932d50f1144e95b21817e52cf
  • ef3a510e3f94df3ea9fcd01621155ca5f2c3bf5b
  • f4436225d8a5fd1715d3c2290d8a50643e726031
  • f4f1785be270ae13f36f6a8cfbf6faaae50e660a
  • f5c9fd927027beaa3760d2a84daa8b00e6e5ee21
  • f77738448eec70113cf711656914b61905b3bd47
  • fa4209b6182a4c1609ce34d40b67f5cfd7f00f53
  • fa78e67c0df002c509bcdea88677fb5e2fe6a9b1
  • fd090040b5f584f4fcbe466878cb204d0735dcf4
  • fd429cf86db999572f3d9ca7c54561fdf7d388a4

SHA256

  • 0880819ef821cff918960a39c1c1aada55a5593c61c608ea9215da858a86e349
  • 6328a34b26a63423b555a61f89a6a0525a534e9c88584c815d937910f1ddd538
  • 822dd269ec10459572dfaaefe163dae693c344249a0161953f0d5cdd110bd2a0
  • 887e1f5b5b50162a60bd03b66269e0ae545d0aef0583c1c5b00972152ad7e073
  • bef7e2c5a92c4fa4af17791efc1e46311c0f304796f1172fce192f5efc40f5d7
  • d5edd791021b966fb6af0ace09319ace7b97d6642363ef27b3d5056ca654a94c
  • e6310d8a003d7ac101a6b1cd39ff6c6a88ee454b767c1bdce143e04bc1113243
  • e64e152afe2c722d750f10259626f357cdea40420c5eedae37969fbf13abbecf
  • ecce7ae5ffc9f57bb70efd3ea136a2923f701334a8cd47d4fbf01a97fd22859c
  • f7084b0229dce605ccc5506b14acd4d954a496da4b6134a294844ca8d601970d
Комментарии: 0