Questa PoC è stata scritta velocemente, non è nulla di speciale.
Sfrutta la nuova vulnerabilità RCE CVE-2023-27372 di SPIP.
È un difetto di deserializzazione che sfrutta l'uso pericoloso del tag #ENV durante la funzione di reset della password (spip.php?page=spip_pass) all'interno di "/ecrire/balise/formulaire_.php" Nello specifico questa riga:
Sintassi: python3 exploit.py -u http(s)://url.com
root@kitploit:~
function protege_champ($texte){
if (is_array($texte))
$texte = array_map('protege_champ',$texte);
else {
// ne pas corrompre une valeur serialize
if (preg_match(",^[abis]:\d+[:;],", $texte) AND unserialize($texte)!=false)
return $texte;
$texte = entites_html($texte);
$texte = str_replace("'","'",$texte);
}
return $texte;
}
La funzione protege_champ soffre di diversi difetti. Il controllo tramite espressione regolare (RE) utilizzato per validare l'input è difettoso e può essere facilmente bypassato. Il codice chiama la funzione unserialize senza una corretta validazione, consentendo l'esecuzione di codice arbitrario. Lo sfruttamento manuale può essere eseguito estremamente facilmente. Per esempio, se volessimo eseguire phpinfo(); possiamo fare:
root@kitploit:~
oubli=s:19:"<?phpinfo(); ?>";
Se il server restituisce l'output atteso, è vulnerabile. Come possiamo correggere? In realtà in modo abbastanza semplice. Di seguito, ho scritto una patch base: