Incidentes e Vulnerabilidades

Log4Shell (CVE-2021-44228) — uma falha numa biblioteca de logs, e por que as equipes não conseguiam saber rápido se a usavam

Em 2021, o Log4j teve um RCE com CVSS 10.0 que atingiu quem nem sabia que usava a biblioteca. Como aconteceu e as lições: SBOM e patch rápido.

Publicado 2026-06-07 Atualizado 2026-10-23 5 min de leitura
Nesta página

Revisitando um grande incidente do passado, não para reproduzir o ataque, mas pelas lições que ainda valem para suas operações.

2021/12
divulgado
10.0
CVSS (pior classe)
transitiva
o problema central
vários
CVEs de continuação

O que aconteceu: escrever uma linha de log virou um caminho de ataque

O Log4j cuidava da tarefa mundana de escrever logs e era muito usado em aplicações Java. A falha: a biblioteca interpretava certo padrão dentro de strings registradas como algo a "resolver buscando externamente" e acabava executando código especificado externamente.

Então um invasor que conseguisse colocar uma string maliciosa em "algum lugar que fosse registrado em log" (um nome de usuário, um cabeçalho) podia chegar à execução de código. Que um ato passivo como registrar logs pudesse virar um caminho de ataque foi uma grande surpresa.

Por que era difícil saber se você estava afetado

A maioria dos apps nunca instalou o Log4j diretamente. Um framework ou SDK o puxava. Isso é uma dependência transitiva: uma dependência de uma dependência de uma dependência. Sem a sua "lista de materiais", você nem conseguia dizer se estava afetado.

Seu app (uma linha no package.json)
└─▶
framework / SDK (dependência direta)
└─▶
um componente de logging (dependência de uma dependência)
└─▶
Log4j ← a vulnerabilidade (nunca instalada diretamente)
Você adicionou uma linha, mas dezenas de 'dependências de dependências' ficam por baixo dela. O Log4j estava entre elas.

O maior problema era não saber se você o usava

Quando você "não consegue dizer se usa", você nem consegue priorizar a resposta. Ter ou não uma lista de materiais (SBOM) determinava em grande parte a velocidade da resposta.

Linha do tempo

  1. 2021-12-09–10

    A falha se torna amplamente conhecida; o mundo corre para checar "estamos afetados?".
  2. logo depois

    Patches de emergência e mitigações paliativas são implantados; tentativas de exploração disparam.
  3. depois disso

    Vários CVEs de continuação (correções da correção) são publicados — "corrigido uma vez" não era o fim.

Lições que ainda valem

1

Tenha um SBOM (lista de materiais)

Torne visível o que seu app usa internamente: npm ls, lockfiles e ferramentas de SBOM mostram o que realmente roda. Olhar só "o que você instalou diretamente" não basta.

2

Monitore dependências por máquina

No instante em que um CVE sai, saiba automaticamente se ele se aplica (Dependabot / osv-scanner), incluindo dependências transitivas. Verificações manuais sempre deixam algo passar.

3

Torne o patch rápido

Pratique "atualizar, verificar, publicar" na rotina para conseguir fazê-lo rápido numa emergência. Veja como montar o monitoramento de dependências.

4

Acompanhe os CVEs de continuação

Depois do Log4Shell, surgiram correções da correção. Não pare em "corrigido uma vez"; acompanhe as continuações.

Leia em seguida

Fontes e escopo

Estas fontes primárias fundamentam as configurações, o escopo ou as medidas acima; links conferidos em 23 de outubro de 2026. Confira as condições de versão e configuração. As prioridades e lições são orientações deste site, não uma revalidação completa nem garantia de segurança.

FAQ

QO que havia de novo no problema do Log4Shell?
A

Ele expôs o perigo das dependências transitivas em escala global: estar vulnerável por uma biblioteca usada dentro de outra biblioteca, mesmo sem instalação direta. Sem conhecer seu SBOM, você nem conseguia dizer se estava afetado.

QPor que o registro de logs virou vetor de ataque?
A

O Log4j interpretava certo texto dentro de strings registradas como algo a 'resolver buscando externamente'. O invasor só precisava colocar uma string maliciosa em algum lugar que fosse registrado em log (um nome de usuário, um cabeçalho HTTP), transformando um caminho passivo de log em execução de código.

QComo evito repetir isso?
A

Três coisas: monitore dependências por máquina (Dependabot/osv-scanner), gere um SBOM para ver o que você realmente usa e mantenha um processo de atualização rápido o bastante para corrigir depressa. Acompanhe também os CVEs de continuação (correções da correção).