Pular para o conteúdo
Novo

DeepSeek V4.1 Flash grátis por 7 dias: 10M tokens por dia após qualquer recarga. Até 30/11.

Como funciona

Lendo um CVE: o que um registro CVE diz e o que não diz

Um registro CVE nomeia a falha e aponta para o fornecedor, que é quem define a versão corrigida.

Iniciante13 min de leituraPor NotHoly

Você lê uma notícia dizendo que uma falha com número CVE está sendo explorada. Dez minutos depois, um colega pergunta se você já aplicou a correção. O número é o único dado em que os dois concordam. Ele dá nome a uma falha. Não diz o quanto essa falha é grave para os seus sistemas, quais das suas versões são afetadas nem o que instalar.

Este artigo explica o que é um ID CVE, quem o atribui, o que significa cada campo de um registro CVE e como o National Vulnerability Database (NVD) complementa esse registro. A parte prática lê um registro bem conhecido, o CVE-2021-44228 (Log4Shell), campo por campo, primeiro no cve.org e depois na API do NVD. Em seguida, abre o aviso do fornecedor para onde o registro aponta. O ponto principal: o registro CVE leva você ao aviso do fornecedor, e o aviso do fornecedor é a fonte da verdade sobre as versões corrigidas.

Se você já leu O que é uma vulnerabilidade, os termos vão parecer familiares. O laboratório faz apenas consultas somente leitura a dois serviços públicos e a uma página web pública.

O que é um ID CVE

CVE quer dizer Common Vulnerabilities and Exposures. O CVE Program, como descreve a própria visão geral, identifica, define e cataloga vulnerabilidades de segurança divulgadas publicamente. Cada vulnerabilidade recebe uma entrada, chamada registro CVE, e o ID é a identificação dessa entrada. Ele tem a forma CVE-ANO-NÚMERO. O ano é o ano em que o ID foi reservado, que muitas vezes não é o ano em que o erro foi escrito ou corrigido.

O ID é um nome. Ele permite que duas pessoas, ou duas ferramentas, digam "esta" e se refiram à mesma falha. Ele não carrega nota de gravidade, lista de produtos afetados, correção nem status de exploração. Essas informações ficam no registro, e algumas delas vêm de outras organizações.

Quem atribui os IDs

O CVE Program trabalha por meio dos CVE Numbering Authorities, ou CNAs. O site do CVE descreve os CNAs como fornecedores, pesquisadores, projetos de código aberto, CERTs, serviços hospedados, provedores de programas de recompensa por bugs e consórcios. Cada um está autorizado a atribuir IDs e publicar registros dentro do próprio escopo. Quando consultamos a página de CNAs em 2026-11-08, ela listava 564 CNAs, incluindo 3 CNA-LRs (CNAs de última instância, para produtos que nenhum outro CNA cobre). O número muda, então confira a página para ver o total atual.

Escopo é a palavra que você deve guardar. A Apache Software Foundation é o CNA dos projetos Apache, por isso o registro do CVE-2021-44228 a indica como CNA. O CNA escreve o título, a descrição, os produtos afetados, as referências e os tipos de problema. Outras partes podem acrescentar dados depois, e é aí que entra o NVD.

Os campos de um registro CVE

Os nomes dos campos abaixo vêm do formato JSON de registros CVE. A visualização JSON no cve.org e o JSON da API CVE usam a mesma estrutura.

Estado e datas

O estado mostra se a entrada está ativa. O registro deste laboratório mostra "state": "PUBLISHED". Também existem registros rejeitados, então verifique o estado antes de tudo.

O JSON do CVE traz três datas: dateReserved, datePublished e dateUpdated. Para o CVE-2021-44228 elas são 2021-11-26, 2021-12-10 e 2025-10-21. O NVD mantém as próprias datas. O campo published dele é 2021-12-10, e o lastModified é 2026-08-11 na resposta que coletamos. A página do cve.org mostra uma data "Updated" separada, 2023-04-03, vinda dos metadados do provedor (o CNA). Três fontes, três datas de atualização. Compare antes de concluir que você tem o texto mais recente.

