Mostrando entradas con la etiqueta CMS. Mostrar todas las entradas
Mostrando entradas con la etiqueta CMS. Mostrar todas las entradas

martes, septiembre 09, 2025

Xibo y la exposición "verbose" de la API de gestión

Xibo es una de las plataformas de Digital Signage más conocidas y utilizadas en entornos donde la gestión centralizada de contenidos resulta crítica. Desde un único panel de control, es posible definir qué se proyecta en pantallas distribuidas por aeropuertos, centros comerciales o estaciones de transporte. El sistema ofrece una solución flexible, con versiones comerciales y también en modalidad Open Source, lo que ha favorecido su adopción en múltiples organizaciones a nivel internacional.

Figura 1: Xibo y la exposición "verbose" de la API de gestión

Desde la perspectiva de la seguridad, hay un aspecto especialmente relevante: la exposición pública de la documentación de la API del sistema, habitualmente accesible en el archivo swagger.json. Este recurso, diseñado para facilitar la integración y el trabajo de desarrolladores, describe de manera exhaustiva todos los endpoints disponibles, los parámetros que aceptan y las operaciones que permiten ejecutar.

Figura 2: Fichero swagger.json con la exposición de la API.

Lo que en un entorno de desarrollo representa una ventaja, en producción se convierte en un riesgo. Publicar la especificación de la API equivale a entregar un mapa completo de la superficie de ataque, reduciendo el esfuerzo de reconocimiento de cualquier adversario. No se trata de una simple fuga de información, sino de un manual detallado sobre cómo interactuar con el sistema, incluyendo operaciones críticas como importación y exportación de datos o conectores remotos.

Fase de descubrimiento

El primer paso para evaluar la magnitud del problema consiste en identificar instancias de Xibo expuestas en Internet haciendo un poco de Hacking con Buscadores. Para ello, basta con aprovechar que la página de inicio del CMS utiliza un título característico: “Xibo Digital Signage

de Enrique Rando, publicado en 0xWord.

Mediante búsquedas específicas en Google (Google Dorks) es posible localizar rápidamente servidores que ejecutan Xibo. Por ejemplo: 

site:org intitle:"Xibo Digital Signage - Please Login"

Figura 4: Resultados de búsquedas con las URL de
sistemas Xibo accesibles desde Internet.

Estos operadores revelan instalaciones accesibles desde Internet que, en muchos casos, conservan configuraciones por defecto. A partir de aquí, un atacante podría comprobar si estas instancias publican también su documentación de API (/swagger.json, /swagger-ui/, /openapi.json). Esta fase de descubrimiento demuestra que no se trata de un caso aislado, sino de una práctica extendida que multiplica la superficie de exposición de un sistema en producción.

Descubrimiento de la documentación de la API

Una vez localizadas instancias de Xibo accesibles desde Internet, el siguiente paso en la auditoría consiste en comprobar si exponen públicamente la especificación de su API. Esta tarea resulta sencilla porque muchas instalaciones mantienen la documentación en rutas predecibles. Basta con probar accesos directos a:

https://[dominio]/swagger.json

o bien visitar:

https://[dominio]/swagger-ui/
https://[dominio]/openapi.json

para descubrir si el servidor devuelve la definición completa de la API en formato JSON o incluso una interfaz interactiva de Swagger. Desde el punto de vista de un auditor, o de un atacante, este paso representa un salto importante: se pasa de conocer únicamente que existe un CMS Xibo en la red, a disponer de un inventario detallado de todos los endpoints disponibles, sus métodos, parámetros y tipos de datos. En otras palabras, el sistema ofrece voluntariamente un mapa completo de su superficie de ataque.

Riesgos y escenarios de explotación

La exposición del fichero swagger.json en un entorno de producción abre la puerta a escenarios de explotación que, de otra manera, requerirían un esfuerzo mayor de reconocimiento. A continuación se presentan algunos de los riesgos más relevantes detectados en la especificación de Xibo:
  • Exfiltración de información
Algunos endpoints permiten descargar conjuntos de datos completos en formato CSV como el siguiente ejemplo encontrado.
    • GET /api/dataset/export/csv/{dataSetId}

En un escenario sin autenticación estricta o con permisos mal configurados, un atacante podría utilizar esta función para extraer información sensible de manera directa y silenciosa.
  • Manipulación mediante cargas de ficheros
La API incorpora rutas de importación que aceptan ficheros de carga en formato CSV, como el siguiente localizado:
    • POST /api/dataset/import/{dataSetId}
Si las validaciones son insuficientes, existe la posibilidad de introducir contenido malicioso, abusar del tamaño de los ficheros para provocar denegaciones de servicio o manipular la lógica de importación de datos para corromper el sistema.
  • Server-Side Request Forgery (SSRF)
Algunos endpoints permiten enviar parámetros como uri, method, customHeaders o postData. En un backend sin controles, estos campos pueden usarse para forzar al servidor a realizar peticiones hacia recursos internos o servicios protegidos, generando un escenario de SSRF con implicaciones graves, como el acceso a metadatos de nube o la enumeración de sistemas internos.

También es posible usarlo para actividades de Reconocimiento Avanzado, ya que incluso rutas aparentemente inocuas como /api/clock proporcionan valor para un atacante, ya que permiten confirmar disponibilidad, medir latencia y establecer un punto de control para sincronizar ataques automatizados.

Reflexión final

El caso de la exposición del fichero swagger.json en Xibo constituye un ejemplo representativo de un problema recurrente en el ámbito de la seguridad: la confusión entre facilitar la integración y garantizar la protección en entornos de producción. La documentación automática de la API resulta una herramienta de gran utilidad durante el desarrollo, pero en un despliegue abierto al público se convierte en un vector de riesgo que simplifica de forma notable las tareas de reconocimiento y ataque.

La cuestión no radica en la validez de la tecnología empleada, sino en las decisiones de configuración y despliegue adoptadas. La frontera entre la usabilidad y la exposición es sumamente estrecha, y basta una omisión, como la publicación inadvertida de un fichero de especificación, para que dicha frontera se diluya. En este sentido, el caso de Xibo debe entenderse como una llamada de atención: la seguridad no debe ser un aspecto accesorio, sino un criterio rector en cada fase del ciclo de vida de un sistema.

Saludos,

Autor: Amador Aparicio,  escritor de los libros “Raspberry Pi para Hackers & Makers: PoCs & Hacks Just for Fun!” y "Hacking Web Technologies 2ª Edición"  y Miembro del Grupo de Investigación en Ingeniería de la Privacidad del Departamento de Informática de la Universidad de Valladolid.


lunes, marzo 27, 2023

El "Leak del Login", el GDPR y el Esquema Nacional de Seguridad

No es la primera vez que hablo del "Leak del Login", pero como sorprendentemente me lo sigo encontrado en muchos sitios, voy a volver a hacer un pequeño artículo hoy sobre él, pero centrándome en su relación con el GDPR y el Esquema Nacional de Seguridad, pues es común encontrarlo en webs que han pasado la auditoría del ENS y tienen sus documentos de GDPR en regla. Voy a volver a hablar un poco de él, solo por hacer hincapié de la necesidad de que se eliminen las webs "verbose" que dan afiliación de personas a sus servicios de manera tan sencilla.

Figura 1: El "Leak del Login", el GDPR y el Esquema Nacional de Seguridad

Por supuesto, no soy experto en leyes y regulación, que para eso cuento con un equipo maravilloso, pero creo que erradicar estos bugs en las webs - sea un incumplimiento o no - es bueno para los clientes o usuarios de un servicio online, sea este el que sea.
 
"Leak del Login"

He hablado mucho sobre este tema, pero en resumen es tan sencillo como utilizar alguna de las capacidades de un servicio digital que se pueden utilizar sin haberse autenticado aún para saber si un usuario tiene o no cuenta en esa plataforma. Estas capacidades son tan comunes como:
  • Proceso de iniciar sesión o "Login".
  • Proceso de darse de alta o "Sign in".
  • Proceso de recuerpar contraseña o "Forget Password".
Estos tres procesos, que pueden parecer asociados a entornos autenticados, no lo son, pues todos pueden ser invocados sin necesidad de estar autenticado. Es normal que el proceso de "Iniciar Sesión" se lance desde una sesión no autenticada, al igual que es normal que un proceso de "Registro" deba realizarse desde una cuenta aún no regristrada, y lo mismo con el proceso de "Recuperar la contraseña".

Gestión de errores "verbose"

Todos son procesos tienen en común que en un determinado momento deben comprobar la identidad de la persona, ya sea por medio de un DNIe, un número de teléfono, un usuario o un correo electrónico, que es muy común. Y en todos ellos, la gestión de errores, debe ser clave, ya que si alguien puede usar un DNIe, un número de teléfono, un nombre de usuario o un correo electrónico de una persona que no sea ella, podría saber si tiene afiliación con esa plataforma. Es decir, si tiene una cuenta en ese servicio digital, lo que es un problema de privacidad, que puede ser utilizado como una forma de ataque contra la seguridad de la persona.

Figura 2: Se informa al que introduce el e-mail de si la cuenta existe o no
en un proceso de Registro

Para que entendáis el proceso, es como si alguien llegara a la recepción de una empresa y comenzara a preguntar si es cliente suyo una persona, y luego otra, y luego una tercera, y así hasta el infinito. Lógicamente, esto es una aberración y seguro que ninguno de vosotros lo permitiría en su empresa. Dar la lista de personas que han usado los servicios es algo que no entra dentro de lo entendible. Si eres una plataforma de masajes, ¿dejarías que alguien preguntara si una persona es cliente o no te tu empresa? No.

Figura 3: Proceso de Recuperación de contraseña con Leak


