Vamos a estudiar un poco este complemento para foros SMF, aprenderemos como repararlas y a testearlas.
Si solamente te interesa saber cuales son las fallas puedes ir directamente al final de este tema.
Primeramente tenemos que bajar su código fuente e instalarlo en un servidor local para poder entender las fallas e ir sacando conclusiones:
http://www.webmasterstalks.com/tpmod.html;dl=item48
No es de sorprenderse que no les interesa mucho la seguridad ya que en su propio foro utilizan una versión muy vieja de SMF con múltiples fallas ya avisadas y requete avisadas por simplemachines y sitios de advisories.
Bajamos SMF desde acá:
http://download.simplemachines.org/
Una ves ya instalado podemos comprobar algunas de las siguientes fallas.
SQL Inyección
Si no sabes que significa SQLi puedes visitar Google o Wikipedia.
http://www.google.cl/search?hl=es&q=inyecci%C3%B3n+sql&btnG=Buscar+con+Google&meta=
http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
Nos fijamos bién en el archivo seo4smf-redirect.php y podermos observar de plano las fallas:
Linea 7 al 13
Código
$topic = $_GET['t']; $board = $_GET['b']; $other = $_GET['o']; $user = $_GET['u']; $tpage = $_GET['p']; $action = $_GET['a']; $param = $_GET['param'];
Luego el bug propiamente tal:
Linea 50 al 63
Código
$query = db_query(" SELECT m.ID_TOPIC, m.subject ,b.ID_BOARD, b.name FROM {$db_prefix}messages AS m, {$db_prefix}boards AS b WHERE m.ID_TOPIC = $topic AND m.ID_BOARD = b.ID_BOARD IMIT 1", __FILE__, __LINE__);
Linea 105 al 108
Código
$query = db_query(" SELECT name FROM {$db_prefix}boards AS b WHERE ID_BOARD = $board LIMIT 1", __FILE__, __LINE__);
Linea 125
Código
$request = db_query("SELECT memberName FROM {$db_prefix}members where ID_MEMBER=".$user." limit 1", __FILE__, __LINE__);
Linea 143
Código
$request = db_query("SELECT subject FROM {$db_prefix}tp_articles where id=".$tpage." limit 1", __FILE__, __LINE__);
Ahora como podemos ver estas variables no contienen ningún tipo de filtro asi que procedemos a verificar nuestra inyección sql:
http://localhost/smf/seo4smf-redirect.php?t=-1 union select 1,2,3…(numero de columnas)…,concat(username(),database()) –
y bualá, ahora nos podemos aprovechar un poco mas y consultar a la base de datos el hash delid del administrador mas su password asalt para crearnos nuestra cookie y autentificarnos como administrador para luego subir un módulo infectado con alguna webshell o un php con comandos arbitrarios y obtener el control total del sitio.
Inyección de Headers, XSS y Path Disclosure
Otra falla poco común que podemos ver está en la linea 106 y dice así:
Código
exit; }
En mi caso lo estuve testeando en un servidor con una versión vieja de PHP que me permite inyectar headers haciendo un salto de linea, normalmente las versiones de ahora te lanza un error diciendo que no puedes declarar mas de un header por función:
http://localhost/seo4smf-redirect.php?a=x%0DLocation:%20javascript:alert(document.cookie);
Nos queda algo así:
En unos casos puedes causar un ataque XSS y en otros casos un Path disclosure ya que cuando el seo4smf te arroje el error de PHP este te revelará el directorio exacto del script dando lugar a otros tipos de ataques como la averiguación del directorio de configuraciones de SMF para un futuro ataque de LFI o Remote arbitrary download file.
Disclosure en temas y nombre de foros
Otra falla es que al momento de redireccionar algún tema este lo hace en el formato host/nombre_del_foro/nombre_del_tema sin verificar si estás autentificado como para diferenciar entre foros privados o no, por ejemplo podrías ingresar en la variable t de topic un tema que no tengas acceso y en la url te devolverá el nombre del foro privado y el nombre del tema aun sin estar logueado, por ejemplo:
http://localhost/seo4smf-redirect.php?t=1.new/topicseen
donde 1 es el número del tema, si no es privado te mostrará el tema normalmente, si es privado te mostrará un mensaje de error diciendo que no tienes acceso o no existe, en el caso de seo4smf te mostrará empty si el tema no existe, ya con eso podemos sacar como conclusión de que podremos crear nuestra propia herramienta que nos rastree desde el topic 1 hasta el último del foro y en el caso de que nos debuelva una url válida pero el contenido diga que no existe o está fuera de tus límites entonces es un foro privado y muchas veces el título dicen tanto como el contenido.
Antes de pasar a la siguente vulnerabilidad les presentaré el software que hize para auditar esta falla y recuerden que es solamente de uso personal y para pruebas locales:
Está hecho claramente para Window$ pero puede hacerse en cualquier lenguaje que se requiera sin esfuerzo mental alguno, la descarga está acá:
http://www.jccharry.com/greencode/filemanager/index.php?wfm-ruta=%2FCreaciones+propias%2FOtros%2Fseo4smf_exploit.zip
Está con su código fuente y todo.
Cross Site Request Forgery e Inyección de código arbitrário
Ahora si pasamos a la siguiente falla que son múltiples CSRF (ver Google y/o Wiki
http://www.google.cl/search?hl=es&q=csrf&btnG=Buscar+con+Google&meta=
http://en.wikipedia.org/wiki/Cross-site_request_forgery) los cuales me permiten modificar todo tipo de dato en el panel de administración de Seo4SMF remotamente. Supongamos que yo atacante hago una web donde hay un formulario que se envía por si solo hasta la web del atacante, en ese casi si la visita el Administrador y este está logueado podremos modificar lo que sea enviando variables en los formularios. El CSRF con mayor peligrosidad es poder modificar totalmente el archivo .htaccess de la raiz del directorio del foro teniendo la posibilidad de un desface total.Las configuraciones guardadas por este panel de Administración (http://localhost/seo4smfadmin.html) son puestas dentro de un archivo XML dando la posibilidad de inyectar parámetros o códigos arbitrarios al no existir ningún tipo de filtro, por ejemplo en una variable cualquiera puedes enviar “</xml><?php….” dejando un código PHP arbitrario que puede ser llamado posteriormente por una falla de tipo File Inclusión Local (LFI http://www.google.cl/search?hl=es&sa=X&oi=spell&resnum=1&ct=result&cd=1&q=local+file+inclusion&spell=1) ejecutando con éxito comandos arbitrarios de cualquier tipo sin que las configuraciones de un mod evasive o mod rewrite nos afecte ya que los datos viajan via POST y no via GET para que pueda ser procesada en %REQUEST_URI%.
Estas fueron solo algunas de las tantas fallas que incluye este sistema tán útil pero tán inseguro al mismo tiempo. Es dificil creer que los programadores de hoy todavía no les interese esto de la seguridad, después se quejan desgastandose en demandas cuando lo que tienen que hacer es leer y aprender de una buena ves por todas.
Fuente: http://www.jccharry.com/blog/2009/01/09/whk_fallas-criticas-en-seo4smf-para-foros-smf-simplemachines-forum.html
Esto solo son unas pocas fallas porque el sistema no contempla ningún tipo de filtro para nada asi que se puede encontrar de todo.