flawopen.com/Incidents/citrix-bleed-session-token-leak-october-2023
Citrix Bleed : fuite de jetons et contournement MFA
CVE-2023-4966 a exposé la mémoire NetScaler, dont des jetons de session, permettant le détournement sans MFA. L’exploitation a débuté fin août 2023.[1], [2]
Vous demandez à un assistant de recopier un message sur une petite fiche et de vous dire sa longueur. La fiche ne tient que 50 caractères, il en écrit donc 50, mais quand vous lui demandez la longueur du message, il répond honnêtement « 800 caractères », puisque c'était la longueur de l'original. Vous tendez alors la fiche à quelqu'un en lui disant d'en lire 800 caractères. Il lit vos 50, puis continue avec ce qui est écrit sur le reste de la feuille.[2]
Concepts Clés et Termes
snprintf- Fonction C qui met en forme du texte dans un tampon de taille fixe. Quand le texte ne tient pas, elle le tronque mais renvoie la longueur qu'aurait eue le texte complet.[3]
NetScaler ADC / Gateway- Boîtiers Citrix assurant accès distant et répartition de charge en bordure de réseau. Seuls ceux configurés en Gateway ou en serveur virtuel AAA étaient concernés.[1]
Lecture hors limites (CWE-125)- Lire au-delà de la fin d'un tampon. Rien n'est écrasé, mais le contenu de la mémoire voisine est divulgué. Cela décrit le mécanisme précis de lecture hors limites (
CWE-125) ; Citrix classe globalementCVE-2023-4966commeCWE-119.[1], [3] Jeton de session- La valeur qui prouve qu'un utilisateur s'est déjà connecté. Qui la présente est traité comme cet utilisateur, sans mot de passe ni MFA.[2]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-119
- CISA KEV — ajouté le 2023-10-18 — CVE-2023-4966
Chronologie de l'Incident
L'exploitation de la faille en zero-day commence, selon des rapports ultérieurs de réponse à incident.[2]
Citrix publie le bulletin CTX579459 avec les versions corrigées 14.1-8.50, 13.1-49.15 et 13.0-92.19.[1]
La CISA ajoute CVE-2023-4966 à son catalogue Known Exploited Vulnerabilities.[4]
Déroulement de l'Attaque Étape par Étape
La mémoire au-delà du tampon part
La réponse est envoyée avec cette longueur supérieure : le boîtier renvoie la mémoire voisine en plus du JSON tronqué.[2]
Code Source : Vulnérable vs Sécurisé
C illustratif, pas le code source de NetScaler. Le correctif vérifie la valeur renvoyée par snprintf, qui indique la longueur qu'aurait eue la sortie complète. Si elle est négative ou supérieure ou égale à la taille du tampon, le formatage a échoué ou a été tronqué ; la fonction n'envoie alors rien. send_response ne reçoit donc la longueur que si la réponse complète tient dans buf.[3], [2]
#include <stdio.h>
int send_response(const char *data, int len);
int send_oidc_config(const char *host)
{
char buf[256];
/* n est le nombre d’octets qui auraient été écrits et peut dépasser sizeof(buf) */
int n = snprintf(buf, sizeof(buf), "{\"issuer\":\"https://%s\"}", host);
return send_response(buf, n); /* envoie n octets en lisant au-delà de buf */
}
#include <stdio.h>
int send_response(const char *data, int len);
int send_oidc_config(const char *host)
{
char buf[256];
int n = snprintf(buf, sizeof(buf), "{\"issuer\":\"https://%s\"}", host);
if (n < 0 || (size_t)n >= sizeof(buf))
return -1; /* rejeter la sortie tronquée ; ne jamais envoyer au-delà du tampon */
return send_response(buf, n);
}
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Vérifiez toujours la troncature de snprintf : if (n < 0 || (size_t)n >= sizeof(buf)) est le chemin d'erreur. Prendre la valeur de retour pour des octets écrits est un bogue C fréquent et grave.[3]
- ✓Ne laissez jamais une entrée contrôlée par l'attaquant fixer la longueur d'une sortie. Bornez toute taille issue de données non fiables aux limites réelles du tampon avant de l'utiliser.[3]
- ✓Conseil de réponse de FlawOpen : si une exposition de jetons de session est suspectée, révoquez ou invalidez les sessions concernées lorsque la plateforme le permet. Le correctif ferme la fuite, mais ne révoque pas les jetons déjà exposés.
- ✓Conseil opérationnel de FlawOpen : limitez la durée des sessions lorsque les besoins du service le permettent et examinez l'utilisation de jetons depuis des réseaux ou appareils inattendus. Mandiant cite les schémas de connexion suspects comme piste d'investigation et précise qu'ils doivent être interprétés selon le contexte de l'organisation.[2]
- ✓Soumettez les boîtiers de bordure à la même discipline de correctifs et de supervision que vos propres serveurs ; ils sont exposés sur Internet et détiennent l'accès de tous ceux qui sont derrière.[1], [2]