
Esto es un PoC para CVE-2023-27372 y genera un shell completamente interactivo.
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:
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 sufre varios fallos. La verificación de expresión regular (RE) utilizada para validar la entrada es defectuosa y puede ser omitida fácilmente. El código llama a la función unserialize() sin una validación adecuada, permitiendo la ejecución de código arbitrario. La explotación manual se puede realizar de manera extremadamente fácil. 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 parchar? 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.