Перейти к содержимому
>_ITDITDПлатформа веб-безопасности

Руководства по безопасности

Компрометация цепочки поставок Trivy (март 2026): что делать, если Trivy работает у вас в CI

19–20 марта 2026 года вышла вредоносная версия Trivy v0.69.4, а теги trivy-action и setup-trivy были перезаписаны ради секретов CI. По данным Aqua Security: затронутые версии и окна времени, ротация секретов, закрепление по SHA (ссылка на action по ID коммита) и минимальные права токенов CI.

Опубликовано 2026-09-30 Обновлено 2026-10-04 Последняя проверка 2026-09-30 14 мин чтения

Для кого эта статья: для всех, кто запускает Trivy (сканер уязвимостей в образах контейнеров и зависимостях), aquasecurity/trivy-action или aquasecurity/setup-trivy в CI, например в GitHub Actions, а также для тех, кто использует бинарные файлы или образы контейнеров Trivy на рабочей машине или сервере.

Статья основана на официальном сообщении Aqua Security и бюллетене безопасности Trivy и не описывает техники атаки и значения индикаторов компрометации (IoC).

Что сделать сегодня тем, у кого Trivy в CI

1

Проверьте, запускались ли workflow с Trivy в затронутые окна времени

Aqua просит пользователей просмотреть журналы запусков workflow за 19–20 марта 2026 года. Окна времени в бюллетене (UTC):

  • trivy-action: примерно с 17:43 19 марта до примерно 05:40 20 марта
  • setup-trivy: примерно с 17:43 до примерно 21:44 19 марта
  • Trivy v0.69.4: с 18:22 до примерно 21:42 19 марта
  • образы Docker Hub v0.69.5 и v0.69.6: с 15:43 22 марта до примерно 01:40 23 марта

Если в организации много workflow, найдите те, что ссылаются на aquasecurity/trivy-action и aquasecurity/setup-trivy, и отфильтруйте их историю запусков по этим окнам.

2

Решайте по способу ссылки, а не только по версии

В бюллетене важно, как именно вы ссылались на компонент.

  • trivy-action — затронуты: любой тег, кроме 0.35.0 (0.0.1–0.34.2); явно указанный version: latest в окно воздействия; закрепление по SHA на коммит до 9 апреля 2025 года. Не затронуты: тег 0.35.0; закрепление по SHA на безопасные коммиты после 9 апреля 2025 года.
  • setup-trivy — затронуто: любое использование без закрепления по SHA. Не затронуто: закрепление по SHA на безопасные коммиты.
  • Сам Trivy — затронуты: v0.69.4 (включая latest в окно воздействия; GitHub, deb, rpm, get.trivy.dev, GHCR, ECR Public, Docker Hub) и v0.69.5 и v0.69.6 в Docker Hub. Не затронуты: v0.69.3 и более ранние; образы, на которые ссылались по digest; сборки из исходного кода; официальная формула Homebrew.
3

Если затронуты, смените все секреты, которые могло прочитать задание

Aqua говорит, что если есть хоть какая-то вероятность, что запускалась скомпрометированная версия, все секреты, доступные затронутым пайплайнам, нужно считать раскрытыми: учётные данные облаков (AWS, GCP, Azure), учётные данные Git, учётные данные реестров контейнеров, ключи SSH, токены Kubernetes, переменные окружения и другие секреты автоматизации.

Компания просит считать токены публикации npm активно скомпрометированными и говорит, что украденные токены используются для распространения вредоносного ПО через npm. Для self-hosted раннеров Aqua также перечисляет учётные данные баз данных, закрытые ключи TLS и конфигурации VPN, хранящиеся на раннере.

4

Сначала отключите все старые ключи, затем выпустите новые все вместе

Этот шаг следует из причины, найденной у самого Trivy. По словам Aqua, ротацию 1 марта провели не одновременно, и пока она тянулась несколько дней, атакующий мог воспользоваться ещё действующим токеном и забрать даже только что выпущенные секреты.

