
CVE-2026-66066 (KindaRails2Shell) PoC - lettura arbitraria di file in Rails Active Storage/libvips fino a RCE; per test di sicurezza autorizzati
Ruby on Rails Active Storage + libvips lettura file arbitrari → PoC per esecuzione di codice remoto (RCE) condizionale.
File singolo, Python 3.11+, solo libreria standard, zero dipendenze, con payload misto MAT/HDF5 integrato, decoder PNG in puro Python, lettura a offset, recupero della chiave, modalità RCE e scansione.
Rails si fida del content_type riportato dal client (endpoint di upload diretto), mentre libvips annusa i magic bytes del file — lo stesso file viene interpretato come due formati diversi a due livelli. L'attaccante costruisce un file ibrido in cui "i primi 10 byte dichiarano testualmente MATLAB 5.0, mentre i byte 124-125 dichiarano il numero di versione MAT 7.3 (HDF5)" e, tramite il meccanismo HDF5 External File List, legge file arbitrari dal server (di default /proc/self/environ); dopo aver recuperato SECRET_KEY_BASE, contraffà una variation firmata e ottiene condizionalmente l'esecuzione di comandi.
< 7.2.3.2 / / >= 8.0, < 8.0.5.1>= 8.1, < 8.1.3.1python3 kr2s.py <command> [options]
| Comando | Descrizione |
|---|---|
check | Carica un blob per confermare che il file di destinazione sia leggibile (invasivo) |
read <path> | Recupera il prefisso a lunghezza fissa del file specificato (output binario) |
secrets | Recupera le variabili d'ambiente del processo e i file delle credenziali Rails (offuscati di default; --show-full mostra tutti i valori) |
rce | Recupera secret_key_base ed esegue comandi in modo condizionale (--skb per saltare la lettura dell'ambiente) |
probe | Sonda i loader non affidabili di libvips disponibili sul target |
scan | Scansione multithread passiva/attiva (--active carica un blob dannoso per una lettura canary) |
Parametri generali: URL di destinazione / nome host / file batch, --entry, --proxy, percorsi personalizzati, opzioni TLS, timeout, User-Agent, ecc.; consultare python3 kr2s.py --help.
cd lab
RAILS_VERSION=8.1.3 docker compose up --build
Solo per ricerca sulla sicurezza, verifica di vulnerabilità e test difensivi. I comandi read / check / scan --active / rce caricano blob persistenti sul target ed eseguono comandi su di esso. Eseguire in un lab Docker usa e getta, non utilizzare su target non autorizzati.