Introducción
En este post quería hacer referencia a los dos CVE que recientemente me han asignado por parte de INCIBE. En concreto, se trata de los siguientes CVE que se explicarán a continuación: 𝐂𝐕𝐄-𝟐𝟎𝟐𝟒-𝟗𝟏𝟗8 y 𝐂𝐕𝐄-𝟐𝟎𝟐𝟒-𝟗𝟏𝟗𝟗
Las vulnerabilidades que he descubierto se trata de XSS Stored via SVG y No rate limit respectivamente. A continuación pasaré a explicar como pude explotar cada una de ellas y como, finalmente, obtuve una asignación de un CVE por cada una de ellas.
𝐂𝐕𝐄-𝟐𝟎𝟐𝟒-𝟗𝟏𝟗8
Este CVE trata de una vulnerabilidad Alta referente a un XSS Stored via SVG.
- 𝐂𝐕𝐄-𝟐𝟎𝟐𝟒-𝟗𝟏𝟗𝟖: CVSS v3.1: 7.6 | CVSS AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:L/A:N | CWE-79
Explotación
Para empezar he de comentar que soy aficionado al fútbol sala y soy abonado de un equipo. Comento esto ya que existe una plataforma de abonados donde cada usuario puede gestionar sus datos personales como puede ser el nombre, el correo electrónico, contraseña, etc. Entre estos parámetros existe uno que es la imagen de perfil donde cada abonado puede subir una imagen. Es en este momento donde saltan las alarmas en mí e intenté subir una imagen maliciosa para ver si el servidor lo interpretase:
En el patch /public/profile cada abonado puede subir una imagen. En este punto de partida intenté realizar sin éxito la inclusión de varias imagenes maliciosas con extensión .jpg, .jpeg, .png hasta que me topé con la extensión .svg.
Los gráficos vectoriales escalables o gráficos vectoriales redimensionables (del inglés: Scalable Vector Graphics (SVG) es un formato de gráficos vectoriales bidimensionales, tanto estáticos como animados, en formato de lenguaje de marcado extensible XML (Extensible Markup Language), es decir que se compone por código y cuya especificación es un estándar abierto desarrollado por el W3C desde 1999. A diferencia de aquellos gráficos codificados en WebP, JPG, PNG, o TIFF (Rasters), los SVG pueden ser interactivos y dinámicos y esto se debe a que no se componen por mapa de bits, sino que están compuestos por vectores, que son instrucciones matemáticas que se le dan al navegador o programas de ediciones de estos gráficos vectoriales, para escalarlos de manera infinita y sin perder resolución o calidad en el gráfico.
Wikipedia.
Llegado a este punto y teniendo en cuenta lo citado anteriormente intenté inyectar una imagen maliciosa con extensión SVG se guardó correctamente en el servidor, cuando hice click derecho > abrir imagen en pestaña….
¡Magia!
Os indico una pantallazo de como pude abusar de la función onload dentro del cuerpo del XML
Mitigación
- Restringir la subida de imagenes con extensión .SVG.
- Impedir que se cargue código JavaScript con la ejecución de funciones como onload.
- Sanitizar la variable de entrada por parte del usuario.
𝐂𝐕𝐄-𝟐𝟎𝟐𝟒-𝟗𝟏𝟗𝟗
Este CVE trata de una vulnerabilidad Media referente a un No rate limit en ‘he olvidado mi contraseña’.
- 𝐂𝐕𝐄-𝟐𝟎𝟐𝟒-𝟗𝟏𝟗𝟗: CVSS v3.1: 5.8 | CVSS AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N | CWE-799
Explotación
Esta vulnerabilidad consiste en que no hay límite de frecuencia para las contraseñas olvidadas, lo que significa que no hay ningún mecanismo que impida que realices una solicitud en un corto período de tiempo. Esto se puede utilizar para enviar una cantidad ilimitada de solicitudes de contraseña olvidada a cualquier correo electrónico aleatorio que esté registrado en el sitio web.
Teniendo esto en cuenta intercepté la petición con el intruder, dentro de la posición q=0.3 introduje los caracteres especiales $ donde irán los payloads iterando
En el apartado ‘Payloads’ dentro del Intruder seleccioné el tipo de Payload: Null payloads y una cantidad de 200 para que llegasen 200 correos electrónicos a la víctima en poco tiempo a modo prueba de concepto:
Finalmente se observa como se enviaron 200 payloads null con un código exitoso por parte del servidor en poco tiempo:
El resultado fue el siguiente:
Mitigación
- Poner un delay entre cada envío del correo a nivel del servidor.
- Establecer un reCaptcha.
- Establecer un límite de envío de correos mínimo al día.
Conclusión
Después de enviar las evidencias pertinentes al equipo de CNA de INCIBE se pusieron en contacto con el fabricante, éste parcheo las vulnerabilidades e INCIBE me asignó las vulnerabilidades mediante la implementación de los dos CVE
Actualmente me encuentro así en el ranking:
Listado: https://www.incibe.es/incibe-cert/alerta-temprana/vulnerabilidades/asignacion-publicacion-cve
Espero seguir contribuyendo a fortificar más empresas y escalar en el ranking.
Muchas gracias a todos, espero que os haya gustado.