Pero por desgracia si los mensajes de error en esos tres procesos no están controlados, es como si hicieras eso. Si cuando alguien pide iniciar sesión y el sitio dice "Esta cuenta no existe" cuando la cuenta no existe, y "Contraseña errónea" cuando la cuenta existe, pues ya has dado todas esa información en el Login

Figura 4: Cuando la cuenta existe, envía el email de recuperación.

Lo mismo para Recuperar la contraseña, si cuando pones un e-mail, un DNIe o un número de teléfono, la web dice "La cuenta no existe" cuando no se ha dado de alta y "Te hemos enviado un mensaje para que continúes con el proceso" si la cuenta existe, pues lo mismo. Y en el proceso de Registro lo mismo, si te dice "esta cuenta ya existe" entonces, más claro el agua.

Cómo no ser "verbose"

Resolver este bug consiste en construir la lógica de manera que no llegue nunca un mensaje que sirva para saber si la cuenta existe o no en ninguna zona no autenticada. Y las soluciones son sencillas y se hacen en comunicaciones privadas. Cada uno de forma diferente, por ejemplo:
  • Login: Un mensaje de error de "Error en el usuario o la contraseña" en todas las situaciones en las que falle el proceso de login, no da ninguna información.
  • Registrarse: Se pide un correo electrónico o un número de teléfono, y se le informa por la web que se le va a enviar un mensajes para continuar con el proceso. Si la cuenta existe se informa por mensaje que alguien quiere crearse una cuenta con su identificador, que si es él ya tiene cuenta y puede recuperar la contraseña si no la tiene. Si es una cuenta nueva que aún no existe, se le envía un enlace al dueño del identificado para que continúe con el proceso de registro. De esta forma solo el dueño del e-mail o del número de teléfono pueden tener la información.
Figura 5: Proceso sin leak de información en proceso de Registro
  • Recuperar la contraseña: Con un mensaje de "Si esta cuenta existe, recibirá un mensaje en us buzón". Y se aplica la misma política que en el caso anterior. Se le envía el mensaje para recuperar la contraseña si existe y el enlace de darse de alta si la cuenta no existe. 
En los tres casos, se consigue que no se dé información de afiliación de una identidad a un servicio, y por lo tanto se mejora la privacidad y la seguridad del cliente o usuario de la plataforma.

Riesgos de conocer la afiliacion.

No somos nuevos en esto, y ya hemos visto que conocer la afiliación de una persona es un riesgo para esta persona a varios niveles:
  • Perfilado social: Por desgracia, los algoritmos de generación de insights con Machine Learning nos etiquetan en todo, desde reputación en Internet hasta Credit Scoring, hasta los anuncios que recibimos en la web. En casos como los de Cambridge Analytica, vimos que este perfilado de forma masiva podría llegar a utilizarse para difundir Fake News adaptadas que cambiaran el curso de votaciones políticas. A muchos se les ha olvidado ya.
  • Ataques de Spear-Phishing: Si se tienen datos de que una persona tiene cuenta en una plataforma, hacerle un ataque dirigido de phishing para robarle credenciales, tokens OAuth o simplemente infectarle con malware es mucho más efectivo. Si recibes un phishing de un banco donde tienes cuenta es más fácil que piques.
  • Ataques de Watering Hole: Si se sabe que una persona visita un servicio o una plataforma, se puede encontrar con que la web sea vulnerada para atacarle a él, o simplemente que aparezcan otros usuarios maliciosos dentro de la plataforma que le hagan una encerrona más imaginativa. Como encontrar al amor de tu vida dentro de esa plataforma, y que no sea más que un ataque elaborado.
Así que, filtrar el "Leak del Login", genera muchos problemas para la privacidad y seguridad de las personas que es lo que hay detrás de los usuarios y clientes y de un servicio online. Personas.

GDPR y Esquema Nacional de Seguridad

Dicho esto, el "Leak del Login" es un bug de privacidad. Un fallo. Algo que es muy sencillo de explotar, pero que es un fallo, ya que filtra la afiliación de personas a una web, y por tanto hay que eliminarlo. Sin embargo, he visto muchas webs de grandes empresas - y seguro que es fácil localizarlo en muchas apps, y muchos dominios - que no le prestan la menor atención a esto.

Figura 7: Leak del Login en WordPress.com

Incluso los componentes comunes de login de plataformas de e-Commerce, CMS, Blogs, redes sociales como Instagram o TikTok sufren este bug. La propia WordPress.com tiene este "Leak del Login", pero es fácil encontrarlo en Bancos con DNIs, en redes sociales, empresas de transportes, etcétera.
Y por supuesto, con procesos de GDRP y de Esquema Nacional de Seguridad pasados, lo que me deja un poco perplejo. Creo que esto debería estar entre las pruebas de auditoría básica de cualquier servicio digital, al igual que la búsqueda de metadatos en todos los documentos ofimáticos publicados externamente. Así que, si haces auditorías de GDPR, de ENS o simplemente un Hacking Ético, por favor, reporta todos los "Leak del Login" a ver si somos capaces de mejorar un poco la privacidad de las personas.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


martes, junio 04, 2019

WP Live Chat Support: Un nuevo plugin con un XSS que pone en riesgo tu WordPress

La seguridad relacionada con los plugins de WordPress es un problema recurrente que parece no tiene una solución a corto plazo. Ya hemos hablado varias veces, e incluso 0xWord tiene publicado un libro dedicado a íntegramente a la fortificar la seguridad WordPress, sobre la seguridad y los problemas de inseguridad de este CMS, el más utilizado en el mundo.

Figura 1: WP Live Chat Support: Un nuevo plugin con un XSS que pone en riesgo tu WordPress

Además, hace un par de meses publicamos un paper con diferentes técnicas para detectar y analizar la seguridad del código estático de estos plugins de WordPress, obteniendo como resultado final varios CVE los cuales detallan varias vulnerabilidades en los mismos.

Figura 2: Libro "Máxima Seguridad en WordPress"

A pesar de todos los esfuerzos para concienciar a los usuarios de WordPress, los problemas de seguridad siguen estando de máxima actualidad. En concreto, el último problema detectado consiste en explotar la vulnerabilidad de un plugin para desviar a los visitantes de la web hacia otras ubicaciones maliciosas.


Ya no basta con tener la instalación WordPress al día de actualizaciones, un posible vector de ataque también puede aparecer a través de los plugins. Eso sí, recuerda que “WordPress in Paranoid Mode” del cual ya hemos hablado varias veces (hasta hicimos una versión en Docker), es siempre la opción más segura. En esta conferencia Chema Alonso explica todos los detalles de nuestros procesos de fortificación en "Hardening WordPress Like a Hacker".


Figura 4: Hardening WordPress Like a Hacker


Este último incidente de seguridad, registrado hace un par días, (al menos 47 páginas web fueron víctimas de este exploit, y este número sigue subiendo) está relacionado con el plugin WP Live Chat Support, bastante popular con más de 50.000 instalaciones activas.

La explotación del plugin WP Live Chat Support

Este plugin permite a los visitantes de la web chatear en directo con los responsables a través de una interfaz diseñada para realizar dicha función. La vulnerabilidad explotada es un XSS o Cross Site Scripting, la cual permite insertar código malicioso (Javascript) en cualquier página web que utilice este plugin. Este es uno de los Client-Side Attacks más comunes y conocidos por los atacantes de tecnologías web.

Figura 5: Libro de Hacking Web Technologies: Client-Side Attacks
XSS | CSSP | SSRF|  XSPA | SSJS

Los desarrolladores de este plugin ya han publicado una versión nueva, la 8.0.27, que soluciona esta vulnerabilidad. En definitiva, está claro que actualizar los plugins de WordPress se ha convertido en una tarea crítica de seguridad.

Figura 6: Sitio web de WP Live Chat Support

Entrando un poco más en los detalles de esta vulnerabilidad, encontramos que el problema está asociado a una llamada (hook) “admin_init” no segura la cual es la causante de la inyección de código. Este código malicioso inyectado en la web aparece ofuscado, como se puede ver en la siguiente imagen:

Figura 7: Código ofuscado del script inyectado

Y este es el código resultante una vez decodificado es el que se puede ver en la Figura 8. Por lo tanto, desde cualquier ubicación de la web en la cual aparezca la opción de WP Live Chat Support (es decir, el icono del plugin) sería posible inyectar código malicioso.

Figura 8: Código fuente del script decodificado

Echando un vistazo al análisis realizado por la empresa de seguridad Zscaler´s ThreatLabZ, podemos observar que el código del script inyectado hace una llamada a la web hxxps://blackawardago[.]com desde la cual se ejecuta el script principal. Como consecuencia de su ejecución, los visitantes se redirigen a múltiples URLs las cuales publican pop-ups de publicidad, errores falsos, etcétera. En la siguiente imagen se muestran algunas de estas URLs:

Figura 9: Código fuente del script decodificado

Mantener la seguridad de nuestro sitio WordPress es una prioridad absoluta, pero como hemos podido observar, no podemos centrarnos sólo en la seguridad del CMS exclusivamente. Los plugins se están convirtiendo en el mayor problema relacionado con la seguridad de WordPress. De nada sirve tener nuestra web al día si no realizamos un seguimiento e incluso auditorías, de los plugins instalados.


Figura 10: Faast For WordPress de ElevenPaths

Si necesitas una solución profesional para auditar y mantener segura tu página WordPress, recuerda que ElevenPaths ofrece la solución Faast For WordPress, un servicio de pentesting persistente para sitios con dominio WordPress. Más Referencias:

[Libro] Máxima Seguridad en WordPress
[Libro] Hardening GNU/Linux
[Paper] WordPress in Paranoid Mode (Parte 1)
[Paper] WordPress in Paranoid Mode (Parte 2)
[Paper] Detección y estimación de vulnerabilidades en WordPress
[Vídeo] Proteger WordPress con Latch
[Vídeo] Proteger WordPress con Latch Cloud TOTP
[Vídeo] MyWordPress in Paranoid Mode (conferencia Chema Alonso)
[Vídeo] MyWordPress in Paranoid Mode (ElevenPaths Talks de Pablo González)
[Vídeo] Ejemplo de uso de Latch en WordPress
[Vídeo] Hardening WordPress like a hacker
[Vídeo] WordPress Demo XSS en WP-UserAgent
[BlogPost] My WordPress in Paranoid Mode
[BlogPost] Máxima Seguridad en WordPress
[BlogPost] Hackear un WordPress con Network Packet Manipulation
[BlogPost] Fortificar comunicación entre WordPress y MySQL
[BlogPost] WordPress Latch Enforcement
[BlogPost] WordPress aún más seguro con Latch Lock After Request
[BlogPost] Fortificar WordPress frente a ataques de fuerza bruta
[BlogPost] Ataques (al corazón) de tu WordPress
[BlogPost] Cómo robarle las contraseñas a los administradores de WordPress
[BlogPost] Agrupar el control de varios WordPress con un solo Latch
[BlogPost] WordPress: Time-Based XSPA (Cross-Site Port Attack)
[BlogPost] Cómo debería ser un WordPress un poco más seguro
[BlogPost] WPHardening: Automatizar fortificación de WordPress
[BlogPost] Protege los borradores de los artículos de tu WordPress
[BlogPost] Registro de cuentas en WordPress públicos
[BlogPost] Riesgos en la ejecución de tareas de Cron
[BlogPost] WordPres: XSS en plugin WP-UserAgent
[BlogPost] Listar los plugins de WordPress en un pentest
[BlogPost] WordPress: SQL Injection en Scarcity Builder Plugin
[BlogPost] Docker WordPress in Paranoid Mode
[BlogPost] Faast for WordPress
[BlogPost] Cómo buscar {y encontrar} 0days en plugins de WordPress

Autor: Fran Ramírez, (@cyberhadesblog) es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades.

martes, abril 04, 2017

Cómo proteger Umbraco CMS con Latch

Ayer por la noche conseguí robar algo de tiempo al reloj para pararme a ver en detalle cómo había sido creado y cómo funcionaba el plugin de Latch para Umbraco CMS, y me he decidido a escribiros una pequeña referencia sobre él, por la manera en que se ha concebido esta solución. Quería verlo en detalle, porque cada integración de Latch en un sistema depende de cómo la piense el desarrollador, ya que dependiendo de la manera en que se haga las características nuevas pueden cambiar.

Figura 1: Latch para Umbraco CMS

Hoy en día Latch es un sistema muy maduro, con muchas opciones, que permite configurar detalles en el Segundo Factor de Autorización muy diversos. Desde el uso de las Instancias para controlar detalles de manera dinámica, hasta el uso de los WebHooks[necesitas estar loggado] para recibir actualizaciones push aplicaciones, pasando por el uso de los códigos OTP, los listados de logs detallados, el reciente Cloud TOTP o la última implementación de Limited Secrets que tienes ya en la documentación.
Así, por poner un ejemplo usando integrado para mejorar la seguridad de WordPress, hemos visto que podíamos integrarlo con un Segundo Factor de Autenticación en el proceso de login de WordPress, pero también se puede poner como 2FA en los triggers de la base de datos como hicimos en la PoC de WordPress in Paranoid Mode, o cómo se podían, jugando con los ApplicationID controlar múltiples WordPress con un solo Latch.

PoC de Latch para Umbraco CMS

Jugando con las opciones de Latch puedes hacer muchas cosas. En esta implementación de Latch que se integra en Umbraco CMS - Umbraco CMS es un framework Open Source para gestionar sitios web -,  el plugin extiende las funcionalidades de administración. Al más puro WordPress in Paranoid Mode. Es decir, no es una implementación a nivel de usuario, sino a nivel de administración.

Figura 3: Configuración de Operaciones Latch en Umbraco CMS

Como se puede ver en la imagen, una vez instalado el plugin aparece una nueva sección en el panel de configuración del sitio. La única operación que hay en Latch para Umbraco al principio es para permitir o denegar el proceso de Login a todos los usuarios. Sin embargo, la implementación que se ha hecho del plugin permite al usuario administrador - desde el propio panel de Umbraco CMS - crear reglas dinámicamente para permitir o denegar determinadas acciones para un usuario en concreto o varios miembros del sitio.

Figura 4: Sitio web de Latch pra Umbraco CMS
Es decir, como se puede ver en la imagen, el administrador puede crear una regla dinámicamente que afecte a todos o a un usuario concreto, y que le permita o deniegue realizar una acción muy concreta con el panel de Umbraco CMS, como borrar contenido, crear contenido, o acceder al backoffice del sistema.

Figura 5: Vídeo de la PoC de Latch para Umbraco CMS

Con este plugin, el administrador tiene un control de lo que hacen todos los usuarios de Umbraco CMS en la plataforma, y el Latch se va configurando de forma dinámica, haciendo uso de las Instancias en Latch, lo que hace que aparezcan o desaparezcan de manera automática nuevos controles sobre el sitio. 

Figura 6: Latch para Umbraco CMS en GitHub

Tienes la documentación y el código de este plugin de Latch para Umbraco CMS en la web que el autor del mismo, Christian Amaya, ha hecho para mantenerlo y en el vídeo tienes un ejemplo de utilización muy claro para que se entienda su funcionamiento. Si tienes un sitio web con Umbraco CMS, puedes probarlo y sacarle partido.

Saludos Malignos!

martes, noviembre 08, 2016

Cómo explotar los 2 bugs críticos de MySQL para ser root en el servidor GNU/Linux de tu WordPress (u otro CMS)

A finales de la semana pasada se publicó una vulnerabilidad de las denominadas como críticas y que además venía en formato doble. El producto afectado, en esta ocasión, era MySQL, uno de los motores de base de datos más utilizados en Internet. No hace mucho, teníamos una grave vulnerabilidad que afectaba al kernel de GNU/Linux y que provocaba la escalada de privilegios en un sistema, como fue DirtyCOW. En esta ocasión, el problema radica en el motor de base de datos MySQL.

Figura 1: Cómo explotar los 2 bugs críticos de MySQL para ser root en
el servidor GNU/Linux de tu WordPress (u otro CMS)

Hace más o menos un mes, el investigador Dawid Golunski, reportó dos vulnerabilidades críticas sobre el popular motor de base de datos MySQL. La primera vulnerabilidad era la CVE-2016-6663 y la segunda la CVE-2016-6664. El investigador documentó una prueba de concepto, en el que se puede ver como se aprovecha de la segunda vulnerabilidad para lograr la escalada de privilegios.

La primera vulnerabilidad es un fallo de condición de carrera que provoca la escalada de privilegios, por lo que un atacante con acceso a la máquina podría ejecutar código arbitrario en un contexto superior al suyo. El investigador polaco indicó que esta vulnerabilidad puede permitir que un usuario local con acceso a la base de datos afectada pueda elevar su privilegio en el contexto de la base de datos, pudiendo ejecutar comandos como usuario mysql. La explotación permitiría a un atacante acceder a todas las bases de datos que se encontrasen creadas o almacenadas en la plataforma. Aquí el vídeo de la demostración.

El investigador Golunski descubrió que un potencial atacante podría llegar a comprometer la seguridad global del servidor con la otra vulnerabilidad, la CVE-2016-6664. La segunda vulnerabilidad permite la escalada de privilegios a root. El fallo reside en que los usuarios que tienen acceso al usuario mysql dentro del sistema, éste se consigue con la vulnerabilidad tratada anteriormente, pueden lograr el máximo privilegio en el sistema gracias a la forma en la que se administran los registros de errores, ya que estos realizan operaciones de forma insegura, pudiéndose añadir un archivo con código arbitrario.

PoC: Jugando con ambos y logrando mysql user & root user

El paso inicial de llegar al equipo, a través por ejemplo de una vulnerabilidad web que permita ejecutar código en una máquina, nos lo saltamos. Incluso, puede que la vulnerabilidad fuera explotada por un auditor con acceso físico a dicha máquina. Sea como sea, comenzamos con una shell en el equipo. Un ejemplo perfecto de creación de exploits en Linux.

El primer paso es comprobar, mediante la ejecución del comando mysql –version, la versión del sistema instalado. Para MySQL son las siguientes:
• Menor que 5.5.51
• Menor que 5.6.32
• Menor que 5.7.14
Compilando el exploit, que se puede encontrar en exploit-db, de la primera vulnerabilidad, tenemos que tener en cuenta que el sistema tenga instalado libmysqlclient-dev. Una vez compilado obtenemos el binario.

Figura 2: Compilación del binario

En este punto necesitaremos disponer de información de un usuario de la base de datos, contraseña, su cadena de conexión. Cuando el usuario se encuentra dentro del sistema puede buscar dicha información, a través, por ejemplo, de la aplicación web vulnerada, si ésta tuviera una base de datos detrás, por ejemplo, Wordpress.

Figura 3: Explotando el motor MySQL de un Wordpress

Al final obtenemos un mensaje en el que nos indica que todo ha ido bien, que tenemos el rol de mysql user y que desde aquí podemos llevar a cabo la escalada total y final de privilegios, a través de la explotación de la vulnerabilidad CVE-2016-6664.

Figura 4: El exploit da acceso con el rol mysql user

Una vez nos encontramos en este punto, vamos a lograr la shell de root. Ahora, aprovechándonos del exploit desarrollado por Dawid Golunski, vamos a aprovecharnos de la mala gestión de los ficheros de error que hace el sistema. Ahora, desde la consola conseguida anteriormente, debemos ejecutar el fichero bash script que se puede obtener desde exploit-db.

