← voltar
CVE-2014-3120highsob ataqueCWE-284

CVE-2014-3120

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 8.1epss 89%
da publicação à arma0 dias
Publicada no NVD28 de jul.
1ª PoC13 de mai.
metasploit9 de dez.
CISA KEV+2797d
probabilidade de exploração
89%top 1% das CVEs
exploração observada
simCISA + VulnCheck
10 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-04-15

Apply updates per vendor instructions.

Resumo

Falha na configuração padrão do Elasticsearch anterior à versão 1.2: a execução de scripts dinâmicos (MVEL) via API REST vinha habilitada por padrão, sem autenticação, permitindo que um atacante injete expressões MVEL no parâmetro de script do endpoint _search e execute código Java arbitrário no host. É crítica porque o vetor é a interface HTTP padrão do banco de dados, exposta em milhares de instalações de desenvolvimento e produção da época, e está no catálogo KEV da CISA com exploração confirmada em campo, além de módulo Metasploit e PoC pública prontos.

Detalhamento técnico

O Elasticsearch permite parametrizar consultas e agregações com scripts (dynamic scripting) para calcular campos, ordenar resultados ou filtrar documentos. Antes da versão 1.2, essa funcionalidade vinha habilitada por padrão e aceitava a linguagem MVEL (Mvflex Expression Language) sem sandboxing efetivo. Qualquer requisição à API _search podia incluir um bloco 'script' com uma expressão MVEL, e o motor de scripting a compilava e executava no contexto da JVM do próprio servidor Elasticsearch.

O problema de fundo é duplo: (1) a API REST do Elasticsearch, na configuração padrão da época, não exigia autenticação nem controle de acesso — qualquer cliente com acesso de rede à porta HTTP (9200 por padrão) podia enviar a requisição; (2) o sandbox do MVEL não impedia acesso reflexivo a classes Java arbitrárias, então uma expressão bem construída conseguia alcançar java.lang.Runtime ou equivalentes e executar comandos no sistema operacional subjacente, e não apenas manipular dados dentro do índice. A CISA classifica isso sob CWE-284 (Improper Access Control) — a causa raiz não é um bug de parsing, é a decisão de design de expor uma linguagem de script Turing-completa, sem isolamento robusto, numa API sem autenticação.

A nota oficial do NVD registra que o fornecedor considerava isso violação da política de segurança apenas se o operador não rodasse o Elasticsearch em uma máquina virtual isolada — ou seja, o vendor via a execução de scripts como um recurso dentro de um perímetro de confiança esperado (a instância inteira), não como uma falha isolada. Na prática, a maioria dos deployments não isolava o Elasticsearch dessa forma, o que tornou a exploração trivialmente relevante.

Como é explorada

O vetor é uma requisição HTTP simples ao endpoint de busca (_search) da API REST do Elasticsearch, contendo um script MVEL malicioso em campos como script_fields ou dentro da query. O módulo Metasploit (exploit/multi/elasticsearch/script_mvel_rce) confirma que a exploração não exige autenticação — basta acesso de rede à porta do serviço — e foi testado com sucesso em Elasticsearch 1.1.1 tanto em Linux quanto em Windows, retornando execução de comando arbitrário com os privilégios do processo Elasticsearch.

A complexidade é baixa: não há necessidade de engenharia social, nem de condições de corrida ou timing. O único pré-requisito real é a instância estar acessível na rede (frequentemente exposta sem firewall em ambientes de nuvem e desenvolvimento da época) e não ter desabilitado manualmente o scripting dinâmico. O CVSS informado carrega PR:L (privilégio baixo necessário), mas as fontes técnicas (Rapid7/Metasploit) descrevem a API como não autenticada por padrão — vale considerar essa divergência ao avaliar o risco real do seu ambiente: se a instância está isolada por rede ou atrás de proxy com autenticação, o cenário muda.

A presença no catálogo KEV da CISA (adicionada em 2022, bem depois da divulgação original de 2013/2014) indica exploração continuada em campo, tipicamente contra instâncias antigas ou mal atualizadas ainda expostas à internet — um padrão comum de scanners automatizados que buscam serviços Elasticsearch legados.

Versões

Afetadas
Elasticsearch anterior à versão 1.2 (configuração padrão com dynamic scripting habilitado). Testado e confirmado explorável em 1.1.1. Logstash 1.4.2, por empacotar Elasticsearch 1.1.1, também ficava vulnerável quando usado com Elasticsearch output em modo 'node' ou com embedded=>true.
Corrigidas em
Elasticsearch 1.2.0 e posteriores (dynamic scripting desabilitado por padrão). Logstash 1.4.3, que passou a empacotar binários do Elasticsearch 1.5.2 com scripting desabilitado por padrão.

Como se proteger

A correção do fornecedor foi desabilitar dynamic scripting por padrão a partir do Elasticsearch 1.2. A atualização para 1.2 ou posterior remove a exposição por padrão; versões subsequentes continuaram reforçando isolamento de scripts (sandboxing por linguagem, scripts pré-armazenados via arquivo em vez de inline) em releases posteriores da série 1.x e 2.x.

Quem não pode atualizar imediatamente deve desabilitar explicitamente a execução de scripts dinâmicos na configuração do Elasticsearch (script.disable_dynamic, dependendo da versão) e nunca expor a porta HTTP/transport da API diretamente à internet ou a redes não confiáveis — o controle de rede (firewall, bind em interface interna, proxy autenticado) é o paliativo mais efetivo quando o patch não é viável.

Um caso lateral relevante: o Logstash 1.4.2 vinha empacotado com binários do Elasticsearch 1.1.1 vulnerável, afetando especificamente quem usava o Elasticsearch output com protocolo 'node' (o node client se junta ao cluster e fica exposto ao mesmo vetor) ou a opção embedded=>true. A correção veio no Logstash 1.4.3, que passou a empacotar Elasticsearch 1.5.2 com scripting desabilitado por padrão; usuários de protocolo transport ou http no Logstash não eram afetados por essa via. Rodar a instância em VM isolada, como o fornecedor sugeriu como premissa de segurança, não é mitigação suficiente sozinha — reduz o impacto de um comprometimento mas não impede a execução de código nem exfiltração de dados do próprio índice.

Como detectar

Em logs de acesso HTTP do Elasticsearch, procure requisições POST/GET ao endpoint _search (ou a índices específicos com /_search) contendo os termos 'script', 'script_fields' ou 'mvel' no corpo da requisição, especialmente vindas de IPs não pertencentes à infraestrutura conhecida. Não há uma assinatura única confiável, porque o payload MVEL é livre — qualquer WAF ou IDS precisa inspecionar o corpo JSON da requisição, não apenas a URL, e scanners automatizados que testam esse vetor tendem a usar variações conhecidas de PoCs publicadas (exploit-db 33370), o que dá alguma base para regras de assinatura, mas um atacante determinado pode ofuscar a expressão MVEL para evitar padrões simples.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
The default configuration in Elasticsearch before 1.2 enables dynamic scripting, which allows remote attackers to execute arbitrary MVEL expressions and Java code via the source parameter to _search. NOTE: this only violates the vendor's intended security policy if the user does not run Elasticsearch in its own independent virtual machine.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
Produtos afetados
n/a · n/a
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.