Составив список затронутых секретов, сначала отключите старые ключи все вместе, а затем выпустите новые. Если менять ключи по одному, у ещё действующего старого ключа остаётся возможность прочитать новые. Заложите короткий простой как плату за это.

5

Проверьте организацию GitHub и все машины, где запускался Trivy, по списку из бюллетеня

В качестве пунктов проверки Aqua перечисляет репозиторий, созданный в вашей организации GitHub, если использовался запасной путь вывода данных, и файлы, оставшиеся на машине, где v0.69.4 запускалась вне CI, например на рабочей машине разработчика. Если вы могли быть затронуты, пройдите по спискам проверки из сообщения Aqua и бюллетеня (ссылки ниже; эта статья не воспроизводит значения индикаторов).

6

Перейдите на заведомо безопасные версии

Безопасными Aqua называет Trivy v0.69.2 и v0.69.3, trivy-action v0.35.0 и setup-trivy v0.2.6. Согласно бюллетеню, старые теги trivy-action (0.0.1–0.34.2) удалены и не могут быть пересозданы под теми же именами, поэтому их переопубликовали с префиксом v (например, v0.34.0), указывающим на исходные легитимные коммиты (несколько не восстановлены). Если вы всё ещё ссылаетесь на старую версию, ссылку нужно обновить.

Что проверить в настройках CI

Базовое правило закрепления actions по SHA коммита разобрано в статье цепочка TanStack, Nx Console и GitHub. Здесь — о том, что добавляет инцидент с Trivy.

1

Проверьте, что action, закреплённый по SHA, вызывает внутри по тегу

Согласно бюллетеню, trivy-action перевёл ссылки на внутренние компоненты на закрепление по SHA в pull request, принятом 9 апреля 2025 года. У тех, кто закрепил trivy-action на более ранний коммит, безопасный trivy-action вызывал вредоносный setup-trivy по тегу.

Если вы используете actions, собранные из других actions (составные actions), откройте action.yml в закреплённом коммите и проверьте, закреплены ли по SHA строки uses: внутри. Если нет, перейдите на более новый коммит или вызывайте внутренние компоненты напрямую из своего workflow, закрепив их по SHA.

2

Сделайте закрепление по SHA обязательным в настройках организации, а не на усмотрение каждого

В августе 2025 года GitHub добавил в политику разрешённых actions параметр, который требует закреплять actions по полному SHA коммита. Его можно задать на уровне предприятия, организации или репозитория, и workflow, использующие незакреплённый action, завершаются ошибкой. Та же политика позволяет блокировать отдельные actions или версии — это ещё и способ отключить затронутую версию во всей организации во время инцидента вроде этого.

3

Не полагайтесь только на значок «Immutable»

Согласно бюллетеню, Trivy v0.69.3 и trivy-action 0.35.0 уцелели потому, что неизменяемые релизы GitHub были включены до их публикации. Однако Aqua говорит, что значок «Immutable» появлялся и рядом с перезаписанными тегами и что надёжная защита — закрепление по полному SHA коммита, а не значок. Значок описывает релиз на момент публикации.

4

Закрепляйте бинарные файлы по версии и проверяйте подписи; на образы ссылайтесь по digest

Согласно бюллетеню, образы, на которые ссылались по digest (@sha256:…), затронуты не были. Загрузка по latest или только по тегу версии в окно воздействия подтянула бы вредоносную сборку. В бюллетене Trivy также показано, как проверять бинарные файлы и образы по подписям Sigstore и меткам времени подписи. Для инструментов, которые скачивает ваш CI, указывайте версию явно и по возможности закрепляйте по digest или контрольной сумме.

5

Запускайте сканер в задании, у которого нет секретов для развёртывания

По словам Aqua, вредоносный код выполнялся до легитимного сканирования, а результаты сканирования выглядели обычно, поэтому заметить это было трудно. Сканированию обычно не нужны права на запись в облако или реестр. Запускайте сканирование в отдельном задании, которое не получает секретов для развёртывания, с permissions: только на чтение.