Figura 5: Ahora con la segunda vulnerabilidad se consigue sheel de root

Dicha ejecución nos proporciona una consola como root, teniendo acceso global al sistema gracias a encadenar dichas vulnerabilidades. A día de hoy, estas dos vulnerabilidades son críticas, pero existe solución para ellas, por lo que se recomienda a los equipos de IT que actualicen lo antes posible sus sistemas de producción.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell

martes, junio 07, 2016

Nipper Toolkit for Android: Una revisión rápida de tu CMS #CMS #WordPress #Joomla #Drupal

Nipper Toolkit Web Scan para Android es una herramienta que permite comprobar vulnerabilidades en los CMS (Content Management System) comúnmente utilizados, es decir, plataformas como Wordpress, Drupal, Joomla!, etcétera, que te puedes encontrar en cualquier sitio de Internet o en la Intranet. Nipper Toolkit Web Scan es una herramienta que dispone de 15 módulos distintos para la recopilación de información de una determinada dirección URL proporcionada por un usuario y que explota algunos de los bugs más comunes, y que puede completar la colección de herramientas que puedes llevar en un terminal Android, como DSploit, Intercepter-ng o WiFiKill, junto con tu Metasploit de base.

Figura 1: Nipper Toolkit for Android: Una revisión rápida de tu CMS

Este tipo de herramientas están creadas para aquellos auditores de seguridad que quieren realizar pruebas de seguridad desde un terminal móvil sin llamar la atención. ¿Cuántas veces has visto a alguien sentado en la sala de espera de tu empresa usando su teléfono? Pues ese podría ser un auditor haciendo una prueba de seguridad, o un atacante que está en tu WiFi en medio de un APT. Aunque tengas el WordPress o el Joomla! en tu Intranet, no pienses que un atacante no puede estar rondando por ella.

Funcionamiento de Nipper Toolkit

Nipper Toolkit es una herramienta que busca bugs y explota fallos en servidores web, por lo no necesitaremos permisos de root para que funcione, con tener conexión de red será suficiente. Podemos adquirirla directamente en el Google Play Store y es completamente gratuita pero solo funcionará si nuestra versión de Android es la 3.0 o superior.

Figura 2: Introducción de una URL del CMS a auditar

Una vez hayamos descargado la app la abriremos y aparecerá el menú principal. En la parte superior encontraremos un icono con tres putos donde pulsando podremos ver la versión del programa e información sobre el desarrollador.

En la parte central de la pantalla encontraremos una ventana para introducir la URL sobre la que queramos lanzar las pruebas y sobre ésta un botón con el símbolo “Play”. Una vez introducida la URL pulsaremos sobre él y tras unos segundos nos mostrara en pantalla la plataforma utilizada por la web, su dirección IP, el tipo de servidor y nos permitirá ver su código fuente. También mostrara algunos módulos.

Figura 3: Información básica del CMS auditado

Si miramos en la parte superior encontraremos tres botones, el botón de la izquierda es el botón de retroceso, a su derecha encontraremos el botón –“Share”- que nos permitirá compartir la aplicación y la información conseguida sobre la URL, el ultimo botón -“3 puntos”- nos dará la opción de buscar en Exploit-DB y la opción ButeForceWP en su versión beta, esta opción nos permitiría iniciar un ataque de fuerza bruta con un CMS de tipo Wordpress, como los que se explican en este artículo "Cómo fortificar tu Wordpress frente a ataques de fuerza bruta"

Figura 4: Módulos para analizar un WordPress con Nipper Toolkit

A continuación explicare lo que hacen algunos de los módulos que nos podemos encontrar tras realizar un análisis. Estos serán distintos en función del dominio y la plataforma que estemos analizando. Algunos de sus módulos son:
DNS Lookup: este módulo se utiliza para identificar los servidores del dominio seleccionado, nos mostrará también el nombre del servidor en formato TXT. 
Nmap: Nmap nos permite realizar un escaneo de puertos a nuestro objetivo, una vez tengamos el listado de estos podremos observar cuales están abiertos, esta información nos sería muy útil a la hora de realizar algunos ataques.
Figura 5: Ejecutando Nmap
Enumeración de usuarios: Este módulo realiza un escaneo en búsqueda de usuarios, en este caso usuarios de Wordpress, realizando un listado de los usuarios encontrados, tal y como se hace con WPScan. 
Enumeración de Plugins: Con este módulo podremos extraer los detalles de los plugins utilizados, este escaneo tardara un poco, pero nos proporcionara un listado de plugins y nos dará la opción de buscar exploits, introduciremos los plugins de los que queramos obtener exploits y realizaremos una búsqueda en ExploitDB, también podemos realizar una búsqueda sin introducir el plugin del que queremos conseguir exploits y obtendremos todos los exploits al mismo tiempo. Lo que hay por detrás son los trucos explicados en este artículo: Cómo listar plugins de WordPress. 
Figura 6: Listado de plugins
Theme identify: nos mostrara los detalles sobre el tema utilizado en la web. Algunos de ellos tienen bugs conocidos. 
Core Analysis: Este módulo nos mostrara la versión de la web CMS objetivo utilizando un fingerprinting basado en el reconocimiento de ficheros utilizados en la plataforma.
Figura 7: Información del Core

