Los ataques SSRF (Server-Side Request Forgery) ocurren cuando un atacante abusa una funcionalidad en el servidor causando que este haga peticiones a una localización que no pretendía originalmente. En el contexto de XXE, un atacante puede manipular el input XML para hacer que el servidor haga peticiones a un servicio o archivo interno. Esta técnica se puede usar tanto para escanear redes internas, acceder a endpoints restringidos o interactuar con los servicios que sólo son accesibles desde la red local del servidor.


Escaneo de Red Interna

Considera un escenario donde un servidor vulnerable alberga una aplicación web internamente en un puerto no estándar. Un atacante puede explotar una vulnerabilidad XXE que hace que el servidor mande una petición a su propio recurso de red interna.

Por ejemplo, usando la petición capturada de la in-band XXE, mándala al intruder y usa el payload de abajo:

xml
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "http://localhost:§10§/" >
]>
<contact>
  <name>&xxe;</name>
  <email>test@test.com</email>
  <message>test</message>
</contact>

La entidad externa está configurada para recopilar información de http://localhost:§10§/. El intruder reiterará la petición y buscará servicios internos corriendo en el servidor.

Pasos para aplicar fuerza bruta en busca de puertos abiertos:

  1. Una vez que la petición capturada de la in-band XXE esté en el intruder, haz click en el botón Add § mientras subrayas el puerto. SSRF and XXE
  2. En la pestaña Payloads, configura el tipo de payload a Numbers de 1-65535. SSRF and XXE
  3. Una vez hecho, haz click en el botón de comenzar el ataque y haz click en la columna de Length para ordenar los ítems de mayor a menor. La diferencia en la respuesta del servidor indicará que requiere investigación ya que puede contener información diferente a la mayoría de peticiones. SSRF and XXE SSRF and XXE

Cómo procesa esto el Servidor:

La entidad &xxe; se rederencia dentro del tag <name>, provocando que el servidor haga una petición HTTP a la URL especificada cuando se parsea el XML. La respuesta del recurso pedido será incluida en la respuesta del servidor. Si la aplicación contiene claves secretas, claves de API o contraseñas hardcodeadas, esta información podrá ser usada como otra forma de ataque como reutilización de contraseña.


Implicaciones Potenciales de Seguridad

  • Reconocimiento: Los atacantes pueden descubrir puertos de red internos y ganar acceso a la arquitectura interna del servidor.
  • Filtrado de Información: Si el servicio interno devuelve información sensible, podría ser expuesta a través de errores o output XML.
  • Elevación de Privilegios: Acceder a servicios internos podría conllevar a exploits más avanzados escalando las capacidades de un atacante en la red.