Contexte technique

Le serveur web GoAhead intègre une implémentation TLS destinée à sécuriser les échanges client‑serveur. TLS repose sur l’authentification mutuelle, où le client peut présenter un certificat X.509. La validité de ce certificat doit être vérifiée à chaque connexion, notamment via les listes de révocation (CRL) ou le protocole OCSP. Dans le cas de GoAhead, des défauts de conception ont conduit à ignorer ces vérifications, ce qui autorise l’utilisation de certificats révoqués.

Parallèlement, TLS établit une clé de session à partir d’un secret partagé généré lors du handshake. La protection de cette clé repose sur la confidentialité des paramètres d’échange (premières clés, nonces). La faille identifiée dans GoAhead expose ces paramètres, ouvrant la voie à la décryption de sessions capturées.

Mécanismes des failles

Le premier défaut réside dans le module de validation du certificat client. Au lieu d’interroger la CRL ou d’envoyer une requête OCSP, le code de GoAhead accepte toute chaîne de certificats présentée, même si elle figure sur une liste de révocation. Cette omission découle d’une logique conditionnelle qui ne déclenche la vérification que si un certain flag est activé, flag qui reste désactivé par défaut dans les configurations courantes.

Le second défaut concerne la gestion des secrets de session. Lors du handshake, GoAhead conserve les clés dérivées dans une structure mémoire accessible en clair. Une vulnérabilité de type « information leak » permet à un attaquant disposant d’un accès local ou d’une capacité d’injection de code de lire ces structures, récupérant ainsi les clés de chiffrement. Avec ces clés, il devient possible de décrypter les flux TLS enregistrés, même si le trafic a été chiffré avec des algorithmes robustes comme AES‑GCM.

Implications et mesures d’atténuation

L’acceptation de certificats révoqués compromet la chaîne de confiance établie par l’infrastructure à clés publiques (PKI). Un acteur malveillant peut obtenir un certificat légitime, le faire révoquer, puis l’utiliser contre un serveur GoAhead non corrigé, contournant ainsi les contrôles d’accès basés sur l’identité du client.

La décryption de sessions expose les données transitées, y compris les informations d’authentification, les requêtes HTTP et les réponses contenant potentiellement des données sensibles. Cette capacité de rétro‑décryptage augmente le risque de compromission post‑exploitation, même si l’attaque initiale ne cible que le serveur.

Pour réduire ces risques, les opérateurs doivent d’abord désactiver le mode de validation conditionnelle et forcer la vérification stricte des listes de révocation ou d’OCSP. Ensuite, il convient de recompiler GoAhead avec les correctifs fournis par le fournisseur, ou de migrer vers une version où les secrets de session sont effacés immédiatement après usage. Enfin, la segmentation réseau et le durcissement des privilèges d’accès aux processus du serveur limitent la capacité d’un attaquant à lire la mémoire contenant les clés de chiffrement.