Los desarrolladores más expertos en seguridad, conscientes de los riesgos de SSRF, pueden implementar comprobaciones en sus aplicaciones para asegurarse de que los recursos solicitados cumplen con reglas específicas. Hay generalmente dos formas de hacer esto: lista de denegación y lista de aceptación.
Lista de Denegación
Una lista de denegación es donde las peticiones son aceptadas aparte de los recursos especificados en una lista o coincidiendo con un patrón determinado. Una aplicación web puede emplear una lista de denegación para proteger ante acceso a endpoints sensible, direcciones IP o dominios. Un endpoint específico al que prohibir acceso es localhost, que puede contener información sobre el desempeño del servidor o información más sensible, por lo que dominios como localhost y 127.0.0.1 aparecerían en esta lista. Los atacantes pueden bypassear esta lista usando referencias al localhost alternativas como: 0, 0.0.0.0, 0000, 127.1, 127.*.*.*, 2130706433, 017700000001; o subdominios que tengan un registro DNS que resuelva a la dirección IP 127,0,0,1, como: 127.0.0.1.nip.io.
Además, en un entorno de nube, podría ser beneficioso bloquear el acceso a la dirección IP 169.254.169.254, que contiene metadatos para el servidor nube desplegado. Un atacante puede bypassear esto registrando un subdominio en su propio dominio con un registro DNS que apunte a la dirección IP `169.254.169.254
Lista de Aceptación
Una lista de aceptación es donde las peticiones son denegadas a no ser que aparezcan en una lista o coincidan con un patrón en concreto, como la regla de que una URL que se introduce como parámetro debe comenzar con https://website.thm. Un atacante podría circunvalar esta medida creando un subdominio en su propio dominio como https://website.thm.attackers-domain.thm. La aplicación comprobaría que empieza por lo que se pide y sería aceptada.
Redirección Abierta
Si los bypasses anteriores no funcionan, hay un truco más en la manga de lo atacantes, la redirección abierta. Una redirección abierta es un endpoint en el servidor donde el visitante web es redirigido automáticamente a otra dirección web. Por ejemplo, el link https://website.thm/link?url=https://tryhackme.com. Este endpoint fue creado para registrar el número de veces que los visitantes han hecho click en ese link por motivos de marketing. Pero imagina que hubiera una vulnerabilidad potencial SSRF con reglas estrictas que sólo permitieran las URLs que comienzan con https://website.thm/. Un atacante podría utilizar la funcionalidad de arriba para redirigir las peticiones HTTP internas a un dominio de la elección del atacante.
