A10:2021 – Server-Side Request Forgery (SSRF)
DescripciónEl ataque 'Server-Side Request Forgery' (SSRF) es un tipo de ataque en el que un atacante abusa de la funcionalidad de un servidor para realizar solicitudes HTTP a recursos internos o externos no autorizados. En esencia, se engaña al servidor para que realice acciones no deseadas en nombre del atacante.ImpactoEste tipo de ataque puede tener graves consecuencias para la seguridad de una aplicación web y la infraestructura subyacente. Algunos de los impactos potenciales incluyen:Acceso no autorizado a recursos internos: El atacante puede acceder a sistemas y datos que normalmente están protegidos por firewalls o restricciones de red. Evasión de controles de seguridad: SSRF puede permitir a los atacantes eludir medidas de seguridad como firewalls y listas de control de acceso. Exfiltración de datos sensibles: Los atacantes pueden utilizar SSRF para extraer información confidencial de sistemas internos. Escaneo de puertos internos: SSRF puede ser utilizado para mapear la red interna y descubrir servicios vulnerables. Ejecución de código remoto: En casos extremos, SSRF puede llevar a la ejecución de código arbitrario en el servidor comprometido. Dada la gravedad de estos impactos, es crucial que los desarrolladores implementen medidas de seguridad robustas para prevenir y mitigar los ataques SSRF en sus aplicaciones web.Ejemplos Prácticos1. Acceso a servicios internosEsto puede permitir al atacante acceder a sistemas y datos normalmente protegidos por firewalls o restricciones de red, como bases de datos internas o paneles de administración.http://vulnerable-app.com/fetch?url=http://localhost:8080/adminEn este ejemplo, si la aplicación no valida adecuadamente la URL proporcionada, podría realizar una solicitud al panel de administración interno en el puerto 8080.ResumenDetectar alguna consulta que realice alguna petición a un recurso externo mediante HTTP. Modificar la petición para que el servidor web realice una petición a la interfaz loopback y así acceder a funciones o servicios no publicadas al exterior. EjemploTras analizar el funcionamiento de la página web auditada, se puede observar que se realizan peticiones a recursos externos mediante HTTP.Una vez identificado este posible vector de ataque, se procede a realizar una primera prueba de reconocimiento para conocer si se pueden realizar peticiones a la interfaz loopback.Tras validar que se puede realizar un ataque de SSRF mediante este vector, se procura acceder a funciones limitadas desde el exterior como, en este ejemplo, eliminar un usuario de la aplicación.MitigacionesPara prevenir los riesgos asociados con este tipo de ataques, se recomienda:Validar y sanitizar todas las entradas de usuario, especialmente las URLs. Implementar listas blancas de dominios y direcciones IP permitidas. Utilizar firewalls de aplicaciones web (WAF) para filtrar solicitudes maliciosas. Configurar correctamente los firewalls de red para limitar el acceso a recursos internos. Implementar el principio de mínimo privilegio en los servidores y servicios. Usar VPNs o redes privadas virtuales para aislar recursos críticos. Deshabilitar redirecciones HTTP cuando no sean necesarias. Implementar autenticación y autorización robustas para todos los endpoints internos. Utilizar DNS interno para resolver nombres de host, evitando el uso de direcciones IP directas. Monitorear y registrar todas las solicitudes de red para detectar patrones sospechosos. 2. Escaneo de puertos internosEste proceso implica enviar solicitudes a diferentes puertos en las direcciones IP internas, analizando las respuestas para determinar qué puertos están abiertos y qué servicios están ejecutándose. Con esta información, el atacante podría identificar objetivos potenciales para futuros ataques, como servidores de bases de datos, paneles de administración o sistemas vulnerables que normalmente no serían accesibles desde el exterior.http://vulnerable-app.com/fetch?url=http://127.0.0.1:22En este ejemplo, si el puerto 22 (SSH) está abierto, la respuesta podría ser diferente a si estuviera cerrado, permitiendo al atacante mapear servicios de la red interna.ResumenDetectar alguna consulta que realice alguna petición a un recurso externo mediante HTTP. Modificar la petición para que el servidor web realice una petición a direcciones IP y puertos internos que no se encuentran expuestos al exterior. Observar respuestas diferentes por el servidor para poder discernir cuando existe una dirección IP con algún puerto abierto de cuando no. EjemploTras detectar un posible vector de ataque con esta técnica, se intenta identificar posibles rangos de red privados a los que se pueda tener acceso desde el servidor. Para ello se hará uso del módulo de intruder para iterar los valores numéricos de las direcciones IP.Tal y como se puede observar en las capturas, ha sido posible acceder a servidores y recursos internos mediante la explotación de la vulnerabilidad de SSRF.MitigacionesPara prevenir y mitigar los ataques SSRF
Descripción
El ataque 'Server-Side Request Forgery' (SSRF) es un tipo de ataque en el que un atacante abusa de la funcionalidad de un servidor para realizar solicitudes HTTP a recursos internos o externos no autorizados. En esencia, se engaña al servidor para que realice acciones no deseadas en nombre del atacante.
Impacto
Este tipo de ataque puede tener graves consecuencias para la seguridad de una aplicación web y la infraestructura subyacente. Algunos de los impactos potenciales incluyen:
- Acceso no autorizado a recursos internos: El atacante puede acceder a sistemas y datos que normalmente están protegidos por firewalls o restricciones de red.
- Evasión de controles de seguridad: SSRF puede permitir a los atacantes eludir medidas de seguridad como firewalls y listas de control de acceso.
- Exfiltración de datos sensibles: Los atacantes pueden utilizar SSRF para extraer información confidencial de sistemas internos.
- Escaneo de puertos internos: SSRF puede ser utilizado para mapear la red interna y descubrir servicios vulnerables.
- Ejecución de código remoto: En casos extremos, SSRF puede llevar a la ejecución de código arbitrario en el servidor comprometido.
Dada la gravedad de estos impactos, es crucial que los desarrolladores implementen medidas de seguridad robustas para prevenir y mitigar los ataques SSRF en sus aplicaciones web.
Ejemplos Prácticos
1. Acceso a servicios internos
Esto puede permitir al atacante acceder a sistemas y datos normalmente protegidos por firewalls o restricciones de red, como bases de datos internas o paneles de administración.
http://vulnerable-app.com/fetch?url=http://localhost:8080/admin
En este ejemplo, si la aplicación no valida adecuadamente la URL proporcionada, podría realizar una solicitud al panel de administración interno en el puerto 8080.
Resumen
- Detectar alguna consulta que realice alguna petición a un recurso externo mediante HTTP.
- Modificar la petición para que el servidor web realice una petición a la interfaz loopback y así acceder a funciones o servicios no publicadas al exterior.
Ejemplo
Tras analizar el funcionamiento de la página web auditada, se puede observar que se realizan peticiones a recursos externos mediante HTTP.
Mitigaciones
- Validar y sanitizar todas las entradas de usuario, especialmente las URLs.
- Implementar listas blancas de dominios y direcciones IP permitidas.
- Utilizar firewalls de aplicaciones web (WAF) para filtrar solicitudes maliciosas.
- Configurar correctamente los firewalls de red para limitar el acceso a recursos internos.
- Implementar el principio de mínimo privilegio en los servidores y servicios.
- Usar VPNs o redes privadas virtuales para aislar recursos críticos.
- Deshabilitar redirecciones HTTP cuando no sean necesarias.
- Implementar autenticación y autorización robustas para todos los endpoints internos.
- Utilizar DNS interno para resolver nombres de host, evitando el uso de direcciones IP directas.
- Monitorear y registrar todas las solicitudes de red para detectar patrones sospechosos.
2. Escaneo de puertos internos
Resumen
- Detectar alguna consulta que realice alguna petición a un recurso externo mediante HTTP.
- Modificar la petición para que el servidor web realice una petición a direcciones IP y puertos internos que no se encuentran expuestos al exterior.
- Observar respuestas diferentes por el servidor para poder discernir cuando existe una dirección IP con algún puerto abierto de cuando no.
Ejemplo
Mitigaciones
- Implementar listas blancas de direcciones IP y rangos permitidos para las solicitudes internas.
- Utilizar firewalls de aplicaciones web (WAF) configurados para detectar y bloquear patrones de solicitudes sospechosas.
- Segmentar la red interna para limitar el alcance de posibles escaneos.
- Implementar el principio de mínimo privilegio en los servidores y servicios internos.
- Utilizar autenticación y autorización robustas para todos los endpoints internos.
- Monitorear y registrar todas las solicitudes de red para detectar patrones de escaneo.
- Implementar rate limiting para prevenir escaneos rápidos y automatizados.
- Utilizar Virtual Private Cloud (VPC) en entornos cloud para aislar recursos críticos.
- Configurar correctamente los grupos de seguridad y las listas de control de acceso (ACL) en la red.
- Educar a los desarrolladores sobre las mejores prácticas de seguridad y los riesgos asociados con SSRF.
3. Acceso a metadatos en entornos cloud
- Credenciales temporales de AWS
- Roles de IAM asociados con la instancia
- Datos de configuración de red
- Scripts de inicialización personalizados
Resumen
- Detectar alguna consulta que realice alguna petición a un recurso externo mediante HTTP.
- Modificar la petición original para que el servidor web realice una petición a recursos de servidores en cloud que puedan estar limitados mediante WhiteList para que solo pueda acceder el servidor.
- Observar respuestas diferentes por el servidor para poder discernir cuando ha sido posible acceder a recursos almacenados en Cloud y cuando no.
Ejemplo
Escenario
Pasos de la explotación
- El atacante descubre que la aplicación está alojada en Amazon Web Services (AWS).
- El atacante ingresa la siguiente URL en el campo de entrada de la aplicación: http://169.254.169.254/latest/meta-data/
- La aplicación realiza una solicitud a esta dirección IP interna de AWS, que es el endpoint de metadatos de instancias EC2.
- Como resultado, la aplicación devuelve información sensible sobre la instancia EC2, como:
1. ID de instancia2. Región3. Nombre de host interno4. Dirección MAC
5.El atacante puede profundizar más utilizando rutas específicas, como: http://169.254.169.254/latest/meta-data/iam/security-credentials/ para obtener las credenciales de seguridad temporales del rol IAM asociado a la instancia.
Mitigación
- Implementar una lista blanca de URLs permitidas
- Utilizar un proxy inverso para las solicitudes salientes
- Configurar firewalls para bloquear el tráfico a direcciones IP internas
- Implementar el principio de mínimo privilegio en los roles IAM
- Utilizar IMDSv2 (Instance Metadata Service version 2) que requiere tokens de sesión
4. Exfiltración de información (Cypher injection)
Resumen
- Detectar alguna consulta mediante la cual sea posible inyectar código en las consultas realizadas a la base de datos.
- Realizar consultas a la base de datos para obtener información almacenada en la misma.
- Exfiltrar la información obtenida mediante la función de carga de CSV por HTTP, realizando así una técnica de SSRF.
Ejemplo
Mitigación
- Usar parámetros: Prevenir la inyección de Cypher utilizando parámetros en lugar de concatenar directamente la entrada del usuario en las consultas.
- Parametrizar consultas: Compilar las consultas en planes ejecutables que no puedan ser modificados por los datos de los parámetros.
- Usar procedimientos APOC de forma segura: Al utilizar APOC, continuar pasando parámetros para evitar vulnerabilidades de concatenación de cadenas.
- Sanitizar entradas: Cuando la parametrización no es posible (por ejemplo, para etiquetas de nodos), sanitizar las entradas del usuario escapando caracteres especiales.
- Evitar devolver errores de base de datos: Usar mensajes de error genéricos para prevenir la divulgación de información a través de inyección basada en errores.
- Implementar escape adecuado: Utilizar secuencias de escape apropiadas para diferentes tipos de Cypher (literales de cadena, identificadores).
- Validar entradas: Comprobar las entradas del usuario contra criterios específicos, pero tener en cuenta las posibles técnicas de bypass.
- Tener cuidado con las inyecciones de segundo orden: Continuar sanitizando los datos almacenados cuando se utilicen en consultas posteriores.
- Aplicar el principio de mínimo privilegio: Utilizar control de acceso basado en roles para limitar el impacto potencial de inyecciones exitosas.
- Manejar cuidadosamente las importaciones de datos: Ser consciente de las vulnerabilidades potenciales al importar datos de fuentes externas como archivos CSV.
What's Your Reaction?