
Exploit Python per CVE-2018-15133, che consente di ottenere l'esecuzione di codice da remoto su applicazioni Laravel vulnerabili tramite deserializzazione non sicura di sessioni crittografate utilizzando una APP_KEY nota.
Questo script Python implementa un exploit di esecuzione remota di codice (RCE) per applicazioni Laravel vulnerabili tramite deserializzazione insicura, basandosi sulla vulnerabilità CVE-2018-15133.
L'exploit sfrutta una vulnerabilità in Laravel (versioni 5.5.40 e precedenti, e 5.6.0 a 5.6.29) in cui le sessioni crittografate vengono automaticamente deserializzate senza una corretta validazione. Con accesso alla chiave APP_KEY di Laravel, un attaccante può crittografare payload dannosi che verranno deserializzati ed eseguiti sul server.
Laravel utilizza un meccanismo di crittografia simmetrica per le sessioni con tre componenti:
IV (Initialization Vector): Vettore di inizializzazione casuale generato per ogni sessione
Value: Valore crittografato usando AES-128-CBC o AES-256-CBC
MAC: Codice di autenticazione del messaggio (HMAC-SHA256) calcolato su IV + value + APP_KEY
Riceve tre parametri di input: la chiave APP_KEY di Laravel in base64, il comando da eseguire e il dominio target
Invoca lo strumento PHPGGC con la catena gadget Laravel/RCE5 per generare una catena di oggetti PHP dannosi
Costruisce il comando del sistema operativo che verrà eseguito sul server vittima (esempio: system('whoami');)
Genera il payload serializzato PHP che contiene i gadget concatenati
Decodifica il payload da base64 a formato binario
Elabora la chiave APP_KEY rimuovendo il prefisso "base64:" se esiste
Completa il padding necessario affinché la chiave sia base64 valido
Decodifica la chiave da base64 a byte
Genera un vettore di inizializzazione (IV) casuale di 16 byte
Crittografa il payload usando AES in modalità CBC con la chiave e l'IV
Applica il padding PKCS7 al payload prima della crittografia
Codifica l'IV in base64
Codifica il ciphertext (payload crittografato) in base64
Concatena IV e value in base64 come messaggio per l'HMAC
Calcola il MAC usando HMAC-SHA256 sul messaggio concatenato con la chiave come segreto
Costruisce un oggetto JSON con tre campi: iv, value e mac
Codifica l'intero JSON in base64
Costruisce una richiesta HTTP usando curl con il payload nel cookie laravel_session
Invia la richiesta al dominio target
Il server Laravel riceve il cookie e decodifica il base64
Laravel verifica l'integrità del MAC rispetto all'IV e al value ricevuti
Laravel decifra il contenuto usando AES-CBC con la propria APP_KEY
Laravel deserializza automaticamente il contenuto decifrato
PHP invoca le funzioni magiche __destruct() o __wakeup() degli oggetti deserializzati
Viene innescata la catena di gadget che culmina in call_user_func() o eval()
Il comando del sistema operativo viene eseguito sul server
L'exploit utilizza catene di gadget che concatenano chiamate a funzioni magiche di PHP:
Durante la deserializzazione, PHP invoca automaticamente __destruct() o __wakeup(), avviando la catena che culmina in eval() eseguendo codice arbitrario.
Prerequisiti Affinché l'exploit funzioni, l'attaccante ha bisogno di:
La chiave APP_KEY di Laravel (ottenuta tramite perdita di variabili d'ambiente, bucket S3 esposti, codice sorgente, ecc.)
Versione vulnerabile di Laravel con deserializzazione abilitata per impostazione predefinita
PHPGGC installato nella directory ./phpggc/ https://github.com/ambionics/phpggc
Esempio di Utilizzo
python exploit.py "base64:dGhpc2lzYXNlY3JldGtleQ==" "whoami" "http://target.htb"
Questo comando genererà un payload serializzato che eseguirà whoami quando Laravel deserializzerà la sessione.