Hacking F5 persistence cookie

On le dira jamais assez mais la sécurité n’est pas a prendre à la légère ! Aujourd’hui nous allons voir comment une mauvaise configuration d’un paramètre peut entraîner une faille de sécurité sur un Load-Balancer F5 BIG-IP. Et pour le coup c’est un paramètre par défaut du constructeur qui est à l’origine !

Activation de la persistance façon noob

Vous souhaitez mettre en place de la persistance de session du niveau de votre load-balancer F5 BIG-IP .. Aucun souci !

Pour ce faire vous allez sur votre VS (Virtual Servers), vous cliquez sur l’onglet « Ressources » et vous choisissez « cookie » pour le paramètre « Default Persistence Profile » et c’est tout…

Effectivement par défaut il existe un profile de persistance ayant comme nom « cookie ».

A noter que les profiles (de persistance) par défaut ne peuvent pas être supprimer.

Analyse de la configuration

Vision de la configuration du profile de persistance : cookie

Petite vérification du cookie au niveau du navigateur avec un focus sur le nom et sur la valeur du cookie :

On constate que le nom du cookie est « BIGipServer-POOL » et que sa valeur est « 16820416.20480.0000 ».

 

Le nom du cookie

Comme par défaut le champ « Cookie Name » est vide alors la règle de nommage qu’a choisi F5 est la suivante : BIGipServer<pool_name> (réf : https://support.f5.com/csp/article/K83419154)

Juste en vérifiant le nom du cookie le hackeur possède 2 informations (plus ou moins essentiel) :
– il sait que vous avez un Load-Balancer F5 BIG-IP
– il connait le nom du pool sur lequel pointe votre VS

Bref ! Pas très cool pour commencer.

 

La valeur du cookie

Dans mon scénario j’ai 2 membres dans mon « Pools » et j’ai remarqué que la valeur du cookie prenait que 2 valeurs à chaque fois :

  • 16820416.20480.0000
  • 33597632.20480.0000

J’ai trouvé étonnant de constater que le deuxième (20480) et troisième (0000) groupe de chiffre était identique. Du coup en cliquant sur le premier lien de google avec comme mot clés « F5 BIG-IP cookie value » vous tombez sur le lien suivant : https://support.f5.com/csp/article/K6917

Cet article explique (avec un exemple) comment il procède pour encoder l’adresse IP et le port dans la valeur du cookie.

Address encoding

The BIG-IP system uses the following address encoding algorithm:

  1. Convert each octet value to the equivalent 1-byte hexadecimal value.
  2. Reverse the order of the hexadecimal bytes and concatenate to make one 4-byte hexadecimal value.
  3. Convert the resulting 4-byte hexadecimal value to its decimal equivalent.

Port encoding

The BIG-IP system uses the following port encoding algorithm:

  1. Convert the decimal port value to the equivalent 2-byte hexadecimal value.
  2. Reverse the order of the 2 hexadecimal bytes.
  3. Convert the resulting 2-byte hexadecimal value to its decimal equivalent.

Ainsi que la méthode pour décoder qui est tout simplement l’inverse :

You can decode the cookie value by reversing the encoding algorithms previously detailed.

Du coup comme tout est détaillé et expliqué vous pouvez déduire la valeur de votre cookie.
La valeur « 16820416.20480.0000 » correspond à l’adresse IP « 192.168.0.1 » sur le port « 80 ».
En d’autres termes les membres que composent le pool sont :

  • 192.168.0.1:80 (valeur cookie : 16820416.20480.0000)
  • 192.168.0.2:80 (valeur cookie : 33597632.20480.0000)

Amusez-vous à encoder/décoder

J’ai réalisé une page qui permet de décoder les valeurs de cookie et d’encoder vos IP avec le port :
https://www.nooby.fr/pages/f5-cookie-encode-decode.php

Oui et alors ?

Comme le cookie est manipulable il est tout à fait possible de déjouer le mécanisme de répartition de charge en changeant la valeur du cookie afin de pointer sur une chaîne applicative précise.

De ce fait les load-balancer F5 (avec cette configuration) sont éventuellement plus vulnérables aux attaques par dénis de service (DDoS attack).

Le remède docteur ?

Rien de plus simple et même pour un noob !

Le nom du cookie

Ne laissez pas vide le champs « Cookie Name » et définissez un nom de cookie agnostique à votre infrastructure.

La valeur du cookie

Il suffit d’activer le cryptage du cookie en sélectionnant l’option « required » du paramètre « Cookie Encryption Use Policy » et de définir une phrase mot de passe pour le paramètre « Encryption Passphrase ».

Conclusion

Le nom du cookie est neutre et la valeur du cookie est dorénavant crypté et n’est plus déchiffrable !
Personnellement je me demande pourquoi le paramètre de cryptage n’ai pas coché par défaut…

Devise de fin

Ne donner pas le bâton pour vous faire battre et configurer vos cookies comme un vrai pro !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.