Заметки о Kubernetes Security и DevSecOps

Анатомия supply chain атаки на популярный Kubernetes-компонент

12 октября 2026 г., 2 минуты

!!!Черновик!!!!

Сегодня разберем не гипотетическую угрозу, а реальный инцидент, который произошел из-за того, что кто-то оставил открытой дверь в цепочке поставок.

Что случилось

Злоумышленники получили доступ к Personal Access Token (PAT) от Docker Hub. Важный момент: у этого токена были избыточные права на запись. В итоге в официальный репозиторий Kong был загружен вредоносный образ. Внутри сидел майнер XMRig, который стучался на пул pool.supportxmr.com.

Самое противное, что этот образ не лежал где-то на пиратском сайте. Он был подписан тем самым доверенным аккаунтом, которому разработчики привыкли верить. Вредоносный образ находился в реестре с 22 декабря 2024 года по 3 января 2025-го. Если хотите проверить свои логи, ищите хэш: sha256:a00659df0771d076fc9d0baf1f2f45e81ec9f13179f499d4cd940f57afc75d43.

Как токен утек

Официальная причина утечки PAT не раскрыта. Но в мире CI/CD есть классический сценарий, который приводит к такому ровно так же часто, как и открытый ключ под ковриком. Это GitHub Actions и особенность под названием pull_request_target.

В отличие от обычного pull_request, этот триггер запускается в контексте базового репозитория. Если настроить workflow неаккуратно, код из пул-реквеста форка может получить доступ к секретам базового репозитория.

Я сам в практике видел, как люди настраивают CI/CD «на бегу», лишь бы работало, и оставляют токены с правами администратора. «Да кому он нужен, этот токен от реестра», — думал я раньше. После этой истории перестал. Один такой токен превращает ваш кластер в ферму для майнинга.

Архитектурные уроки

CI/CD — это часть поверхности атаки. Раньше считалось: если код прошел ревью и лежит в Git, он безопасен. Ага. Пайплайн — это такой же компонент инфраструктуры, как и Kubernetes. Если его скомпрометировали, он соберет и запустит всё, что скажет атакующий.
Доверие к реестру не заменяет проверку артефакта. То, что образ лежит в официальном Docker Hub, не значит, что он безопасен. Нужна криптографическая проверка. Тег — это как подпись на коробке: её можно переклеить. Digest — это отпечаток содержимого. Если его подменили, вы это увидите. Admission controller (например, Kyverno) должен отклонять образы, digest которых не совпадает с подписью.
Прозрачные логи (Rekor). Когда вы подписываете образ через Cosign (keyless), запись уходит в публичный лог Rekor. Если образ в реестре подменили, а подпись осталась от старого доброго коммита, Rekor это покажет.
Что делать прямо сейчас

Ротация секретов. Если используете PAT для реестров — убедитесь, что у них минимальные права (только push/pull).
Аудит workflows. Проверьте GitHub Actions. Используете pull_request_target? Убедитесь, что код из форков не получает доступ к секретам.
Проверка по digest. В настройках admission controller укажите проверку образов по digest, а не только по тегам.
Мониторинг. Настройте алерты на скачки CPU. Если кластер вдруг начал жрать 100% ресурсов в 3 часа ночи, возможно, у вас в поде поселился «гость» с pool.supportxmr.com.
Итог

Supply chain атака на Kong — классическая история о том, что самая слабая точка — не код, а люди и процессы. Это как с ключами от квартиры: можно поставить бронедверь, но если ключ оставить под ковриком, дверь не поможет. Проверяйте всё: от кода до подписи.

Обсуждаем статьи в Telegram-канале. Недушный ИнфоБез.

GitHub Advisory (оригинал): https://github.com/Kong/kubernetes-ingress-controller/security/advisories
Про pull_request_target (официальная документация GitHub): https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
Rekor (прозрачный лог Sigstore): https://docs.sigstore.dev/logging/overview/
Инструкция по проверке digest в Kyverno: https://kyverno.io/policies/other/verify-image/verify-image/

Social Media
Telegram
Powered by BS5 Simply Blog and Bludit
Navigation