CVE-2009-3960
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
Apply updates per vendor instructions.
Summary
XXE (XML External Entity) no processamento de mensagens AMFX pelo BlazeDS (e por extensão em LiveCycle, LiveCycle Data Services, Flex Data Services e ColdFusion, que embutem o BlazeDS) permite a um atacante remoto e não autenticado ler arquivos arbitrários do sistema de arquivos do servidor. O CVSS 6.5 reflete um impacto restrito a confidencialidade — não há execução de código nem escrita — mas a falha está no catálogo KEV da CISA por exploração confirmada em ambiente real e possui PoC pública e módulo Metasploit, o que eleva bastante a prioridade prática de correção.
Technical detail
O endpoint de mensageria do BlazeDS (exposto via caminhos como /messagebroker/http, /flex2gateway/*, /blazeds/messagebroker/*, entre variantes usadas por LiveCycle Data Services e ColdFusion) aceita mensagens no formato AMFX, que é essencialmente AMF (Action Message Format) serializado como XML. O parser XML do lado servidor processa a declaração DOCTYPE do documento recebido sem desabilitar a resolução de entidades externas — um CWE-611 clássico.
Um atacante envia um documento XML contendo ` ]>` dentro de uma mensagem `flex.messaging.messages.CommandMessage` válida, referenciando a entidade (`&x3;`) em um dos campos de string da estrutura (por exemplo, o campo usado como clientId/correlationId no PoC público). O servidor resolve a entidade externa, lê o conteúdo do arquivo referenciado no sistema local e o inclui na resposta enviada de volta ao cliente, como parte do eco da mensagem processada.
O atacante controla o caminho do arquivo lido, dentro dos limites de permissão da conta de serviço que executa o BlazeDS/ColdFusion/LiveCycle. Como o conteúdo lido é reinserido em uma string dentro do XML de resposta, arquivos binários ou com caracteres que quebram XML podem não ser exfiltrados de forma limpa — o vetor funciona melhor contra arquivos de texto (configurações, arquivos de propriedades, credenciais em texto claro).
How it’s exploited
A exploração ocorre via uma requisição HTTP POST simples ao endpoint de mensageria exposto pelo produto (múltiplos caminhos possíveis dependendo da instalação: /messagebroker/http, /messagebroker/httpsecure, /flex2gateway/http, /blazeds/messagebroker/http, /samples/messagebroker/http, /lcds/messagebroker/http e variantes com sufixo -samples). Não é necessária autenticação — o pré-requisito real é apenas que o endpoint AMF/AMFX esteja acessível na rede, o que é o padrão em muitas instalações de LiveCycle, LCDS e ColdFusion com o serviço Flex/mensageria habilitado.
O resultado final é disclosure de arquivo: o atacante obtém o conteúdo de qualquer arquivo legível pela conta de serviço, sem necessidade de interação do usuário além do envio da requisição (o UI:R no vetor CVSS aqui não corresponde a um cenário típico de exploração direta via HTTP, mas reflete a nomenclatura oficial do vetor). Arquivos de configuração com credenciais (ex.: arquivos de propriedades de senha, web.xml, arquivos de seed) são o alvo natural, servindo como trampolim para escalada posterior — comprometimento de credenciais de banco de dados, painéis administrativos ou outras camadas da aplicação.
Existência de PoC pública (script bash publicado por Thomas Sluyter, replicando o módulo Metasploit `auxiliary/scanner/http/adobe_xml_inject`) e presença no catálogo KEV da CISA (adicionada em 2022-03-07, prazo de correção 2022-09-07) indicam exploração ativa continuada, provavelmente contra instalações legadas de ColdFusion/LiveCycle ainda expostas anos após a divulgação original em 2010.
Versions
How to protect
A Adobe publicou o boletim APSB10-05 tratando esta falha nas linhas de produto LiveCycle, LiveCycle Data Services, Flex Data Services e ColdFusion. Não há, nas fontes consultadas, confirmação do número exato de versão corrigida por produto — a recomendação é consultar diretamente o boletim APSB10-05 para a versão/hotfix aplicável à sua linha e build específicos antes de assumir qualquer versão como segura.
Como paliativo quando a atualização imediata não é viável: restringir o acesso de rede aos endpoints de mensageria (/messagebroker/*, /flex2gateway/*, /blazeds/messagebroker/*, /lcds/messagebroker/*) a redes confiáveis ou desabilitar/remover completamente os endpoints de amostra (samples) e canais AMFX não utilizados, já que vários dos caminhos vulneráveis pertencem a exemplos que raramente são necessários em produção. Onde a plataforma expuser configuração do parser XML, desabilitar a resolução de entidades externas (DTD/external entities) no processamento AMFX elimina a classe de falha, mas essa configuração depende da versão e não foi detalhada nas fontes disponíveis.
Não funciona como mitigação real: apenas bloquear a assinatura do PoC público específico (o script bash ou o módulo Metasploit) via WAF — como o vetor é uma técnica genérica de XXE, qualquer variação na estrutura do XML injetado (mudança de campo referenciado, encoding, uso de outras traits da mensagem) pode contornar regras baseadas em padrão exato de payload.
How to detect
Procurar em logs de acesso HTTP requisições POST para os endpoints de mensageria (/messagebroker/http, /messagebroker/httpsecure, /flex2gateway/*, /blazeds/messagebroker/*, /samples/messagebroker/*, /lcds/messagebroker/*, /lcds-samples/messagebroker/*) cujo corpo contenha uma declaração ` ]>` referenciando caminhos de arquivo (`file://`, caminhos absolutos Unix ou Windows como `c:\...`) dentro de uma estrutura AMFX/`CommandMessage`. Presença de referências a arquivos sensíveis conhecidos (/etc/passwd, web.xml, arquivos *.properties com 'password' no nome) no corpo da requisição é forte indício de tentativa de exploração.
Como o vetor é uma técnica genérica de XXE aplicada a um formato de mensagem específico, variações no payload (nome da entidade, campo referenciado, codificação) podem escapar de assinaturas simples — não há um único indicador de tráfego universalmente confiável além da combinação de DOCTYPE com ENTITY SYSTEM dirigida a esses endpoints específicos.