Руководства по безопасности
Компрометация цепочки поставок Trivy (март 2026): что делать, если Trivy работает у вас в CI
19–20 марта 2026 года вышла вредоносная версия Trivy v0.69.4, а теги trivy-action и setup-trivy были перезаписаны ради секретов CI. По данным Aqua Security: затронутые версии и окна времени, ротация секретов, закрепление по SHA (ссылка на action по ID коммита) и минимальные права токенов CI.
Для кого эта статья: для всех, кто запускает Trivy (сканер уязвимостей в образах контейнеров и зависимостях), aquasecurity/trivy-action или aquasecurity/setup-trivy в CI, например в GitHub Actions, а также для тех, кто использует бинарные файлы или образы контейнеров Trivy на рабочей машине или сервере.
Статья основана на официальном сообщении Aqua Security и бюллетене безопасности Trivy и не описывает техники атаки и значения индикаторов компрометации (IoC).
Что сделать сегодня тем, у кого Trivy в CI
Проверьте, запускались ли 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, и отфильтруйте их историю запусков по этим окнам.
Решайте по способу ссылки, а не только по версии
В бюллетене важно, как именно вы ссылались на компонент.
- 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.
Если затронуты, смените все секреты, которые могло прочитать задание
Aqua говорит, что если есть хоть какая-то вероятность, что запускалась скомпрометированная версия, все секреты, доступные затронутым пайплайнам, нужно считать раскрытыми: учётные данные облаков (AWS, GCP, Azure), учётные данные Git, учётные данные реестров контейнеров, ключи SSH, токены Kubernetes, переменные окружения и другие секреты автоматизации.
Компания просит считать токены публикации npm активно скомпрометированными и говорит, что украденные токены используются для распространения вредоносного ПО через npm. Для self-hosted раннеров Aqua также перечисляет учётные данные баз данных, закрытые ключи TLS и конфигурации VPN, хранящиеся на раннере.
Сначала отключите все старые ключи, затем выпустите новые все вместе
Этот шаг следует из причины, найденной у самого Trivy. По словам Aqua, ротацию 1 марта провели не одновременно, и пока она тянулась несколько дней, атакующий мог воспользоваться ещё действующим токеном и забрать даже только что выпущенные секреты.
Составив список затронутых секретов, сначала отключите старые ключи все вместе, а затем выпустите новые. Если менять ключи по одному, у ещё действующего старого ключа остаётся возможность прочитать новые. Заложите короткий простой как плату за это.
Проверьте организацию GitHub и все машины, где запускался Trivy, по списку из бюллетеня
В качестве пунктов проверки Aqua перечисляет репозиторий, созданный в вашей организации GitHub, если использовался запасной путь вывода данных, и файлы, оставшиеся на машине, где v0.69.4 запускалась вне CI, например на рабочей машине разработчика. Если вы могли быть затронуты, пройдите по спискам проверки из сообщения Aqua и бюллетеня (ссылки ниже; эта статья не воспроизводит значения индикаторов).
Перейдите на заведомо безопасные версии
Безопасными 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.
Проверьте, что action, закреплённый по SHA, вызывает внутри по тегу
Согласно бюллетеню, trivy-action перевёл ссылки на внутренние компоненты на закрепление по SHA в pull request, принятом 9 апреля 2025 года. У тех, кто закрепил trivy-action на более ранний коммит, безопасный trivy-action вызывал вредоносный setup-trivy по тегу.
Если вы используете actions, собранные из других actions (составные actions), откройте action.yml в закреплённом коммите и проверьте, закреплены ли по SHA строки uses: внутри. Если нет, перейдите на более новый коммит или вызывайте внутренние компоненты напрямую из своего workflow, закрепив их по SHA.
Сделайте закрепление по SHA обязательным в настройках организации, а не на усмотрение каждого
В августе 2025 года GitHub добавил в политику разрешённых actions параметр, который требует закреплять actions по полному SHA коммита. Его можно задать на уровне предприятия, организации или репозитория, и workflow, использующие незакреплённый action, завершаются ошибкой. Та же политика позволяет блокировать отдельные actions или версии — это ещё и способ отключить затронутую версию во всей организации во время инцидента вроде этого.
Не полагайтесь только на значок «Immutable»
Согласно бюллетеню, Trivy v0.69.3 и trivy-action 0.35.0 уцелели потому, что неизменяемые релизы GitHub были включены до их публикации. Однако Aqua говорит, что значок «Immutable» появлялся и рядом с перезаписанными тегами и что надёжная защита — закрепление по полному SHA коммита, а не значок. Значок описывает релиз на момент публикации.
Закрепляйте бинарные файлы по версии и проверяйте подписи; на образы ссылайтесь по digest
Согласно бюллетеню, образы, на которые ссылались по digest (@sha256:…), затронуты не были. Загрузка по latest или только по тегу версии в окно воздействия подтянула бы вредоносную сборку. В бюллетене Trivy также показано, как проверять бинарные файлы и образы по подписям Sigstore и меткам времени подписи. Для инструментов, которые скачивает ваш CI, указывайте версию явно и по возможности закрепляйте по digest или контрольной сумме.
Запускайте сканер в задании, у которого нет секретов для развёртывания
По словам Aqua, вредоносный код выполнялся до легитимного сканирования, а результаты сканирования выглядели обычно, поэтому заметить это было трудно. Сканированию обычно не нужны права на запись в облако или реестр. Запускайте сканирование в отдельном задании, которое не получает секретов для развёртывания, с permissions: только на чтение.
По словам Aqua, запасной путь вывода данных работал, только если в workflow передавался персональный токен доступа (PAT), и не срабатывал со стандартным GITHUB_TOKEN. Проверьте, что вы не передаёте персональный токен шагу сканирования.
Что произошло (по сообщению Aqua Security)
Всё ниже изложено так, как сказано в сообщении Aqua Security (первая публикация 22 марта и обновления до 1 апреля) и в бюллетене безопасности Trivy. Время — UTC.
Конец февраля 2026
Используется ошибка в настройке среды GitHub Actions проекта Trivy, и извлекается токен доступа с повышенными правами.1 марта
Команда Trivy сообщает об этом инциденте и меняет учётные данные. По словам Aqua, ротацию провели не одновременно, и атакующий сохранил доступ через ещё действующие учётные данные.19 марта, около 17:43
76 из 77 тегов trivy-action и все 7 тегов setup-trivy перенаправлены на вредоносные коммиты. Одновременно скомпрометированная служебная учётная запись запускает автоматизацию релизов и публикует вредоносную Trivy v0.69.4 (артефакты доступны с 18:22).19 марта, около 20:38
Команда Trivy выявляет и сдерживает атаку и удаляет вредоносные артефакты из каналов распространения.20 марта
Публикуются безопасные версии, рекомендации для пользователей и индикаторы компрометации.21 марта
Публикуется бюллетень безопасности GHSA-69fq-xp46-6x23 (CVE-2026-33634).22 марта
В Docker Hub загружаются вредоносные образы v0.69.5 и v0.69.6 (с помощью отдельно скомпрометированных учётных данных Docker Hub). В тот же день внутренние репозитории Aqua без разрешения делают публичными на GitHub. Aqua говорит, что атакующий восстановил доступ после первоначального сдерживания.23 марта
Aqua привлекает к расследованию внешнюю компанию по реагированию на инциденты. Выявлена параллельная компрометация GitHub Action для KICS, другого сканера Aqua.1 апреля
Aqua говорит, что расследование почти завершено и признаков воздействия на её коммерческие продукты по-прежнему нет.
- Затронуто
- 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
Секреты собраны до запуска сканирования
↓→
Ограничить ущерб
Никаких секретов и персональных токенов в задании сканирования
Ссылки, которые были затронуты (по бюллетеню)
- Ссылки по тегу, например
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 марта).
Читать дальше
- Закрепление по SHA и почему один человек не должен иметь возможность опубликовать релиз: цепочка TanStack, Nx Console и GitHub
- Порядок отзыва украденных токенов npm: защита от червей в цепочке поставок npm
- Где хранятся секреты: чем опасны .env и API-ключи / останавливаем секреты при коммите с gitleaks
- Когда утекают переменные окружения платформы: что делать разработчикам после инцидента безопасности Vercel (на английском)
- Другие инциденты 2026 года: утечки данных и кибератаки 2026 года (на английском)
FAQ
QКакие версии Trivy были затронуты?
Согласно бюллетеню безопасности 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. Меня это затронуло?
Согласно бюллетеню, вы затронуты, если ссылались на любой тег, кроме 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. Меня это затронуло?
Согласно бюллетеню, затронуто любое использование без закрепления по SHA. Все семь тегов (от v0.2.0 до v0.2.6) были перенаправлены на вредоносные коммиты примерно между 17:43 и 21:44 UTC 19 марта. Закрепление по SHA на безопасные коммиты затронуто не было, а v0.2.6 пересоздали с безопасным содержимым.
QЧто делать, если меня это затронуло?
Aqua говорит, что если есть хоть какая-то вероятность, что в вашей среде запускалась скомпрометированная версия, все секреты, доступные затронутым пайплайнам, нужно считать раскрытыми и немедленно сменить: учётные данные облаков (AWS, GCP, Azure), учётные данные Git, учётные данные реестров контейнеров, ключи SSH, токены Kubernetes, переменные окружения и другие секреты автоматизации. Токены публикации npm, по словам компании, нужно считать активно скомпрометированными.
QКакова была причина?
По словам Aqua, в конце февраля 2026 года атакующие воспользовались ошибкой в настройке среды GitHub Actions проекта Trivy и извлекли токен доступа с повышенными правами. 1 марта об инциденте сообщили и сменили учётные данные, но ротация не была атомарной (заняла несколько дней), и атакующий мог воспользоваться ещё действующим токеном, чтобы получить только что выпущенные секреты. Aqua говорит, что это и сделало возможным вредоносный релиз 19 марта.
QЗатронуты ли коммерческие продукты Aqua Security?
Aqua говорит, что признаков воздействия на её коммерческие продукты нет, включая Trivy в составе Aqua Platform. Компания объясняет, что коммерческая платформа собирается и работает отдельно от GitHub, не делит с ним репозитории, инфраструктуру CI/CD, секреты или системы подписи и принимает релизы с открытым кодом только после контролируемой проверки безопасности. Это заявление не относится к прямому использованию Trivy с открытым кодом.