(In)seguridad en los foros [SMF]

Iniciado por ‭lipman, 14 Julio 2010, 10:23 AM

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

‭lipman

Los foros de la gente de simplemachines son de los más usados actualmente. No me extrañaría que fuese por la combinación diseño-características-gratis que reune este tipo de foros. Pero, ¿que hay de la seguridad?



Actualmente, la gran mayoria de personas asegura que usa la misma contraseña para todo (correo, registros de foros, y otras cuentas de mayor importancia como eBay o Paypal/Alertpay, etc) debido a la dificultad que supone tener que cuidar y guardar las diferentes contraseñas. Sin embargo, a pesar de esta incomodidad, la seguridad siempre debería de ser lo primordial para el usuario, sobre todo para el más inexperto (osease, la inmensa mayoria de usuarios).

Cuando instalamos en un servidor un foro (en este caso del tipo SMF) lo primero que hace es mirar la base de datos, y crear allí un registro, en donde a lo largo de la vida del foro se guardarán los posts, los subforos, las configuraciones, y los datos de los usuarios.

¿Los datos de los usuarios? Si. Esto es, los datos que tenemos en nuestro perfil del foro, como el avatar, el nickname, el nombre, la fecha de nacimiento, la firma, y la contraseña.

El administrador de cualquier foro puede acceder a la base de datos y ver/modificar/eliminar cualquiera de los datos anteriormente citados. Simplemachines piensa en todo (al igual que todos las empresas de ese estilo) y la mejor solución que le pone a esto es, cifrar la "contraseña". Le pongo comillas, porque en realidad, no se guarda la contraseña, sino que se guarda un hash, generado mediante el nombre de usuario y contraseña. Esto quiere decir que, cuando nos registramos, se guarda en la base de datos la cifrado mediante SHA1 del nombre de usuario junto con la contraseña.

Por ejemplo, si me registro, y pongo de usuario lipman y de contraseña password, en la base de datos se guarda la cifrado de lipmanpassword, de la siguiente simple manera:

Código (php) [Seleccionar]
sha1($nombreUsuario . $password)

Por lo que, cuando un administrador acceda a la base de datos, le será imposible obtener la contraseña de ese usuario. La única solución seria desencriptarlo mediante fuerza bruta, pero descartamos esta opción debido al inmenso tiempo que se tomaria.

¿Quiere decir esto que nuestra contraseña está a salvo?
Absolutamente no.

Se podrían hacer cientos de métodos distintos e incluso combinarlos, para averiguar las contraseñas de los usuarios que se registren. El más sencillo que se me ocurre es: justo al registrarse un usuario, guardar en la base de datos su contraseña sin cifrar. A continuación describiré cómo se podría realizar.



Lo primero de todo, tenemos que crear en la base de datos la columna en la que guardaremos estas contraseñas sin cifrar:

Código borrado por el autor



Queremos que este código se ejecute una sola vez, por eso, este código se encarga de buscar un archivo que no deberia de existir, y si no lo encuentra, realiza esa alteración en la base de datos y posteriormente lo crea (para que lo encuentre y no se ejecute esto nada más que una sola vez)



Las variables $db_server, $db_user, $db_name y $db_passwd son variables que contienen, como propiamente dan a indicar, el nombre del servidor, de usuario, de la base de datos y la contraseña respectivamente. Ya se encuentran con los valores, ya que estos se guardan en Settings.php

La línea interesante es la sexta: $consulta = "ALTER TABLE `$db_name`.`smf_members` ADD COLUMN `pwdlol` TEXT AFTER `memberName`;";

Esto crea en la tabla smf_members una columna llamada pwdlol después de la columna memberName (así tendremos la contraseña al lado del usuario, por comodidad)



Sigamos...

Código borrado por el autor

Este código simplemente guarda en las variables $contrasenha y $miembrouser la contraseña y el nombre de usuario (todo sin cifrar) y luego, introduce la contraseña en la tabla de pwdlol, en donde el memberName sea el mismo que el miembro registrado.



