SSRF (Server-Side Request Forgery)

🌐 Vulnerabilidad: Server-Side Request Forgery (SSRF)


🕵️‍♂️ ¿Qué es SSRF?

Server-Side Request Forgery (SSRF) es una vulnerabilidad que permite a un atacante manipular a un servidor para que realice solicitudes HTTP (o de otro protocolo) hacia recursos internos o externos. Esto puede permitir al atacante acceder a servicios internos, exfiltrar información sensible, o incluso ejecutar comandos en ciertos casos.


⚙️ ¿Cómo se produce?

SSRF ocurre cuando una aplicación web permite al usuario proporcionar una URL o dirección que el servidor utiliza para realizar solicitudes sin validar adecuadamente la entrada. Si el servidor tiene acceso a recursos internos o sensibles, el atacante puede aprovechar esto para acceder a ellos.

SSRF

🛠️ Mecanismo de ataque

  1. El atacante identifica un parámetro que realiza una solicitud externa:

    http://victim.com/fetch?url=http://example.com
  2. Manipula la URL para acceder a recursos internos o privados:

    http://victim.com/fetch?url=http://127.0.0.1:80/admin
  3. Resultados posibles:

    • Acceso a servicios internos.

    • Lectura de metadatos de infraestructura en servicios en la nube, como:

      http://169.254.169.254/latest/meta-data/
    • Escaneo de puertos en la red interna:

      http://victim.com/fetch?url=http://192.168.1.1:22
  4. Uso avanzado: En algunos casos, el atacante puede combinar SSRF con vulnerabilidades adicionales (como RCE) para comprometer aún más el sistema.


🎯 Impacto

  • Acceso no autorizado: Exposición de servicios internos, como bases de datos o APIs privadas.

  • Exfiltración de datos: Robo de información sensible, como credenciales o configuraciones.

  • Escaneo interno: Identificación de hosts y servicios en la red interna.

  • Ejecución remota de comandos: En ciertos casos, puede derivar en RCE (Remote Code Execution).


📉 Puntaje CVSS v3

  • Vector de ataque: Red (Explotable remotamente)

  • Complejidad del ataque: Media

  • Impacto en confidencialidad: Alto

  • Impacto en integridad: Medio

  • Impacto en disponibilidad: Bajo a alto (dependiendo del ataque)

  • Puntaje CVSS v3: 8.0 - 9.5 (Crítico) 🔥


🧑‍💻 Ejemplo práctico

Código vulnerable:

<?php
    $url = $_GET['url'];
    $content = file_get_contents($url); // Solicitud sin validar
    echo $content;
?>

Ataque: El atacante envía una URL maliciosa para acceder a metadatos del servidor en AWS:

http://victim.com/fetch?url=http://169.254.169.254/latest/meta-data/

📌 Esto puede devolver información sensible como claves de acceso de la instancia.


🛡️ ¿Cómo prevenir SSRF?

1️⃣ Validar y sanitizar entradas

Restringe las URLs que los usuarios pueden proporcionar:

<?php
    $url = $_GET['url'];
    $allowed_domains = ['example.com', 'api.example.com'];
    
    $parsed_url = parse_url($url);
    if (!in_array($parsed_url['host'], $allowed_domains)) {
        die("URL no permitida.");
    }
?>

2️⃣ Bloquear acceso a direcciones internas

Implementa reglas para evitar que las solicitudes accedan a direcciones IP privadas o localhost:

  • Rango IPv4 prohibido:

    • 127.0.0.0/8 (localhost)

    • 10.0.0.0/8 (redes privadas)

    • 192.168.0.0/16 (redes privadas)

  • Rango IPv6 prohibido: ::1

3️⃣ Uso de listas blancas

Permite solo URLs específicas aprobadas:

$allowed_urls = ['https://example.com/api', 'https://trusted.com'];
if (!in_array($url, $allowed_urls)) {
    die("URL no válida.");
}

4️⃣ Deshabilitar redirecciones

Evita que el servidor siga redirecciones en las solicitudes.

5️⃣ Uso de servicios proxy

Usa un proxy para manejar las solicitudes externas y controlar el acceso.

6️⃣ Configuración de cortafuegos

Configura un firewall para bloquear solicitudes desde el servidor hacia direcciones no autorizadas.

7️⃣ Límites de tiempo y tamaño

Aplica límites a las solicitudes realizadas para evitar abuso.

8️⃣ Monitoreo y auditoría

Implementa herramientas para detectar comportamientos anómalos en el servidor, como solicitudes a direcciones IP internas.


💡 Dato extra: SSRF es especialmente peligroso en entornos de nube, donde los metadatos de las instancias pueden ser explotados para obtener credenciales y comprometer más recursos.

🚨 Nota importante: Aunque SSRF afecta principalmente a HTTP, puede usarse en otros protocolos, como FTP o SMTP, dependiendo de las capacidades del servidor.


¿Te gustaría un ejemplo adaptado a otro lenguaje o un caso más específico? 😊

Última actualización

¿Te fue útil?