Descrição

A descrição é o texto escrito pelo CNA. Ela deve dizer o que é a falha, o que a dispara e quais versões ela atinge. A descrição do Log4Shell informa a faixa de versões afetadas, nomeia o recurso envolvido (buscas JNDI em configuração, mensagens de log e parâmetros), diz a partir de qual versão esse comportamento ficou desativado por padrão e afirma que o log4net e outros projetos de log da Apache não são afetados. Essa última frase evita uma tarde inteira aplicando correção no componente errado.

Produtos e versões afetados

Esse bloco é a parte mais útil do registro e a mais fácil de ler errado. Cada afirmação de versão diz se uma faixa é afetada, não afetada ou desconhecida, e pode expressar mudanças em números de versão específicos.

A página do cve.org mostra a entrada do Log4j2 como uma linha do tempo: afetado a partir de 2.0-beta9, não afetado a partir de 2.3.1, afetado a partir de 2.4, não afetado a partir de 2.12.2, afetado a partir de 2.13.0 e não afetado a partir de 2.15.0. Uma versão assume o status do ponto de mudança mais recente que a antecede. As lacunas são o ponto principal. "Tudo abaixo de 2.15.0 é vulnerável" está errado aqui, porque 2.3.1 e 2.12.2 aparecem como não afetados.

O campo lessThan indica o componente, log4j-core*. O aviso da Apache diz que uma aplicação que usa só o JAR log4j-api não é afetada. Leia o componente junto com a versão. A lista também só é tão completa quanto o CNA a deixou. Produtos que embutem a biblioteca podem não aparecer, e é aí que o aviso do fornecedor e a configuração do NVD ajudam.

Referências

Referências são links para avisos de fornecedores, listas de discussão, textos de terceiros e, às vezes, páginas sobre exploração. A página do cve.org lista 53 referências para o CVE-2021-44228, cada uma com uma etiqueta como vendor-advisory, mailing-list, third-party-advisory ou exploit. Leia primeiro os links vendor-advisory. Páginas de terceiros dão contexto, não versões corrigidas. A cópia do NVD deste registro guarda as referências na ordem própria, e as cinco primeiras são páginas da Packet Storm.

Fraquezas (CWE)

CWE é a Common Weakness Enumeration, um catálogo de tipos de fraqueza. CWE-20 é Improper Input Validation (validação de entrada inadequada), e CWE-502 é Deserialization of Untrusted Data (desserialização de dados não confiáveis). Um CWE diz que tipo de erro levou à falha. Ele não nomeia um produto.

O CNA lista CWE-20, CWE-400 e CWE-502. O registro do NVD lista os mesmos três, atribuídos ao endereço de segurança da Apache, e acrescenta o CWE-917, atribuído ao próprio NVD. Mantenha a coluna da fonte à vista. Você pode discordar do mapeamento de um analista, e precisa saber qual mapeamento está lendo. O CWE também serve para agrupar. Uma busca por CWE encontra todas as falhas de desserialização em vários produtos, o que ajuda em revisão de código e modelagem de ameaças.

Métricas

Métricas guardam notas e avaliações de fontes diferentes.

CVSS (Common Vulnerability Scoring System) dá uma pontuação base de 0 a 10, um rótulo de gravidade e um vetor com os dados de entrada: vetor de ataque, complexidade, privilégios, interação do usuário, escopo e impacto. A entrada CVSS v3.1 do NVD para este registro é 10.0, CRITICAL, com o vetor CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H. O registro também tem a pontuação CVSS v2.0 do NVD, 9.3. A pontuação descreve a falha sob premissas declaradas. Ela não descreve a sua exposição.

SSVC é um método de decisão que pergunta se a exploração está ativa, se o ataque pode ser automatizado e qual é o tamanho do impacto técnico. Este registro tem uma entrada SSVC, de uma fonte de coordenação da CISA, que marca exploração ativa, automatizável sim e impacto técnico total.