По словам Aqua, запасной путь вывода данных работал, только если в workflow передавался персональный токен доступа (PAT), и не срабатывал со стандартным GITHUB_TOKEN. Проверьте, что вы не передаёте персональный токен шагу сканирования.

Что произошло (по сообщению Aqua Security)

Всё ниже изложено так, как сказано в сообщении Aqua Security (первая публикация 22 марта и обновления до 1 апреля) и в бюллетене безопасности Trivy. Время — UTC.

  1. Конец февраля 2026

    Используется ошибка в настройке среды GitHub Actions проекта Trivy, и извлекается токен доступа с повышенными правами.
  2. 1 марта

    Команда Trivy сообщает об этом инциденте и меняет учётные данные. По словам Aqua, ротацию провели не одновременно, и атакующий сохранил доступ через ещё действующие учётные данные.
  3. 19 марта, около 17:43

    76 из 77 тегов trivy-action и все 7 тегов setup-trivy перенаправлены на вредоносные коммиты. Одновременно скомпрометированная служебная учётная запись запускает автоматизацию релизов и публикует вредоносную Trivy v0.69.4 (артефакты доступны с 18:22).
  4. 19 марта, около 20:38

    Команда Trivy выявляет и сдерживает атаку и удаляет вредоносные артефакты из каналов распространения.
  5. 20 марта

    Публикуются безопасные версии, рекомендации для пользователей и индикаторы компрометации.
  6. 21 марта

    Публикуется бюллетень безопасности GHSA-69fq-xp46-6x23 (CVE-2026-33634).
  7. 22 марта

    В Docker Hub загружаются вредоносные образы v0.69.5 и v0.69.6 (с помощью отдельно скомпрометированных учётных данных Docker Hub). В тот же день внутренние репозитории Aqua без разрешения делают публичными на GitHub. Aqua говорит, что атакующий восстановил доступ после первоначального сдерживания.
  8. 23 марта

    Aqua привлекает к расследованию внешнюю компанию по реагированию на инциденты. Выявлена параллельная компрометация GitHub Action для KICS, другого сканера Aqua.
  9. 1 апреля

    Aqua говорит, что расследование почти завершено и признаков воздействия на её коммерческие продукты по-прежнему нет.
76 / 77
перенаправленных тегов trivy-action (безопасен был только 0.35.0)
7 / 7
перенаправленных тегов setup-trivy
~12 часов
Сколько времени теги trivy-action были перезаписаны (бюллетень)
Признаков нет
воздействия на коммерческие продукты, включая Trivy в Aqua Platform (Aqua)
Что раскрыла Aqua Security
Затронуто
Trivy v0.69.4 (бинарные файлы, deb/rpm, образы контейнеров), v0.69.5 и v0.69.6 в Docker Hub, все теги trivy-action, кроме 0.35.0, все теги setup-trivy
Что делал код
Собирал учётные данные облаков, SSH, Kubernetes, Docker, Git и баз данных, а также файлы .env с раннеров CI и машин, шифровал их и отправлял наружу. Выполнялся до легитимного сканирования, поэтому результаты выглядели обычно
Причина
Токен с повышенными правами, извлечённый в конце февраля через ошибку в настройке GitHub Actions; поскольку ротация 1 марта не была атомарной, доступ сохранился
Ответ Aqua
Удалила вредоносные артефакты из всех каналов; удалила перезаписанные теги или перенаправила их на проверенные коммиты; закрыла всю автоматизацию, служебные учётные записи и токены в организации с открытым кодом; сократила зависимость от долгоживущих учётных данных; ввела проверку неизменяемых релизов и аттестации provenance
Не затронуто
Коммерческие продукты, включая Trivy в Aqua Platform (собираются на инфраструктуре, отдельной от GitHub, без общих секретов и систем подписи)

Как это читать: число пострадавших не опубликовано

