← back
CVE-2019-12989criticalunder attackCWE-89

CVE-2019-12989

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 9.8epss 94%
from disclosure to weapon0 days
Published on NVDJul 16
1st PoCJul 12
CISA KEV+983d
exploitation probability
94%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
2 public exploit(s)
Action required by CISAfederal deadline: 2022-04-15

Apply updates per vendor instructions.

Summary

SQL injection não autenticada no endpoint da API Nitro do Citrix SD-WAN (`/sdwan/nitro/v1/config/get_package_file`), que permite a um atacante remoto sem credenciais escrever arquivos arbitrários no sistema via `INTO OUTFILE` e, a partir daí, forjar um token de sessão válido — bypass completo de autenticação. É a porta de entrada de uma cadeia que termina em execução de comando como root quando combinada com CVE-2019-12991. Está no catálogo KEV da CISA com exploração confirmada, o que eleva a prioridade de patch bem além do que o CVSS sozinho sugeriria.

Technical detail

A falha (CWE-89) está no script Perl `getpackagefile.cgi`, que monta consultas SQL concatenando diretamente o parâmetro `site_name` recebido no corpo da requisição, sem sanitização ou uso de prepared statements. O trecho vulnerável identificado pela Tenable monta uma query do tipo `SELECT ... FROM Network_Appliance_Active WHERE site_name ='' AND appliance_id=;` — o atacante controla `site_name` e injeta uma cláusula `UNION SELECT ... INTO OUTFILE` para gravar conteúdo arbitrário em qualquer caminho onde o usuário `mysql` tenha permissão de escrita, incluindo `/tmp`.

O ponto crítico é que essa escrita arbitrária de arquivo é usada para forjar um arquivo de token de sessão (`swc-token`) diretamente no diretório esperado pela aplicação. Como o mecanismo de autenticação do painel de gerência confia na existência desse arquivo em disco, criar um token via SQLi equivale a autenticar-se sem jamais fornecer credenciais válidas. A requisição vulnerável exige o cabeçalho `SSL_CLIENT_VERIFY: SUCCESS`, o parâmetro `action=file_download` e `Content-Type: application/json`, condições triviais de satisfazer porque são controladas pelo próprio cliente HTTP, não pelo servidor.

A Tenable documentou outras queries na mesma rotina igualmente vulneráveis ao mesmo padrão de concatenação insegura, então a superfície de injeção não se limita a um único ponto de entrada dentro do script.

How it’s exploited

O vetor é uma única requisição HTTP POST não autenticada contra a interface de gerência/API do appliance, sem necessidade de acesso prévio, conta válida ou configuração não padrão — basta acesso de rede à porta HTTPS de gerenciamento. O atacante injeta o payload SQL no campo `site_name` para gravar um arquivo de token no sistema de arquivos local do appliance (tipicamente em `/tmp`), depois acessa outro endpoint (`vwdash.cgi`) apresentando esse token forjado como parâmetro de sessão, obtendo uma sessão administrativa autenticada sem nunca ter tido credenciais.

A partir daí a cadeia de ataque documentada pela Tenable segue para CVE-2019-12991 (command injection autenticado em `installpatch.cgi`, parâmetro `installfile` passado sem validação a uma chamada `system()` do Perl), alcançando execução de comando como root. Ou seja, a SQLi por si só já entrega bypass de autenticação e escrita arbitrária de arquivo; combinada com a segunda falha, entrega controle total do appliance.

A presença no catálogo KEV da CISA confirma exploração ativa em ambiente real, e a existência de PoC pública e de template Nuclei tornam a detecção do ataque trivial de automatizar tanto para defensores quanto para atacantes — a barreira técnica para exploração é baixa.

Versions

Affected
Citrix SD-WAN 10.2.x anterior a 10.2.3 e NetScaler SD-WAN 10.0.x anterior a 10.0.8, segundo a descrição oficial do CVE. A Tenable, que descobriu a falha, lista o escopo afetado de forma um pouco diferente em seu advisory original: NetScaler SD-WAN 9.x, NetScaler SD-WAN 10.0.x antes de 10.0.8, e Citrix SD-WAN 10.1.x — divergência provavelmente ligada ao rebranding do produto (NetScaler SD-WAN → Citrix SD-WAN) entre as linhas de versão, sem que as fontes disponíveis expliquem o mapeamento exato entre 10.1.x e 10.2.x.
Fixed in
10.2.3 e 10.0.8, conforme confirmado pelo advisory da Tenable ('version 10.2.3 patches all issues') e pelo bulletin da Citrix (CTX251987).

How to protect

A correção do fornecedor é atualizar para Citrix SD-WAN 10.2.3 ou superior, ou NetScaler SD-WAN 10.0.8 ou superior, conforme o ramo em uso. Não há flag de configuração ou desativação de funcionalidade documentada como paliativo eficaz — a falha está na lógica de construção de query do script CGI, então qualquer mitigação sem patch depende de bloquear o acesso à API vulnerável.

Como controle compensatório enquanto o patch não é aplicado, restrinja o acesso à interface de gerenciamento/API Nitro (`/sdwan/nitro/v1/...`) apenas a redes de gerência confiáveis — isolamento de rede é a mitigação real disponível, já que o vetor exige alcançar essa interface via rede. Um WAF com regra específica para o padrão de injeção no parâmetro `site_name` reduz risco mas não fecha a falha, pois há outras queries vulneráveis no mesmo script além da documentada no PoC.

Não trate autenticação de rede (VPN, bastion) como substituto de patch permanente: como o próprio ataque é um bypass de autenticação, qualquer superfície residual acessível à interface vulnerável mantém o risco. A ação recomendada pela CISA no KEV é simplesmente aplicar a atualização do fornecedor.

How to detect

Requisições HTTP POST para o endpoint `/sdwan/nitro/v1/config/get_package_file?action=file_download` contendo o cabeçalho `SSL_CLIENT_VERIFY: SUCCESS` combinado com sintaxe SQL (`UNION SELECT`, `INTO OUTFILE`) no corpo JSON, especialmente no campo `site_name`, são o indicador mais direto de tentativa de exploração — esse é exatamente o padrão do PoC público e do template Nuclei existente. Presença de arquivos inesperados em `/tmp` com nome relacionado a `token_` no appliance, ou logins no `vwdash.cgi` via parâmetro `swc-token` sem fluxo de autenticação normal precedente, são sinais de comprometimento pós-exploração.

Como o ataque não deixa rastro em logs de autenticação convencionais (a autenticação nunca ocorre de fato, é forjada), a ausência de eventos de login não indica ausência de exploração — a análise deve focar em logs de acesso HTTP do appliance e no conteúdo dos requests, não em logs de sessão.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
Citrix SD-WAN 10.2.x before 10.2.3 and NetScaler SD-WAN 10.0.x before 10.0.8 allow SQL Injection.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Affected products
n/a · n/a
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.