domingo, 28 de enero de 2018

[ F5 BIG-IP ] COOKIE REMOTE INFORMATION DISCLOSURE, (en #Telefonica tmb)

Las organizaciones procuran contrarrestar las fugas de información y esto para la mayoría no es ninguna novedad. Estas fugas pueden salir de lugares totalmente insospechados

En las distintas evaluaciones de seguridad siempre busco cubrir y poner foco a cada detalle. Recientemente re-descubrí uno viejo y quiero compartirlo.


Del "detalle" del que hoy voy a escribir son de unas curiosas cookies que conocen infraestructura interna y la presentan al mundo. 




[+] Cookie leaks:

Cookies que no nacen dentro de un aplicativo web. En cambio son seteadas por un intermediario: El balanceador de carga de la firma F5.

El balanceador se encuentra entre el cliente y el servicio al que finalmente nos queremos conectar.

El balanceador define para nosotros (cliente) un host  de entre un pool http/apps.
Además de determinar el camino mas optimo, a cada uno de nuestro request se le setea una cookie que al llegar a nuestro cliente trae como valor una IP y PUERTO, ofuscados, que identifica al host (que el balanceador definió para nuestro request ) desde donde llegan los recursos que nosotros  inicialmente llamamos.   


Esas cookies traen valores encodeados y existe una documentación oficial al respecto:




y un articulo de OWASP que trata el tema:
https://www.owasp.org/index.php/SCG_D_BIGIP




Claramente a esta cookie el administrador podra ponerle por nombre lo que desee. Por defecto las encontramos con este formato "BIGipServer<pool http>".



Para tener una idea (simbolica) del grado de exposición siempre suelo hacer uso Shodan







Equipos para testear no nos van a faltar. 
Me arme un simple tool, que se conecta a la aplicación web y toma nota del valor de las cookie para luego correr el decoder y asi  identificar la IP.

Para obtener TODAS las IP del pool es necesario hacer varias consultas



POC 1:
Selecciono una de las tantas aplicaciones:





y ahora le pasamos esta info a la tool:




Segun el output de la herramienta, el balanceador tendrá solo dos opciones para Forwardearnos



Poc 2: 

(Para mi sorpresa telefonica/movistar usan balanceadores F5 ).
La siguiente captura evidencia las cookies que nos ortorga el balanceador. 



Tmb se ve un otra interesante cookie que refleja mi IP (proxy) desde la que me estoy conectando.













Shodan tendra indexada las cookies de telefonica ?:

Yhea...



T3_EXTERNAL:






REPASANDO COMPORTAMIENTOS:

(Caso normal)






Y en la respuesta viene seteada la cookie







Evidencia: Seteando valores de la cookie.

Al incluir alguna ip ajena al aplicativo, cambiar un puerto nuevo, o simplemente rellenar con “basura“, en todos los casos el balanceador no tomara en cuenta lo que enviamos, y seguirá seteando la cookie correspondiente para cada caso

En la siguiente captura cambie el puerto 8080 (encodeado):


La respuesta parece inmutable





Evidencia: Fijando una cookie valida.
Los valores de la cookie son finitos y cada uno de esos define un host y puerto dentro del pool de aplicaciones que tiene cargado el balanceador:
Si en cada uno de esos request incluimos la cookie con alguno de los posibles valores(ip+puerto) precargados en el balanceador correspondientes al pool http/apps en las respuestas el balanceador ya no nos asigna una cookie y se toma como valida la que estamos forzando.

POC:
Ahora me queda una pregunta que no me puedo responder (por falta de evidencias). Sera que forzando desde el cliente una de estas cookie con un valor valido, estoy forzando/fijando un camino hacia un host en particular del pool de aplicaciones ?


Siempre en medio
En un escenario tradicional, si somos administradores de una aplicación web y esta es accedida a través de un proxy en los logs nos encontraremos la IP de este último.

De igual manera pero con un ejemplo más cercano a caso que nos importa si un Apache se encuentra detrás de un balanceador de carga, la IP de este último sobrescribe la del usuario, por lo que en el archivo de registro de Apache solo se indica la dirección del balanceador.

El cómo resuelve esta situación también esta documentado de manera oficial en la ssiguiente direccion: https://support.f5.com/csp/article/K4816


El balanceador incluye en nuestros request, una cookie para el cliente y el header x-forward-for para el server.

X-Forwarded-For:
El encabezado de solicitud X-Forwarded-For ayuda a identificar la dirección IP de un cliente cuando se utiliza un balanceador de carga HTTP o HTTPS. Dado que los balanceadores de carga interceptan el tráfico entre los clientes y servidores, los logs de acceso al servidor contienen únicamente la dirección IP del balanceador de carga. Para ver la dirección IP del cliente, utilice el encabezado de solicitud X-Forwarded-For. Almacenando la dirección IP del cliente en el encabezado de solicitud X-Forwarded-For y se lo pasa al servidor.

Para evidencias me agarro del valor de otra cookie, que tiene como valor la IP desde donde me estoy conectando.


Me descargo e instalo una extencion para el navegador, que me permita incluir headers definidos por mi:
https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj



Una vez instalado agrego el header: "X-Forwarded-For: 31.3.3.7" recargo la aplicacion y veo si el valor de la cookie a cambiado



Sera que desde el cliente puedo forzar la IP origen que el balanceador le va a pasar al server ?


Saludos,
@Capitan_alfa 

No hay comentarios.:

Publicar un comentario