Aqua говорит, что поскольку Trivy — проект с открытым кодом, у неё нет полного списка пользователей и нет способа напрямую уведомить каждого. Число затронутых организаций не опубликовано, и этот сайт не приводит оценок.

В сообщении Aqua также названы атакующий и внешние компании, помогавшие с анализом; по правилам этого сайта мы называем только организацию, сообщившую об инциденте. Решайте по тому, запускался ли ваш workflow в затронутое окно с затронутой ссылкой, а не по громким цифрам.

На каком этапе это можно было предотвратить

1. Конец февраля – 1 марта

Токен извлечён; ротация занимает дни

↓

Урок (в вашей организации)

Сначала отключить всё, затем выпустить заново все вместе

2. 19 марта: теги перезаписаны

Те же имена тегов теперь указывают на вредоносные коммиты

↓

Настройка, которая предотвратила бы

Закрепление по SHA, обязательное по политике, включая внутренние части

3. Вредоносные v0.69.4 и latest

Вышли во всех официальных каналах

↓

Настройка, которая предотвратила бы

Явные версии, digest, проверка подписей

4. Ваше задание CI

Секреты собраны до запуска сканирования

↓

Ограничить ущерб

Никаких секретов и персональных токенов в задании сканирования

Путь, восстановленный по сообщению Aqua Security и бюллетеню. Справа от каждого этапа — настройка на стороне пользователя, которая могла остановить атаку или уменьшить ущерб.

Ссылки, которые были затронуты (по бюллетеню)

  • Ссылки по тегу, например trivy-action@0.34.2 (любой, кроме 0.35.0)
  • Явный version: latest (в окно воздействия бинарных файлов)
  • Закрепление по SHA на коммиты до 9 апреля 2025 года (внутренний setup-trivy вызывался по тегу)
  • Любая ссылка на setup-trivy без закрепления по SHA
  • Теги образов, например latest или 0.69.4

Ссылки, которые не были затронуты

  • trivy-action@0.35.0 (неизменяемые релизы включили до его публикации)
  • Закрепление по SHA на безопасные коммиты после 9 апреля 2025 года
  • setup-trivy, закреплённый по SHA на безопасный коммит
  • Образы, на которые ссылались по digest
  • Trivy v0.69.3 и более ранние, сборки из исходного кода, официальная формула Homebrew

Взгляд этого сайта: при подозрении на компрометацию меняйте ключи все сразу

Ротацию ключей обычно проводят по одному, начиная с наименее важных, без простоя. Отсутствие простоя — реальное преимущество, но инцидент с Trivy показывает, что такой подход не отрезает атакующего, у которого всё ещё есть доступ. По словам Aqua, пока ротация растянулась на несколько дней, ещё действующий токен мог быть использован, чтобы забрать даже только что выпущенные секреты, и это привело к вредоносному релизу три недели спустя.

При подозрении на компрометацию меняйте ключи в таком порядке: (1) составьте список всех ключей и мест, откуда их можно прочитать, (2) отключите старые ключи все вместе, (3) только после этого выпустите новые, (4) убедитесь, что старые ключи действительно не работают. Заложите короткий простой. Обычный способ — когда старые и новые ключи работают параллельно — исходит из того, что ничего не утекло.

И ещё одно. Поскольку сканер уязвимостей — инструмент защиты, он обычно запускается в большем числе мест и с более широкими правами, чем почти всё остальное в CI. Не позволяйте этому усыпить бдительность: запускайте его в заданиях, которые не могут прочитать ваши секреты.

Источники (открытые данные)