KEV é o catálogo Known Exploited Vulnerabilities da CISA. O registro mostra uma data de inclusão (2021-12-10), uma data limite de ação (2021-12-24) e uma ação exigida: aplicar as atualizações ou remover os ativos afetados da rede. KEV significa que houve exploração observada. É uma pergunta diferente de quão grave a falha é.

Métricas mudam. Leia a fonte e a data junto com cada número.

Como o NVD enriquece um registro

O NVD é mantido pelo NIST, um projeto separado do CVE Program. Ele pega registros CVE e acrescenta o que o CNA pode não ter fornecido: pontuações CVSS que ele calcula ou confirma, mapeamento de CWE, configurações CPE (correspondências de produto e versão legíveis por máquina), etiquetas de referência e um campo de status. A API do NVD em services.nvd.nist.gov entrega esses registros enriquecidos. A página do painel do NVD fica junto da documentação da API, então consulte-a para ver avisos antes de presumir que o enriquecimento está em dia.

O bloco de configuração é a parte que a maioria das pessoas nunca abre. Este registro tem 20 blocos de configuração com 396 entradas de correspondência CPE. A primeira entrada é um pacote de firmware da Siemens, o que mostra que a lista cobre produtos que embutem a biblioteca, e não só as versões da própria Apache. Uma configuração vazia ou escassa pode significar que a análise não terminou, não que o produto esteja seguro.

O status aqui é Analyzed. Isso significa que o NVD processou o registro. Não significa que o NVD testou algo na sua rede. A data lastModified é 2026-08-11, bem depois da publicação, então um registro que você leu no ano passado pode ter mudado.

Prática: leia o CVE-2021-44228 campo por campo

Requisitos. Um navegador, curl (o Git Bash no Windows já inclui) e Python 3.12. jq é opcional. Todas as requisições aqui são leituras de serviços públicos. Não faça loop na API do NVD. Sem chave de API, o NVD limita requisições em um curto período, então execute cada comando uma vez.

Passo 1: leia a página do registro CVE

Abra https://www.cve.org/CVERecord?id=CVE-2021-44228 e leia do início ao fim. No dia em que este laboratório foi feito, a página mostrava:

  • CNA: Apache Software Foundation
  • Publicado em 2021-12-10, com uma data "Updated" separada, 2023-04-03
  • Título (em inglês, como no registro): Apache Log4j2 JNDI features do not protect against attacker controlled LDAP and other JNDI related endpoints
  • CWE: 3 no total
  • Produto: Apache Log4j2, com as afirmações de versão descritas acima
  • Referências: 53 no total

Passo 2: busque o registro no NVD e filtre os campos

O comando do laboratório, escrito para jq:

bash
curl -s 'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228' | jq '.vulnerabilities[0].cve | {id, published, descriptions: .descriptions[0].value, weaknesses, references: [.references[0:5][].url]}'

O jq não estava instalado na máquina usada para testar este laboratório, então o mesmo filtro rodou em Python 3.12. Use este comando se também não tiver jq:

bash
curl -s 'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228' -o nvd.json
python -c "import json; c=json.load(open('nvd.json', encoding='utf8'))['vulnerabilities'][0]['cve']; print(json.dumps({'id': c['id'], 'published': c['published'], 'descriptions': c['descriptions'][0]['value'], 'weaknesses': c['weaknesses'], 'references': [r['url'] for r in c['references'][0:5]]}, indent=2, ensure_ascii=False))"

Saída observada desse comando:

json
{
  "id": "CVE-2021-44228",
  "published": "2021-12-10T10:15:09.143",
  "descriptions": "Apache Log4j2 2.0-beta9 through 2.15.0 (excluding security releases 2.12.2, 2.12.3, and 2.3.1) JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled. From log4j 2.15.0, this behavior has been disabled by default. From version 2.16.0 (along with 2.12.2, 2.12.3, and 2.3.1), this functionality has been completely removed. Note that this vulnerability is specific to log4j-core and does not affect log4net, log4cxx, or other Apache Logging Services projects.",
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        { "lang": "en", "value": "CWE-20" },
        { "lang": "en", "value": "CWE-400" },
        { "lang": "en", "value": "CWE-502" }
      ]
    },
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        { "lang": "en", "value": "CWE-917" }
      ]
    }
  ],
  "references": [
    "http://packetstormsecurity.com/files/165225/Apache-Log4j2-2.14.1-Remote-Code-Execution.html",
    "http://packetstormsecurity.com/files/165260/VMware-Security-Advisory-2021-0028.html",
    "http://packetstormsecurity.com/files/165261/Apache-Log4j2-2.14.1-Information-Disclosure.html",
    "http://packetstormsecurity.com/files/165270/Apache-Log4j2-2.14.1-Remote-Code-Execution.html",
    "http://packetstormsecurity.com/files/165281/Log4j2-Log4Shell-Regexes.html"
  ]
}

Repare em três coisas. O published do NVD traz um horário, 10:15, sem fuso, enquanto o JSON do CNA dá meia-noite no mesmo dia. A entrada CWE acrescentada pelo NVD aparece em um bloco separado. E as cinco primeiras referências são páginas de terceiros, então o link do fornecedor precisa vir de um passo posterior.

Passo 3: leia as pontuações e o status do NVD

bash
python -c "import json; c=json.load(open('nvd.json', encoding='utf8'))['vulnerabilities'][0]['cve']; print('lastModified', c['lastModified'], '| vulnStatus', c['vulnStatus']); [print(k, m['source'], m['type'], m['cvssData']['version'], m['cvssData']['baseScore'], m['cvssData'].get('baseSeverity'), m['cvssData']['vectorString']) for k in ('cvssMetricV31', 'cvssMetricV2') for m in c['metrics'][k]]"

Saída observada:

text
lastModified 2026-08-11T19:33:44.513 | vulnStatus Analyzed
cvssMetricV31 [email protected] Primary 3.1 10.0 CRITICAL CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvssMetricV31 134c704f-9b21-4f2e-91b3-4a467353bcc0 Secondary 3.1 10.0 CRITICAL CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvssMetricV2 [email protected] Primary 2.0 9.3 None AV:N/AC:M/Au:N/C:C/I:C/A:C

A entrada v2 não tem rótulo de gravidade, o que é normal no CVSS v2. A fonte secundária v3.1 é um identificador, não um nome. O mesmo identificador aparece nos dados SSVC ao lado do papel de coordenador da CISA, então dá para inferir mais do que o campo diz. Anote o que você consegue confirmar e diga qual parte é inferência.

Passo 4: compare com o JSON CVE do CNA

bash
curl -s 'https://cveawg.mitre.org/api/cve/CVE-2021-44228' -o cve5.json
python -c "import json; d=json.load(open('cve5.json', encoding='utf8')); print(json.dumps(d['cveMetadata'], indent=2))"

Saída observada:

json
{
  "state": "PUBLISHED",
  "cveId": "CVE-2021-44228",
  "assignerOrgId": "f0158376-9dc2-43b6-827c-5f631a4d8d09",
  "assignerShortName": "apache",
  "dateUpdated": "2025-10-21T23:25:23.121Z",
  "dateReserved": "2021-11-26T00:00:00.000Z",
  "datePublished": "2021-12-10T00:00:00.000Z"
}

O campo assignerShortName identifica o CNA. O bloco de métricas do próprio CNA não tem pontuação CVSS, só uma entrada other que diz critical. A pontuação CVSS que você vê vem do NVD.

Passo 5: abra o aviso do fornecedor

Abra https://logging.apache.org/log4j/2.x/security.html. A página redireciona para logging.apache.org/security.html. Ela tem uma seção por CVE. A seção do CVE-2021-45046 fica acima da do CVE-2021-44228.

