La aplicación permite a los usuarios especificar una URL para su imagen de perfil. Obtiene los datos de la URL y los guarda en el servidor. Sin embargo, la aplicación es vulnerable a la falsificación de solicitudes del lado del servidor (SSRF): puede especificar direcciones URL como file:///etc/passwd
y también acceder a servicios HTTP locales como http://localhost:8080/
.
¿Cuál es la mejor manera de solucionar esto? Algunas ideas que tuve:
- Restrinja el protocolo de URL a HTTP y HTTPS.
- DNS busca el nombre del host y comprueba que no sea una dirección local.
- Deshabilitar redirecciones.
Esto parece un buen comienzo, aunque hay un problema de TOCTOU con la búsqueda de DNS (puede que esté bien en la práctica, ya que el DNS local se almacenará en la memoria caché).
Una idea alternativa que tuve fue colocar un proxy en un segmento de red restringido, donde solo puede ver Internet, y enviar solicitudes a través de eso.
Investigué esto en línea, pero no hay mucha información. Este artículo es bastante bueno.