
Este é um PoC para o CVE-2023-27372 e abre uma shell totalmente interativa.
É uma falha de desserialização que explora o uso perigoso da tag #ENV durante o recurso de redefinição de senha (spip.php?page=spip_pass) dentro de /ecrire/balise/formulaire_.php. Especificamente esta linha:
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;
}
A função protege_champ sofre de várias falhas. A verificação por expressão regular (ER) usada para validar a entrada é falha e pode ser facilmente contornada. O código chama a função unserialize() sem validação adequada, permitindo a execução de código arbitrário. A exploração manual pode ser realizada com extrema facilidade. Por exemplo, se quisermos executar , podemos fazer:
phpinfo();oubli=s:19:"<?phpinfo(); ?>";
Se o servidor retornar a saída esperada, ele está vulnerável. Como podemos corrigir? Na verdade, de forma bem simples. Abaixo, escrevi um patch 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;
}
A função protege_champ() corrigida inclui validação de entrada, sanitização e tratamento de entrada maliciosa.