No texto que coletamos em 2026-11-08, a seção do CVE-2021-44228 dá a faixa afetada como [2.0-beta9, 2.3.1), [2.4, 2.12.2) e [2.13.0, 2.15.0), e as versões corrigidas como 2.3.1 para Java 6, 2.12.2 para Java 7 e 2.15.0 para Java 8 ou superior. A seção do CVE-2021-45046 diz que a correção do CVE-2021-44228 na 2.15.0 estava incompleta em algumas configurações não padrão. A linha de mitigação recomenda 2.3.1 para Java 6, 2.12.3 para Java 7, ou 2.16.0 para Java 8 ou superior.

Coloque as fontes lado a lado:

Pergunta Registro CVE (cve.org) NVD Aviso do fornecedor
Qual componente? Apache Log4j2, log4j-core 396 entradas de correspondência CPE no total Só log4j-core; o log4j-api sozinho não é afetado
Qual versão está corrigida? Não afetado a partir de 2.15.0 Espelha as faixas afetadas como correspondências CPE 2.15.0 para Java 8 ou superior, depois considerada incompleta; 2.16.0 recomendada
Quão grave? Métrica do CNA "critical", sem pontuação CVSS v3.1 10.0 CRITICAL, v2 9.3 Sem pontuação no texto que lemos
Explorada? Nenhum campo de exploração no JSON do CNA que lemos Entrada KEV incluída em 2021-12-10 Não consta no texto que lemos

Quem parasse na linha "não afetado a partir de 2.15.0" do registro escolheria a 2.15.0 como alvo. O aviso diz que a correção da 2.15.0 estava incompleta e aponta para a 2.16.0 em Java 8 ou superior. O registro mostrou as afirmações de versão do CNA no momento em que foram escritas. O aviso mostra o que o fornecedor manda instalar agora.

Erros comuns

Ler a pontuação CVSS como o seu risco. A pontuação assume acesso e impacto. Sua exposição depende de o componente estar acessível e de a configuração estar ativada. Use a pontuação para ordenar o trabalho e depois verifique a acessibilidade.

Parar na faixa de versões do registro. O aviso é a fonte da versão a instalar. Confira sempre.

Tratar "não listado" como "não afetado". Um produto fora da lista pode continuar afetado. A lista depende do trabalho do CNA e da análise do NVD, e os dois levam tempo.

Esperar um CVE para cada problema. Muitas correções de fornecedores saem sem ID. A ausência de CVE não prova segurança.

Misturar datas. Reserva, publicação, última atualização e última modificação são eventos diferentes, de fontes diferentes. Diga a fonte ao lado de cada data que citar.

Testar um CVE em sistemas que você não possui. O laboratório é somente leitura. Reproduzir uma falha em um alvo que você não controla exige permissão por escrito do dono. Use um laboratório que você montou, com a versão de software que está estudando.

Como ir além

Leia o aviso do fornecedor de cada produto que você usa e assine o feed de segurança dele. Em sistemas de produção, a página do fornecedor é o registro que o seu controle de mudanças deve citar.

Agrupe os tipos de CWE entre os CVEs que você acompanha, e consulte o catálogo KEV da CISA quando chegar uma lista longa de CVEs novos numa semana. O KEV é uma lista curta de falhas com exploração confirmada, o que o torna um filtro útil.

Na sequência desta série, O que é CVSS explica como o 10.0 deste registro é calculado e por que a pontuação base é apenas um dos dados de uma decisão de prioridade.

Fontes

Fontes

  1. CVE Program overview
  2. CVE Numbering Authorities
  3. CVE Record CVE-2021-44228
  4. NVD vulnerability API documentation
  5. NVD dashboard
  6. Apache Log4j security page

Mais em Inteligência de vulnerabilidades

Inteligência de vulnerabilidades

CVSS explicado: como ler e calcular uma vector string

O que significa uma nota CVSS como 9.8, como as vector strings da v4.0 e da v3.1 são montadas e como decodificar e recalcular uma na mão.

Iniciante12 min de leitura