Autor Tema: Vulnerabilidad Critica en SMF 2.0.3 - reseteo de contraseñas  (Leído 26413 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado WHK

  • 吴阿卡
  • Administrador
  • Aportador
  • *****
  • Mensajes: 555
  • Karma: +15/-3
  • Coder
    • Yahoo Instant Messenger - yan_uniko_102
    • Ver Perfil
    • WHK
    • Email
Hace muuuucho tiempo se habia mensionado de esta vulnerabilidad pero a pesar de que el staff de simplemachines nunca le habia tomado atención recien hace pocas horas despues de que el descubridor hizo un post en su blog publicando esta falla actualizaron a las versiones 1.1.18 y 2.0.4

Cito de la fuenre original:


 Simple Machines Forum is a popular web community software written in PHP. Its password reset mechanism had some issues back in 2008. The vulnerability was caused by insecure random numbers generation and was patched right after the exploit was published. This time I found a more interesting vulnerability however at Positive Technologies we didn’t manage to raise awareness of SMF developers. After continuous silence of SMF devs I am disclosing the vulnerability details but I am not going to publish the exploit.

The new vulnerability in password reset algo persists in SMF since the early versions and derives from insecure string handling and PHP weird type casting. The attack scenario based on incorrect string comparison was first described by Omar Ganiev and was applied to phpBB forum.

Despite the fact that the actual phpBB code made it infeasible to conduct the attack the core idea is rather interesting. Imagine a web application that generates password reset token that contains only hex symbols (a-f, 0-9) and is rather short. Now let me remind you about PHP type juggling pecularities.

If you use == operator to compare strings that contain numbers they will automatically be casted to integers, for example a string «123″ will be equal to an integer 123. But what is more interesting is the following abstract from PHP documentation on type juggling:

Citar
The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an ‘e’ or ‘E’ followed by one or more digits.


It means that if you compare a string «0e1337″ with a string «0″ they will be equal, because 0 power 1337 is zero. Not so many web developers are aware of this kind of unexpected magic, however it leads to a potential security hole. If an attacker starts to send password reset requests and iteratively tries to match it «0″ or «1″, one lucky request will let him set admin password.

So, what about SMF? It is an ideal example of one insecure piece of PHP code. Just see this:
Código: php [Seleccionar]
if (empty($_POST['code']) || substr($realCode, 0, 10) != substr(md5($_POST['code']), 0, 10))


Lack of !==, only 10 symbols and hex format. Excellent! As you can see $_POST['code'] is md5′d, so we need to find such values that will give us 0e[num] or 1e[num]. These values are:

Código: [Seleccionar]
md5(5136) == [0e79548081]b4bd0df3c77c5ba2c23289
md5(8301) == [1e79596878]b2320cac26dd792a6c51c9

However newer versions of SMF has a limitation of password reset rate to prevent bruteforce:

Código: php [Seleccionar]
if (empty($number_tries) || $time_stamp < (time() - 10))
{
    // If it wasn't *that* long ago, don't give them another five goes.
    $number_tries = !empty($number_tries) && $time_stamp < (time() - 20) ? 2 : 0;
    $time_stamp = time();
}


There is another bug. If an attacker sends a password reset request within 10-20 second interval the $number_tries will be set to 0 instead of 2. Obviously this was not SMF devs intention.

The successful attack requires about 6-10 k requests and can be done in a night. The older versions of SMF do not have this limitation, so you will be able to set new password in few hours.

Fuente: http://raz0r.name/vulnerabilities/simple-machines-forum/
Mi WEB - The Hacktivism is not a crime - Si no lo hago yo, que lo hagan otros -
Si has encontrado útil este articulo recuerda que puedes ayudarnos con tu donación voluntaria la cual ayudará al staff y a la mantención del foro.

Desconectado SMB

  • Recién llegado
  • *
  • Mensajes: 1
  • Karma: +0/-0
    • Ver Perfil
Re:Vulnerabilidad Critica en SMF 2.0.3 - reseteo de contraseñas
« Respuesta #1 : marzo 11, 2013, 10:25:32 pm »
No llego a entender como ejecutar esta vulnerabilidad... si me la puedes explicar mejor amigo?

Desconectado yoyahack

  • Recién llegado
  • *
  • Mensajes: 25
  • Karma: +0/-0
    • Ver Perfil
    • Email
Re:Vulnerabilidad Critica en SMF 2.0.3 - reseteo de contraseñas
« Respuesta #2 : marzo 12, 2013, 11:57:57 pm »
La vulnerabilidad se da al usar el operador == para realizar una comparación. El operador == verifica si los 2 valores son iguales y son del mismo tipo.

El truco esta cuando utilizas se utiliza el operador == en un contexto donde exista un valor numérico. Ya que lo que hará el operador es tratar el otro valor también como numérico. Y en una variable de tipo numérico puedes realizar directamente operaciones aritmeticas, por ejemplo:

Código: [Seleccionar]
$a = 1+1;
La variable $a seria igual a 2, también puedes realizar multiplicación, división y notación exponencial. Hay esta el truco jejeje, en la  notación exponencial.  Recordar que cuando se eleva 0 a cualquier otro numero, el resultado siempre sera 0 y cuando se eleva 1 a cualquier otro numero el resultado siempre sera 1.


Osea que esto:


Código: [Seleccionar]
$b = 0e78787878;


Siempre sera 0 y con el 1, siempre sera 1.


El bug esta en que SMF genera un token cuyo valor esta cifrado utilizando MD5. Y como sabes MD5 utiliza letras y numeros. Y si en algún punto dicho valor inicia con 0e5454asa o 1e45a45s45as al compararlo en un contexto numérico siempre dará 0 y 1. Si te mantienes mandando 0 o 1, como token, en algún momento podrá coincidir con y por lo tanto se reseteara la contraseña.


Saludos.

Daniel

  • Visitante
Re:Vulnerabilidad Critica en SMF 2.0.3 - reseteo de contraseñas
« Respuesta #3 : mayo 01, 2013, 09:01:48 pm »
Hola a todos ustedes, tengo un foro SMF version 2.0.4 y han entrado en dos oportunidades a la cuenta de administrador y han modificado el foro, los titulos de los foros.

Mi pregunta es, como hacen para entrar a mi cuenta? No comparto mi contraseña a nadie ni el correo.

Estoy pensando en cambiar de sistema, veo que SMF tiene demasiados bugs y aun por encontrar.

Bueno espero me respondan ya que antes usaba SMF y nunca habian entrado a mi cuenta de administrador.

Desconectado WHK

  • 吴阿卡
  • Administrador
  • Aportador
  • *****
  • Mensajes: 555
  • Karma: +15/-3
  • Coder
    • Yahoo Instant Messenger - yan_uniko_102
    • Ver Perfil
    • WHK
    • Email
Re:Vulnerabilidad Critica en SMF 2.0.3 - reseteo de contraseñas
« Respuesta #4 : mayo 02, 2013, 09:42:18 am »
Has pensado si a lo mejor eres tu el que está infectado con algún troyano o algo por el estilo?, son las situaciones mas comunes, o que simplemente alguien mas tenga acceso a tu pc o a tu correo y desde ahi recupera la contraseña.

Tienes muchos mods? talves tengas algún mod con inyección sql, has revisado el log de accesos de tu servidor WEB para ver como pudieron entrar? viste la ultima ip de acceso a tu panel de administración? buscaste esas ips en el log? Has revisado el log de errores de smf?

Deberias comenzar por ahi ya que en vbulletin hay muchos mods y plugines que tambien son vulnerables, de hecho para mi vbulletin y phpbb son mas propensos a ataques informáticos que smf 2.x

Dale una vuelta a tu servidor e intenta ver que sucedió, revisa bien tu pc e intenta averiguar quien fué el que te modificó el foro como para tener una idea de como pudo haber tenido ese acceso, si fué por confianza o por ataque a algún agujero de seguridad.

Saludos.
Mi WEB - The Hacktivism is not a crime - Si no lo hago yo, que lo hagan otros -


. . . . . . . .