Preocupamente tengo que decir: ya está. Así de simple es obtener la contraseña de cada usuario que se registre en tu propio foro SMF.



¿Es esto preocupante? Personalmente, solo espero que cada vez que os registreis en un foro la próxima vez, penseis en ponerle otra contraseña que la de vuestro correo.

Próximo análisis: PhpBB

Fuente: http://delanover.com/2010/07/14/inseguridad-en-los-foros-smf/

Agradezco cualquier opinión, comentario, duda o sugerencia.

madpitbull_99

#1
Si quieres ver la seguridad en foros SMF solo mira la auditoria de seguridad que se hizó aqui en elhacker.net : Simple Audit

PD: por que citas como fuente tu proprio blog ? xD



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

‭lipman


invisible_hack

#3
En cuanto al tutorial, muy bien hecho, muy currado y bien explicado, se entiende muy fácil  :D

Pero, no creo que esto pudiese considerarse un "bug" de SMF (ya que lo posteaste en esta sección), porque en realidad lo que estás haciendo es modificando el código fuente del SMF para que te de la password del usuario descifrada y tal, pero no es un bug en sí mismo...

No sé si me entiendes...

Aunque quizás, tiene que ver con la seguridad de SMF...pero no sé, yo no lo consideraría bug... :P

Por otra parte, si realmente lo que quieres es ver lo que tiene el usuario en su cuenta, puedes cambiarle su password por otra que tu quieras, y listo...

Pero evidentemente, sin saber su password anterior...

De todos modos, lo único para lo que se me ocurre que podría valer esto es para hacer un "scam", y si queremos sacarle la password en cuestión al usuario, por si usa la misma password en otro sitio...

Pero nah, tendría que ser un usuario muy desprevenido para usar la misma password en varios sitios... :xD
"Si no visitas mi blog, Chuck te dará una patada giratoria"

Debci

Asi cualquier foro es inseguro xD

Saludos

braulio--

Si esto es una vulnerabilidad, la tienen todos los CMS que existen.

‭lipman

@invisible_hack

Con respecto lo primero xD en realidad lo posteé en el subforo de Seguridad ^^u me lo movieron a este, ya que como dices, es una modificación del propio código y yo tampoco consideraria bug esto, pero weno ^^

Con respecto lo segundo... no es que "queramos" saber lo que tiene dentro, como los mensajes privados y tal (que entonces, sí que podriamos hacer eso que tu dices de cambiarle la contraseña) El objetivo es averiguar la contraseña con la que nuestro usuario se registra, para poder verla y así, poder usarla en un futuro.

Todos sabemos lo fácil que es rastrear a una persona a partir de nick, correo, nombre-apellido, etc, y una vez rastreada la persona, esta puede tener cuentas de facebook, en foros, en blogs, etc. Y, el problema de la gran mayoria de users, es el uso que le dan a la contraseña, que ponen en todos lados la misma ^^ Simplemente queria demostrar (algo obvio por otra parte) otro modo de ver lo inseguro que es registrarse en un varios sitios con la misma contraseña, porque te la pillan en uno, y se pueden meter en todos =P

@Debci @braulio
Si.. es obvio xD el administrador puede modificar a su antojo absultamente todo, pero mi objetivo con es te (y los posteriores que haga) no es mostrar propiamente la inseguridad de un foro smf sin más, sino el objetivo es concienciar, de lo fácilmente que un administrador de cualquier sistema que requiera un registro, puede obtener la contraseña. De esta manera, nos concienciamos un poco todos en dejar de usar la misma pass para todo ^^

braulio--

Me conformo, está muy bien explicado.
Buen trabajo.

Debci

Que conste que en ningun momento he querido ofender a nadie, no me tienes que convencer de que es inseguro, ni de que es un exelentisimo tutorial ;)

Saludos

‭lipman

Que dices! ^^ nadie se ha ofendido  :)

Gracias por los comentarios!