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
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:
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:
function protege_champ($texte) {
if (is_array($texte)) {
$texte = array_map('protege_champ', $texte);
} else {
if (!isValidInput($texte)) {
$texte = 'Malicious input detected';
} else {
$texte = entites_html($texte);
$texte = str_replace("'", "'", $texte);
}
}
return $texte;
}
La función protege_champ parcheada incluye validación de entrada, sanitización y manejo de entrada maliciosa.
Por favor, no uses esto con fines maliciosos. Gracias.
<a href=https://twitter.com/0SPwn>Twitter