flawopen.com/Incidents/citrix-bleed-session-token-leak-october-2023
Citrix Bleed: vazamento de tokens e bypass de MFA
A CVE-2023-4966 expôs memória do NetScaler com tokens de sessão; o sequestro contornou MFA. A exploração começou no fim de ago. de 2023.[1], [2]
Você pede a um assistente que copie uma mensagem num cartão pequeno e diga o tamanho dela. O cartão só comporta 50 caracteres, então ele escreve 50, mas quando você pergunta o tamanho da mensagem, responde com sinceridade "800 caracteres", porque esse era o tamanho do original. Aí você entrega o cartão a alguém e manda ler 800 caracteres dele. A pessoa lê os seus 50 e continua lendo o que estiver escrito no resto da folha.[2]
Conceitos Centrais e Termos
snprintf- Função de C que formata texto num buffer de tamanho fixo. Quando o texto não cabe, ela o trunca, mas retorna o tamanho que o texto completo teria.[3]
NetScaler ADC / Gateway- Appliances da Citrix que oferecem acesso remoto e balanceamento de carga na borda da rede. Só os configurados como Gateway ou servidor virtual AAA eram afetados.[1]
Leitura além do buffer (CWE-125)- Ler depois do fim de um buffer. Nada é sobrescrito, mas o que estiver na memória vizinha é revelado. Isso descreve o mecanismo específico de leitura fora dos limites (
CWE-125); a Citrix classifica aCVE-2023-4966de forma ampla comoCWE-119.[1], [3] Token de sessão- O valor que prova que um usuário já fez login. Quem o apresenta é tratado como aquele usuário, sem pedido de senha nem de MFA.[2]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-119
- CISA KEV — adicionado em 2023-10-18 — CVE-2023-4966
Linha do Tempo do Incidente
Começa a exploração da falha como zero-day, segundo relatórios posteriores de resposta a incidentes.[2]
A Citrix publica o boletim CTX579459 com as versões corrigidas 14.1-8.50, 13.1-49.15 e 13.0-92.19.[1]
A CISA inclui a CVE-2023-4966 no catálogo Known Exploited Vulnerabilities.[4]
Fluxo de Ataque Passo a Paso
A memória além do buffer é enviada
A resposta é enviada com esse tamanho maior, e o appliance devolve memória vizinha junto com o JSON truncado.[2]
Código-Fonte: Vulnerável vs. Seguro
C ilustrativo, não é código-fonte do NetScaler. A correção verifica o valor retornado por snprintf, que informa o tamanho que a saída completa teria. Se for negativo ou igual ou maior que o tamanho do buffer, a formatação falhou ou foi truncada, então a função não envia nada. Assim, send_response só recebe o tamanho quando a resposta completa cabe em 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 é o número de bytes que seriam gravados e pode exceder sizeof(buf) */
int n = snprintf(buf, sizeof(buf), "{\"issuer\":\"https://%s\"}", host);
return send_response(buf, n); /* envia n bytes, lendo além 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; /* rejeite saída truncada; nunca envie além do buffer */
return send_response(buf, n);
}
Lista de Verificação de Segurança para Engenharia
- ✓Verifique sempre o truncamento do snprintf: if (n < 0 || (size_t)n >= sizeof(buf)) é o caminho de erro. Tratar o retorno como bytes escritos é um bug de C comum e grave.[3]
- ✓Nunca deixe uma entrada controlada pelo atacante definir o tamanho de uma saída. Limite qualquer tamanho derivado de dados não confiáveis aos limites reais do buffer antes de usá-lo.[3]
- ✓Orientação de resposta da FlawOpen: se houver suspeita de exposição de tokens de sessão, revogue ou invalide as sessões afetadas quando a plataforma permitir. Aplicar o patch fecha o vazamento, mas não revoga tokens já expostos.
- ✓Orientação operacional da FlawOpen: mantenha sessões curtas quando os requisitos do serviço permitirem e investigue o uso de tokens em redes ou dispositivos inesperados. A Mandiant aponta padrões de login suspeitos como pista de investigação e ressalta que eles exigem o contexto específico da organização.[2]
- ✓Submeta os appliances de borda à mesma disciplina de patches e monitoramento dos seus servidores; eles ficam expostos à internet e guardam o acesso de todos que estão atrás deles.[1], [2]