← volver
CVE-2014-3120highbajo ataqueCWE-284

CVE-2014-3120

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 8.1epss 89%
de la publicación al arma0 días
Publicada en NVD28 jul
1ª PoC13 may
metasploit9 dic
CISA KEV+2797d
probabilidad de explotación
89%top 1% de las CVE
explotación observada
CISA + VulnCheck
10 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-04-15

Apply updates per vendor instructions.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
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.
Corregidas en
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.

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.