Blog

Obtención de información interna a través de balanceadores de carga F5

Buenas a todos! En este nuevo post vamos a ver cómo podemos obtener información acerca de la red interna de un objetivo que tenga un balanceador de carga F5.

Vamos a explicar primero que es un balanceador de carga. Podríamos decir que un balanceador de carga es un software o hardware que a nivel de red se pone delante de los servidores para que a medida que llegan las peticiones sea este dispositivo el que las envíe a un servidor u otro. Esto permite que no se sature un determinado servidor estando los otros libres.

Lo normal a la hora de utilizar un balanceador de carga es que los servidores que se encuentran detrás sean replicas unos de otros, para evitar que el cliente vea aplicaciones distintas según donde le redirija el balanceador.

Entre los balanceadores de carga por hardware más conocidos tenemos los fabricantes F5 y Citrix. En este caso la vulnerabilidad que se va a exponer afecta a los F5.

De forma gráfica podríamos decir que la estructura que tenemos al usar un balanceador de carga es la siguiente:

balanceador_con_nodo_sobrecargado

 

Los balanceadores F5 para evitar que las peticiones de cada cliente vayan todo el rato a servidores internos distintos introducen una parámetro en la cookie llamado “BIGipServer<pool_name>”. Este parámetro indica el servidor al que realizara consultas el cliente durante un determinado periodo de tiempo.

Hasta aquí todo correcto, lo normal sería que dicha variable fuera algún token identificador, pero que no aportara ningún tipo de información de cara al exterior pero… ¿Es así? NO!

Un ejemplo del valor para dicha variable seria el siguiente:

BIGipServer_webPrincipal: 1677787402.36895.0000

 

¿Y que significan esos valores? Pues ni más ni menos que la dirección interna y puerto al que va dirigida la petición, el único problema es que esta encodeado. El primer número entero hacer referencia a la IP, el segundo al puerto y el tercero siempre aparece como ceros. Para obtener el valor real de dicha variable deberíamos seguir el siguiente proceso:

Dirección IP encodeada: 1677787402

Convertimos dicho valor en Hexadecimal: 0x6401010A

Lo dividimos en cuatro bytes hexadecimal y en orden inverso: 0x0A 0x01 0x01 0x64

Ahora convertimos cada byte en su valor decimal y los separamos por puntos, obteniendo: 10.1.1.100

Dirección IP interna del servidor: 10.1.1.100

Puerto encodeado: 36895

Convertimos dicho valor en Hexadecimal: 0x901F

Ponemos dicho valor de forma inversa: 0x1F90

Convertimos el valor en decimal, obteniendo: 8080

Puerto del servidor: 8080

 

Con esto como vemos obtenemos que la dirección interna del servidor a la que estamos haciendo llegar nuestras peticiones en este momento sea la 10.1.1.100 y el puerto 8080.

Debido a esta vulnerabilidad podríamos llevar a cabo un proceso automático para enumerar todos los servidores internos de la DMZ donde se encuentren los servidores, así como a que puertos se realiza la petición.

Esto de cara a realizar un Test de Intrusión es practico pues nos permite obtener información sobre la estructura de red interna y como está organizada la red.

En el caso de que el servidor estuviera haciendo uso de IPv6 el valor de la cookie sera distinto, pero es posible obtener el valor siguiendo un proceso similar. Si queréis mas información sobre esta vulnerabilidad aquí os dejo dos paginas web, una con el proceso descrito anteriormente y otra con la post donde además podéis descargaros una herramienta que os hace el proceso de decoding de forma automática.

http://support.f5.com/kb/en-us/solutions/public/6000/900/sol6917.html?sr=19342610

http://blog.whitehatsec.com/f5-networks-big-ip-cookie-decoded/

 

Por último aquí os dejo una simple búsqueda en Shodan para que veáis la gran cantidad de balanceadores de carga F5 que podemos encontrar.

shodan_f5

 

Espero que os haya gustado y os sea de utilidad!

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos

Leave a Reply

*

    No Twitter Messages