En caso de que la web CMS se tratase de una plataforma Drupal encontraremos otro modulo llamado “Drupal Modules”, personalizada con otro tipo de ataques.

Nipper es una herramienta sencilla e intuitiva con la que podremos realizar mini-auditorías de seguridad a una web de forma rápida desde nuestra mano, en cualquier sala de espera de una empresa, de una forma fácil y rápida automatizando algunos de los ataques conocidos para estos CMS. Tal vez no hagas una auditoría completa, pero a lo mejor en unos minutos, aprovechando el tiempo en la salita, seas capaz de llevarte la lista de usuarios o info de cómo está administrado ese WordPress que has encontrado en la Intranet accesible por la web.

Autor: Sergio Sancho Azcoitia

jueves, mayo 19, 2016

Time-Based XSPA (Cross-Site Port Attack) en DBKISS

No hace demasiados días os hablé de un bug de Time-Based XSPA en los scripts de instalación de WordPress, y hoy os quiero hablar de otro caso similar con un WebGUI para administrar motores de bases de datos MySQL y PostgreSQL que se llama DBKiss. Es un bug curioso que en este caso se explota bien con el driver de PostgreSQL. Os lo explico en este post.

Figura 1: Time-Based XSPA (Cross-Site Port Attack) en DBKiss

Los bugs de XPSA (Cross-Site Port Attack) se basan en la explotación de un SSRF (Server-Side Request Forgery) mediante la que un atacante fuerza a la aplicación a realizar una determinada conexión a un servicio que se encuentra en un servidor corriendo por un puerto para poder así escanear los puertos de un servidor objetivo. En este caso, aprovechándonos de que la aplicación vulnerable es un WebGUI que muchos usuarios implanta en sus sitios web para gestionar la base de datos MySQL de WordPress o de cualquier otro CMS, basta con manipular los datos de la cadena de conexión.

Figura 2: Un DBKiss gestionando el MySQL de un WordPress

Hay que tener cuidado con publicar estos scripts a la ligera, pues muchas veces son herramientas en proceso de desarrollo o con vulnerabilidades conocidas. Basta con ver el código fuente de DBKiss para darse cuenta de que aún le quedan muchas cosas que corregir a esta herramienta antes de poder instalarse y publicarse a Internet, ya que se estarían asumiendo muchos riesgos.

Figura 3: Cosas aún por solucionar en los comentarios de DKiss (XSS y CSRF)

El peligro de poner estos scripts vulnerables a estas técnicas de XSPA es que el servidor objetivo al que se quiere escanear puede estar dentro de la DMZ, es decir, con direccionamiento en la red local, ya que basta con que el servidor web tenga conectividad con ellos. Con un aplicación web vulnerable a XSPA en un servidor de la DMZ, un atacante podría hacer un mapa detallado de todos los servidores y todos los puertos que estos tienen abiertos.

Time-Based XSPA en DBKiss

En el caso de los ataques de Time-Based XSPA, el atacante mide el tiempo de respuesta de cada conexión para saber si es un resultado que indica que el puerto está abierto, o un un resultado que indica que el puerto está cerrado. Para esto, en las cadenas de conexión a bases de datos el bug se aprovecha de que la configuración de la conexión no tenga un Time-Out bien configurado que evite que el atacante pueda medir las diferencias temporales en las respuestas sin error.

Figura 4: Con la conexión al puerto 80 usando el driver de PostgreSQL el tiempo de respuesta es corto

Como se puede ver, si forzamos una conexión con DBKiss contra un servidor con un puerto abierto, en este caso contra el puerto 80 de la web de Eleven Paths utilizando el driver de PostgreSQL, podemos ver que se obtiene un tiempo de respuesta muy corto.

Figura 5: Con el puerto cerrado el tiempo de respuesta es muy alto y salta el Time-Out por defecto

Si hacemos lo mismo contra un puerto que esté cerrado, lo que pasamos a obtener es un tiempo de respuesta muy largo que llega a generar un Time-Out en la web, es decir, que el tiempo configurado por defecto de Time-Out en la conexión de la base de datos es mayor que el Time-Out configurado en el servidor web.

Figura 6: Hay que configurar el Time-Out en la conexión a PostgreSQL para evitar este leak

Al final, estas vulnerabilidades abren la captura de información de la infraestructura de una organización a un atacante que en un APT será de gran utilidad para poder planificar el siguiente paso del ataque. Cuidado con lo que publicas en tu servidor web.

Saludos Malignos!

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares