Vulnérabilité Ticketbleed (CVE-2016-9244)
Le 9/02/2017, F5 Networks a publié le bulletin CVE-2016-9244 concernant une vulnérabilité dans l'implémentation de la fonction de reprise de session TLS (Session Resumption).
Un Virtual Server Big-IP configuré pour utiliser un Profil SSL Client pour lequel l'option "Session Tickets" (tickets de session) a été activée peut divulguer jusqu'à 31 octets de données en provenance d'une table mémoire non initialisée.
Par défaut, l'option "Session Tickets" est désactivée sur le profil SSL Client.
Les clients F5 qui ont explicitement activé cette option sont concernés par ce bulletin et peuvent vérifier ici la vulnérabilité de leurs équipements F5.
Risque
Un attaquant distant aurait la possibilité d'exploiter cette vulnérabilité pour obtenir des IDs de sessions (Session ID) TLS concernant d'autres sessions TLS.
Il serait également possible que d'autres données contenues dans la table de mémoire non initialisée puissent être divulguées.
Détails techniques
La fonction "Session Ticket", ou Ticket de session TLS, est un mécanisme normalisé (RFC 5077) de reprise de sessions TLS qui permet aux équipements qui traitent un grand nombre de transactions TLS avec de multiples clients TLS (tels les load-Balancers ou les proxy) de s'affranchir de stocker les états de sessions TLS.
Sans ce mécanisme, le serveur doit stocker et maintenir en cache les états de sessions TLS de tous les clients (mécanisme stateful)
Avec la fonctionnalité "Session Ticket", le serveur génère et distribue au client l'information d'état de la session TLS sous forme d'un ticket crypté que le client devra présenter au serveur pour pouvoir effectuer une reprise de session TLS préalablement établie avec le serveur. La confidentialité et l’intégrité du ticket de session est prise en charge par le serveur.
Ce mécanisme stateless permet au serveur d'utiliser moins de ressources et d'accélérer les performances TLS, puisque le stockage et le maintien des informations de session (le ticket de session) est pris en charge par le client.
Avec la fonctionnalité “Session Ticket” activée coté serveur, lorsqu'un client souhaite effectuer une reprise sur une session TLS préalablement établie avec le serveur, il va soumettre à celui-ci un ClientHello contenant le SessionID (ID de session) ainsi que l'extension SessionTicket (ticket de session).
En réponse, si le serveur accepte de traiter le ticket, il doit le notifier au client en répondant avec le SessionID reçu.
La pile TLS du F5 répond avec un SessionID fixé à son maximum, soit 32 octets.
Etant donné que la longeur du SessionID peut varier de 1 à 32 octets, si un client soumet un SessionID inférieur à 32 octets, le big-ip va effectuer un padding (remplissage) pour répondre avec un SessionID de 32 octets.
La vulnérabilité vient du fait que ce padding (qui peut atteindre 31 octets au maximum) provient d'une table mémoire non initialisée.
Atténuation et élimination du risque
La contre-mesure immédiate consiste à désactiver l'option "Session Ticket".
Cette contre-mesure élimine le risque décrit plus haut.
Veuillez noter que l'option "Sesssion Ticket" est désactivée par défaut sur les profils SSL Clients.
En désactivant cette option, la reprise de sessions TLS se fait en mode stateful par le BIG-IP qui va réutiliser les informations de sessions qu'il a gardé en cache.
Si la désactivation de l'option "Session Ticket" n'est pas possible dans votre environnement, il est recommandé d'installer les hot-fix sur les versions vulnérables tels que décrits dans l'article K05121675 de la base de connaissance.