
CVE-2026-66066 (KindaRails2Shell) PoC - Rails Active Storage/libvips arbitrary file read to RCE; for authorized security testing
Ruby on Rails Active Storage + libvips: herramienta PoC para lectura arbitraria de archivos → ejecución remota de código (RCE) condicional.
Archivo único, Python 3.11+, solo biblioteca estándar y cero dependencias, con cargas útiles híbridas MAT/HDF5, decodificador de píxeles PNG en Python puro, lectura por desplazamiento, recuperación de claves, RCE y modo de escaneo.
Rails confía en el content_type informado por el cliente (endpoint de subida directa), mientras que libvips inspecciona los bytes mágicos del archivo: el mismo archivo se interpreta como dos formatos diferentes en dos capas. El atacante construye archivos híbridos en los que los primeros 10 bytes de texto declaran MATLAB 5.0 y los bytes 124-125 (palabra de versión) declaran MAT 7.3 (HDF5); mediante el mecanismo External File List de HDF5, lee archivos arbitrarios del servidor (por defecto /proc/self/environ). Tras recuperar SECRET_KEY_BASE, falsifica la variación de firma y consigue ejecución de comandos condicional.
< 7.2.3.2 / >= 8.0, < 8.0.5.1 / >= 8.1, < 8.1.3.1python3 kr2s.py <command> [options]
Parámetros generales: URL objetivo / nombre de host / archivos por lotes, --entry, --proxy, rutas personalizadas, opciones TLS, timeout, User-Agent, etc. Consulta python3 kr2s.py --help para más detalles.
cd lab
RAILS_VERSION=8.1.3 docker compose up --build
Solo para investigación de seguridad, verificación de vulnerabilidades y pruebas defensivas. Los comandos read / check / scan --active / rce suben blobs persistentes al objetivo y ejecutan comandos en él; ejecútalo en un laboratorio Docker desechable y no lo uses contra objetivos no autorizados.
| Comando | Descripción |
|---|
check | Sube un blob para confirmar que el archivo objetivo es legible (invasivo) |
read <path> | Recupera el prefijo de tamaño fijo del archivo especificado (salida binaria) |
secrets | Recupera las variables de entorno del proceso y los archivos de credenciales de Rails (redactado por defecto; --show-full muestra los valores completos) |
rce | Recupera secret_key_base y ejecuta comandos de forma condicional (--skb permite omitir la lectura del entorno) |
probe | Detecta los cargadores no confiables de libvips disponibles en el objetivo |
scan | Escaneo pasivo/activo multihilo (--active sube un blob malicioso para hacer una lectura canary) |