Detalles
Descripción
La vulnerabilidad se localiza en el archivo Sources/Profile-Modify.php
Linea 802
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Profile-Modify.php#802
Ya que permite la inyección de código arbitrario debido a que verifica
únicamente que contenga los carácteres "://" pero no indicaron en que
posición del string debería estar por lo cual puedes escribir "://" al
final del código inyectado encapsulandolo en un comentario tal como el
siguiente ejemplo.
PoC:
En el perfil de tu usuario pon lo siguiente en el input de "Website URL"
javascript:alert(document.cookie);//http://xx
Solución
Código original de SMF 1.1.10 en Sources/Profile.php linea 602
reemplazar por
Código original de SMF 2.0 RC2 en Sources/Profile-Modify.php linea 753
Reemplazar por
Descripción: | XSS en el input "Sitio WEB" dentro del perfil de usuario |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/Profile-Modify.php:802 |
URL Vulnerable: | N/A |
PoC: | javascript:alert(document.cookie);//http://xx |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
Descripción
La vulnerabilidad se localiza en el archivo Sources/Profile-Modify.php
Linea 802
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Profile-Modify.php#802
Código (php) [Seleccionar]
if (strlen(trim($value)) > 0 && strpos($value, \'://\') === false)
$value = \'http://\' . $value;
Ya que permite la inyección de código arbitrario debido a que verifica
únicamente que contenga los carácteres "://" pero no indicaron en que
posición del string debería estar por lo cual puedes escribir "://" al
final del código inyectado encapsulandolo en un comentario tal como el
siguiente ejemplo.
PoC:
En el perfil de tu usuario pon lo siguiente en el input de "Website URL"
javascript:alert(document.cookie);//http://xx
Solución
Código original de SMF 1.1.10 en Sources/Profile.php linea 602
Código (php) [Seleccionar]
// Fix the URL...
if (isset($_POST['websiteUrl']))
{
if (strlen(trim($_POST['websiteUrl'])) > 0 && strpos($_POST['websiteUrl'], '://') === false)
$_POST['websiteUrl'] = 'http://' . $_POST['websiteUrl'];
if (strlen($_POST['websiteUrl']) < 8)
$_POST['websiteUrl'] = '';
}
reemplazar por
Código (php) [Seleccionar]
if($_POST['websiteUrl']){
$permitidos = array('http', 'https', 'ftp', 'ftps');
$protocolo = @explode('://', $_POST['websiteUrl']);
$protocolo = $protocolo[0];
foreach($permitidos as $permitido){
if(strtolower($protocolo) == strtolower($permitido)){
$valido = true;
break;
}
}
/* La url comienza con un protocolo no válido */
if(!$valido)
$_POST['websiteUrl'] = 'http://'.$_POST['websiteUrl'];
unset($permitidos, $permitido, $protocolo, $valido); /* Libera memoria */
/* Elimina urls no válidas */
if(strlen($_POST['websiteUrl']) < 8)
unset($_POST['websiteUrl']);
}
Código original de SMF 2.0 RC2 en Sources/Profile-Modify.php linea 753
Código (php) [Seleccionar]
// Fix the URL...
'input_validate' => create_function('&$value', '
if (strlen(trim($value)) > 0 && strpos($value, \'://\') === false)
$value = \'http://\' . $value;
if (strlen($value) < 8)
$value = \'\';
return true;
'),
Reemplazar por
Código (php) [Seleccionar]
// Parche - Fix the URL...
'input_validate' => create_function('&$value', '
if($_POST["websiteUrl"]){
$permitidos = array("http", "https", "ftp", "ftps");
$protocolo = @explode("://", $_POST["websiteUrl"]);
$protocolo = $protocolo[0];
foreach($permitidos as $permitido){
if(strtolower($protocolo) == strtolower($permitido)){
$valido = true;
break;
}
}
/* La url comienza con un protocolo no válido */
if(!$valido)
$_POST["websiteUrl"] = "http://".$_POST["websiteUrl"];
unset($permitidos, $permitido, $protocolo, $valido); /* Libera memoria */
/* Elimina urls no válidas */
if(strlen($_POST["websiteUrl"]) < 8)
unset($_POST["websiteUrl"]);
}
'),