Факты в этой статье взяты из открытых источников ниже. Техники атаки, значения IoC и сведения, позволяющие установить атакующего, не приводятся.

  • Aqua Security, «Trivy Supply Chain Attack: What You Need to Know» (первая публикация 22 марта 2026 года, обновлено 1 апреля) — aquasec.com
  • Бюллетень безопасности Trivy, «Trivy ecosystem supply chain temporarily compromised», GHSA-69fq-xp46-6x23 (CVE-2026-33634; опубликован 21 марта, обновлён 30 марта) — github.com
  • Trivy, «Trivy Security incident 2026-03-19» (GitHub Discussions, сводки состояния от команды Trivy) — github.com
  • GitHub Changelog, «GitHub Actions policy now supports blocking and SHA pinning actions» (15 августа 2025 года) — github.blog
  • GitHub Docs, «Secure use reference» (использование сторонних actions) — docs.github.com

История обновлений

2026-09-30: Первая версия на основе сообщения Aqua Security (обновление от 1 апреля) и бюллетеня безопасности Trivy (редакция от 30 марта).

Читать дальше

FAQ

QКакие версии Trivy были затронуты?
A

Согласно бюллетеню безопасности Trivy GHSA-69fq-xp46-6x23 (CVE-2026-33634), затронуты Trivy v0.69.4 (бинарные файлы, распространявшиеся через GitHub, deb, rpm и get.trivy.dev, и образы контейнеров в GHCR, ECR Public и Docker Hub; в окно воздействия на неё указывал и тег latest) и образы контейнеров v0.69.5 и v0.69.6, опубликованные в Docker Hub. v0.69.3 и более ранние версии, образы, на которые ссылались по digest, бинарные файлы, собранные из исходного кода, и официальная формула Homebrew затронуты не были.

QЯ использую trivy-action. Меня это затронуло?
A

Согласно бюллетеню, вы затронуты, если ссылались на любой тег, кроме 0.35.0 (от 0.0.1 до 0.34.2), явно указывали version: latest в окно воздействия бинарных файлов или закрепляли по SHA коммит, сделанный до 9 апреля 2025 года. Тег 0.35.0 и закрепление по SHA на безопасные коммиты после 9 апреля 2025 года затронуты не были. Теги были перезаписаны примерно с 17:43 UTC 19 марта до примерно 05:40 UTC 20 марта 2026 года.

QЯ использую setup-trivy. Меня это затронуло?
A

Согласно бюллетеню, затронуто любое использование без закрепления по SHA. Все семь тегов (от v0.2.0 до v0.2.6) были перенаправлены на вредоносные коммиты примерно между 17:43 и 21:44 UTC 19 марта. Закрепление по SHA на безопасные коммиты затронуто не было, а v0.2.6 пересоздали с безопасным содержимым.

QЧто делать, если меня это затронуло?
A

Aqua говорит, что если есть хоть какая-то вероятность, что в вашей среде запускалась скомпрометированная версия, все секреты, доступные затронутым пайплайнам, нужно считать раскрытыми и немедленно сменить: учётные данные облаков (AWS, GCP, Azure), учётные данные Git, учётные данные реестров контейнеров, ключи SSH, токены Kubernetes, переменные окружения и другие секреты автоматизации. Токены публикации npm, по словам компании, нужно считать активно скомпрометированными.

QКакова была причина?
A

По словам Aqua, в конце февраля 2026 года атакующие воспользовались ошибкой в настройке среды GitHub Actions проекта Trivy и извлекли токен доступа с повышенными правами. 1 марта об инциденте сообщили и сменили учётные данные, но ротация не была атомарной (заняла несколько дней), и атакующий мог воспользоваться ещё действующим токеном, чтобы получить только что выпущенные секреты. Aqua говорит, что это и сделало возможным вредоносный релиз 19 марта.

QЗатронуты ли коммерческие продукты Aqua Security?
A

Aqua говорит, что признаков воздействия на её коммерческие продукты нет, включая Trivy в составе Aqua Platform. Компания объясняет, что коммерческая платформа собирается и работает отдельно от GitHub, не делит с ним репозитории, инфраструктуру CI/CD, секреты или системы подписи и принимает релизы с открытым кодом только после контролируемой проверки безопасности. Это заявление не относится к прямому использованию Trivy с открытым кодом.