Introducción

Un NetScaler ADC o Gateway expuesto a Internet sin parchear representa un punto de entrada directo a la red corporativa. No hay EDR corriendo en el appliance, no hay logs centralizados que capturen cada syscall, y el servicio DTLS escucha en un puerto UDP accesible desde cualquier lugar del mundo. Esa superficie de ataque fue exactamente lo que aprovecharon grupos de amenazas que, desde al menos principios de septiembre, explotaron dos vulnerabilidades zero-day en Citrix NetScaler para obtener ejecución de código con privilegios root sobre el sistema operativo FreeBSD subyacente.

Las dos fallas —CVE-2026-88771 (RCE sin autenticación en todas las implementaciones de ADC y Gateway) y CVE-2026-88772 (desbordamiento de memoria en el procesamiento DTLS)— fueron explotadas en el wild días antes de que Citrix las hiciera públicas. Mandiant, Google Threat Intelligence Group, GreyNoise y watchTowr documentaron intrusiones coordinadas contra organizaciones de gobierno, servicios financieros, educación, sector legal y servicios profesionales en Norteamérica y Europa.

Qué ocurrió

GreyNoise detectó intentos de explotación contra NetScaler Gateway el 24 de septiembre, originados desde la dirección IP 149.104.78.141, tres días antes de la divulgación pública de Citrix. El actor de amenaza intentó modificar /bin/sh para obtener una shell root e instalar una web shell PHP con contraseña en /var/netscaler/logon/LogonPoint/custom/.ctxs.receiver. También alteró /etc/httpd.conf para que solicitudes de archivos CSS como receiver.min.css terminaran ejecutando el código PHP oculto.

Citrix confirmó ambas vulnerabilidades el domingo siguiente bajo el apodo «PitScaler» acuñado por investigadores independientes. CVE-2026-88772 es el desbordamiento de memoria: al enviar encabezados de registro DTLS especialmente malformados o fragmentados, se corrompe el límite del heap dentro del NetScaler Packet Processing Engine (NSPPE). El motor de paquetes termina inesperadamente y el flujo de control se desvía hacia shellcode arbitrario con privilegios root sobre FreeBSD. CVE-2026-88771 es una RCE sin autenticación que afecta a toda implementación de ADC y Gateway, independientemente de la configuración DTLS.

Impacto para DevOps / Infraestructura / Cloud / Seguridad

Los NetScaler ADC y Gateway operan en el borde de la red: traducen tráfico, terminan sesiones VPN, balancean carga y, en arquitecturas cloud, se despliegan como instancias en AWS, Azure o GCP con interfaces públicas. No corren agentes EDR convencionales. No generan telemetría de procesos comparable a un host Linux o Windows estándar. Cuando un atacante obtiene root sobre FreeBSD, el appliance deja de ser un componente de infraestructura y se convierte en un pivote hacia la red interna.

Mandiant documentó que los atacantes usaron el túnel SLAPSHOT para reconnaissance manual y robo de credenciales en al menos una intrusión observada. El impacto no se limita al perímetro: una vez establecido el puente, el alcance abarca bases de datos, directorios activos y servicios internos que el NetScaler puede alcanzar por diseño. Los sectores afectados incluyen gobierno, finanzas, educación, legal y servicios profesionales, lo que implica datos personales regulados bajo GDPR, HIPAA o normativas locales.

Detalles técnicos

Vectores de explotación. CVE-2026-88772 requiere DTLS habilitado en el Gateway. El exploit envía encabezados de registro DTLS fragmentados que provocan corrupción de límites del heap en NSPPE. El crash resultante permite redirigir el flujo de control a shellcode con permisos root. CVE-2026-88771 no depende de DTLS y funciona contra cualquier ADC/Gateway expuesto sin autenticación.

Malware WHIPSHOT. Web shell PHP disfrazada como paquete Debian (.deb), almacenada en el directorio de scripts VPN del NetScaler. Funciona como proxy HTTP que extrae datos Base64 desde encabezados de solicitud y los reenvía a SLAPSHOT. Verifica si SLAPSHOT está activo y puede lanzar payloads Python embebidos en segundo plano. En una intrusión documentada, los atacantes modificaron /etc/httpd.conf para que archivos .deb se procesaran como PHP, permitiendo que la web shell residiera en directorios de software cliente del NetScaler sin levantar sospechas.

Malware SLAPSHOT. Herramienta de tunnelling TCP escrita en Python que conecta el NetScaler comprometido con dispositivos internos. Recibe comandos de WHIPSHOT, abre conexiones a hosts internos, transmite y recibe datos, y cierra sesiones. Se auto-termina tras períodos de inactividad para reducir la ventana de detección.

Persistencia y escalada. Aunque la explotación entrega root inicial, los comandos de las web shells se ejecutan bajo la cuenta de menor privilegio del servidor web NetScaler. Los atacantes fijaron el bit setuid en /bin/sh para que toda ejecución heredara privilegios root. También reiniciaron el appliance o el servicio httpd para aplicar cambios en httpd.conf.

Indicadores de compromiso específicos:

  • Archivo /var/netscaler/logon/LogonPoint/custom/.ctxs.receiver
  • Entradas Alias o AliasMatch sospechosas en /etc/httpd.conf que mapeen .deb, .sig o .ico a PHP
  • Permisos setuid en /bin/sh
  • Archivos /tmp/.uxdport y /tmp/.uxdlock
  • Respuestas HTTP 404 falsas que en realidad ejecutan comandos vía shell_exec() o eval()
  • Procesos Python lanzados con nohup o conteniendo payloads Base64
  • Crash inesperados del proceso NSPPE

Qué deberían hacer los administradores y equipos técnicos

  • Aplicar los parches de Citrix de inmediato. Actualicen NetScaler ADC y Gateway a las versiones publicadas tras la divulgación del domingo. Si el appliance está en AWS, Azure o GCP, reemplacen la AMI/imagen por la versión parcheada y migren tráfico. No confíen en mitigaciones parciales si la explotación ya ocurrió.
  • Si no pueden parchear hoy, deshabiliten DTLS. Ejecuten en el NSH: set ssl dtls -dtls13 DISABLED y set ssl dtls -dtls12 DISABLED. Esto elimina el vector de CVE-2026-88772, aunque no protege contra CVE-2026-88771. Como medida adicional, restrinjan el acceso al puerto UDP 443 a rangos IP conocidos.
  • Busquen IoCs en cada appliance. Ejecuten:
  • find /var/netscaler/logon/ -name «.ctxs.receiver»
    grep -E «Alias|AliasMatch» /etc/httpd.conf | grep -E «\.deb|\.sig|\.ico»
    ls -la /bin/sh | grep rws
    ls -la /tmp/.uxdport /tmp/.uxdlock 2>/dev/null
    ps aux | grep -E «nohup|python.*base64»

  • Revisen logs de NSPPE y httpd. Busquen crash reports del motor de paquetes y solicitudes HTTP con extensiones .deb, .sig o .ico que devuelvan 404 pero consuman CPU desproporcionada.
  • Asuman compromiso si el appliance estuvo expuesto sin parche. Roten credenciales de directorio activo, certificados TLS, claves de cifrado y secretos de API que el NetScaler pudiera haber alcanzado. Revisen logs de autenticación internos durante la ventana de septiembre en adelante.
  • Endurezcan el borde. Desactiven DTLS permanentemente si no lo necesitan. Aislen los NetScaler en una subred dedicada con egress restringido. Implementen alertas sobre modificaciones a /etc/httpd.conf y /bin/sh usando file integrity monitoring a nivel de hypervisor o cloud provider.
  • Conclusión

    La combinación de CVE-2026-88771 y CVE-2026-88772 muestra un patrón que ya conocemos de Citrix Bleed y CVE-2023-4966: el borde de red expuesto, sin EDR, sin parche inmediato, se convierte en el punto de ruptura. La diferencia aquí es la sofisticación del post-explotación: WHIPSHOT y SLAPSHOT no son scripts genéricos de un foro, son herramientas diseñadas para operar como proxy y túnel persistente sin dejar huellas evidentes en los logs estándar. Si gestionan NetScaler ADC o Gateway en producción, la ventana entre la detección de GreyNoise (24 de septiembre) y la publicación de Citrix (domingo siguiente) es un recordatorio incómodo: la explotación ya estaba ocurriendo cuando ustedes recién se enteraban.

    Fuentes

    • https://www.bleepingcomputer.com/news/security/hackers-exploit-citrix-netscaler-zero-day-to-deploy-web-shells/
    • https://www.qualys.com/blog/
    • https://cloud.google.com/blog/

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *