Este PoC fue escrito rápidamente, no es nada especial.
Esto explota la nueva vulnerabilidad de RCE en SPIP CVE-2023-27372.
Es una falla de deserialización que explota el uso peligroso de la etiqueta #ENV durante la función de restablecimiento de contraseña (spip.php?page=spip_pass) dentro de "/ecrire/balise/formulaire_.php". Específicamente esta línea:
Sintaxis: 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 función protege_champ tiene varios fallos. La comprobación de expresión regular (RE) utilizada para validar la entrada es defectuosa y se puede omitir fácilmente. El código llama a la función unserialize sin la validación adecuada, lo que permite la ejecución de código arbitrario. La explotación manual se puede realizar con extrema facilidad. Por ejemplo, si quisiéramos ejecutar phpinfo(); podemos hacer:
root@kitploit:~
oubli=s:19:"<?phpinfo(); ?>";
Si el servidor devuelve la salida esperada, es vulnerable. ¿Cómo podemos parchearlo? Bastante simple en realidad. A continuación, he escrito un parche básico: