flawopen.com/Incidents/citrix-bleed-session-token-leak-october-2023
Citrix Bleed: robo de tokens y evasión de MFA
CVE-2023-4966 expuso memoria de NetScaler con tokens de sesión; su robo permitió secuestrar sesiones y evadir MFA. Explotada desde agosto de 2023.[1], [2]
Le pides a un asistente que copie un mensaje en una tarjeta pequeña y te diga cuánto mide. En la tarjeta solo caben 50 caracteres, así que escribe 50, pero cuando le preguntas por la longitud responde con sinceridad «800 caracteres», porque eso medía el original. Entonces das la tarjeta a otra persona y le dices que lea 800 caracteres. Lee tus 50 y sigue leyendo lo que haya escrito en el resto de la hoja.[2]
Conceptos Clave y Términos
snprintf- Función de C que da formato a texto en un búfer de tamaño fijo. Si el texto no cabe lo trunca, pero devuelve la longitud que habría tenido el texto completo.[3]
NetScaler ADC / Gateway- Dispositivos de Citrix que ofrecen acceso remoto y balanceo de carga en el perímetro de la red. Solo estaban afectados los configurados como Gateway o servidor virtual AAA.[1]
Lectura fuera de límites (CWE-125)- Leer más allá del final de un búfer. No se sobrescribe nada, pero se revela lo que haya en la memoria contigua. Describe el mecanismo específico de lectura fuera de límites (
CWE-125); Citrix clasificaCVE-2023-4966de forma general comoCWE-119.[1], [3] Token de sesión- El valor que demuestra que un usuario ya inició sesión. Quien lo presenta es tratado como ese usuario, sin pedirle contraseña ni MFA.[2]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-119
- CISA KEV — añadido el 2023-10-18 — CVE-2023-4966
Cronología del Incidente
Empieza la explotación del fallo como zero-day, según informes posteriores de respuesta a incidentes.[2]
Citrix publica el boletín CTX579459 con las versiones corregidas 14.1-8.50, 13.1-49.15 y 13.0-92.19.[1]
CISA añade CVE-2023-4966 a su catálogo Known Exploited Vulnerabilities.[4]
Flujo de Ataque Paso a Paso
Se envía memoria más allá del búfer
La respuesta se envía con esa longitud mayor, de modo que el dispositivo devuelve memoria contigua junto con el JSON truncado.[2]
Código Fuente: Vulnerable vs. Seguro
C ilustrativo, no es código fuente de NetScaler. La corrección comprueba el valor que devuelve snprintf, que indica la longitud que habría tenido la salida completa. Si es negativo o igual o mayor que el tamaño del búfer, el formato falló o se truncó y la función no envía nada. Así, send_response solo recibe la longitud cuando la respuesta completa cabe en 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 es la cantidad de bytes que se habrían escrito y puede superar sizeof(buf) */
int n = snprintf(buf, sizeof(buf), "{\"issuer\":\"https://%s\"}", host);
return send_response(buf, n); /* envía n bytes y lee más allá 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; /* rechace la salida truncada; nunca envíe más allá del búfer */
return send_response(buf, n);
}
Lista de Verificación de Seguridad para Ingeniería
- ✓Comprueba siempre si snprintf truncó: if (n < 0 || (size_t)n >= sizeof(buf)) es la rama de error. Tratar el retorno como bytes escritos es un fallo de C frecuente y grave.[3]
- ✓Nunca dejes que una entrada controlada por el atacante determine la longitud de una salida. Limita cualquier tamaño derivado de datos no confiables a los límites reales del búfer antes de usarlo.[3]
- ✓Guía de respuesta de FlawOpen: si se sospecha que se expusieron tokens de sesión, revoca o invalida las sesiones afectadas cuando la plataforma lo permita. El parche cierra la filtración, pero no revoca los tokens ya expuestos.
- ✓Guía operativa de FlawOpen: mantén sesiones breves cuando los requisitos del servicio lo permitan e investiga el uso de tokens desde redes o dispositivos inesperados. Mandiant señala los patrones de inicio de sesión sospechosos como pista de investigación y advierte que requieren el contexto de cada organización.[2]
- ✓Aplica a los dispositivos perimetrales la misma disciplina de parches y monitorización que a tus propios servidores; están expuestos a internet y guardan el acceso de todos los que hay detrás.[1], [2]