
Pruebas de concepto de escape de contenedores para CVE-2026-80521 y CVE-2026-52910, con un entorno de máquina virtual QEMU/Ubuntu desechable para la ejecución segura de PoC.
Este directorio compila y ejecuta un contenedor Docker de Ubuntu dentro de un invitado QEMU de Ubuntu desechable. Las PoC se copian en el invitado y nunca son ejecutadas por los scripts del host.
qemu-imgcurlxorrisosocat solo cuando se usa VM_PAYLOAD_CONSOLE=1Se usa KVM cuando está disponible; de lo contrario, QEMU recurre a TCG.
UBUNTU_VERSION=26.04 \
VM_EXPECTED_KERNEL=7.0.0-31-generic \
./vm/build_image.sh
El compilador descarga la imagen cloud de la versión de Ubuntu seleccionada, la valida contra el archivo SHA256SUMS publicado por Ubuntu, instala actualizaciones de paquetes y Docker, descarga la imagen de contenedor de Ubuntu correspondiente y escribe vm/ubuntu-<version>.qcow2.
Las URL predeterminadas están fijadas a las últimas imágenes de versión oficial disponibles el 16 de septiembre de 2026:
2026091120260823Establezca UBUNTU_RELEASE_URL, UBUNTU_IMAGE_URL o UBUNTU_SUMS_URL para usar otra versión.
La imagen qcow2 generada y la clave SSH son artefactos locales ignorados por Git. La clave privada conserva el modo 0600.
UBUNTU_VERSION=26.04 \
VM_EXPECTED_KERNEL=7.0.0-31-generic \
./vm/run_container.sh ./path/to/binary [arguments...]
Cada ejecución crea una capa de superposición qcow2 temporal, arranca el invitado, copia el binario por SSH y lo lanza en un contenedor nuevo con la red deshabilitada. Se reenvían los argumentos, los flujos estándar y el estado de salida.
Ejecute sin un binario para abrir un shell interactivo en un contenedor nuevo:
./vm/run_container.sh
Use --shell con un binario para copiarlo en el invitado y montarlo en /payload sin ejecutarlo:
./vm/run_container.sh --shell ./path/to/binary
Sobrescrituras útiles:
VM_CPUS=4 VM_MEMORY_MB=4096 ./vm/run_container.sh ./binary
VM_SSH_PORT=2223 ./vm/run_container.sh ./binary
KEEP_VM_RUN_DIR=1 ./vm/run_container.sh ./binary
KEEP_VM_RUN_DIR=1 conserva la capa de superposición y los registros en /tmp/ubuntu-container.*. Cada invocación realiza un arranque de VM y un intento de carga útil. Establezca VM_PAYLOAD_CONSOLE=1 para una carga útil que use explícitamente el segundo puerto serie del invitado.