Um sistema eficaz de monitoramento de CVE não começa com feeds do NVD, mas com um filtro que prioriza vulnerabilidades pelo risco real para sua stack. Aqui explicamos como montar uma arquitetura com NVD JSON, OpenVAS e EPSS que reduza o ruído em 80% e entregue apenas o acionável — sem precisar de um SOC com 20 pessoas.

Por que os feeds crus do NVD são inúteis para equipes pequenas?

O feed JSON do NVD publica cerca de 2.500 novas CVE por mês (média de 2023, segundo dados do NIST). Uma equipe de 3 pessoas não consegue processar esse volume, mas também não pode ignorá-lo: 60% dos exploits bem-sucedidos em 2023 usaram vulnerabilidades com CVE atribuído (Relatório DBIR 2024). O problema não é a quantidade, mas a falta de contexto.

Os feeds crus fornecem:

O que falta é a resposta para: "Esta CVE afeta algo que usamos, e alguém já está explorando-a?". Sem isso, o feed se torna ruído branco. Na CyberShield, documentamos isso em múltiplas implementações: equipes que ativam alertas para cada nova CVE acabam desativando-as em um mês por fadiga.

Arquitetura mínima viável: 4 componentes que reduzem o ruído

Um pipeline eficaz precisa desses blocos, nesta ordem:

  1. Filtro por inventário: "Usamos este software?".
  2. Priorização por risco real: CVSS + EPSS + exploits públicos.
  3. Validação automática: "Esta vulnerabilidade é explorável em nossa configuração?".
  4. Alertas acionáveis: Apenas o que requer ação imediata.

Vejamos como implementar cada um com ferramentas open source e APIs públicas.

1. Filtro por inventário: mapear CPEs para sua stack real

O primeiro passo é reduzir o universo de CVE para apenas aquelas que afetam softwares em seu ambiente. Para isso, você precisa:

Exemplo prático: se você usa nginx 1.25.1 em produção, seu CPE é cpe:2.3:a:nginx:nginx:1.25.1:*:*:*:*:*:*:*. Quando o NVD publica uma CVE para nginx, o JSON inclui esse CPE no campo configurations.nodes.cpe_match.

Ferramentas para automatizar isso:

curl -s https://services.nvd.nist.gov/rest/json/cves/2.0 | \
jq '.vulnerabilities[] | select(.cve.configurations[].nodes[].cpeMatch[].criteria |
  contains("cpe:2.3:a:nginx:nginx"))'

Na CyberShield, usamos Dependency-Track para clientes com stacks complexas (ex.: Kubernetes + microsserviços) e scripts personalizados para PMEs com ambientes estáticos. A chave é que esse filtro reduza o volume de CVE em 90-95%.

2. Priorização: CVSS não é suficiente, use EPSS

O CVSS (Common Vulnerability Scoring System) mede a gravidade técnica, mas não a probabilidade de exploração. Uma CVE com CVSS 9.8 ("crítica") pode nunca ser explorada, enquanto uma com CVSS 7.5 ("alta") pode estar sendo explorada massivamente na wild.

Aqui entra o EPSS (Exploit Prediction Scoring System), um modelo da FIRST que prevê a probabilidade de uma CVE ser explorada nos próximos 30 dias. O EPSS varia de 0 a 1 (ex.: 0.8 = 80% de probabilidade).

Como combinar CVSS e EPSS:

Exemplo real: Em março de 2024, o NVD publicou CVE-2024-21887 (Ivanti Connect Secure RCE) com CVSS 9.1. O EPSS atribuiu 0.97 (97% de probabilidade de exploração). Na CyberShield, esse tipo de CVE vai para o topo da fila de alertas, mesmo que o cliente não use Ivanti, pois é um indicador de que os atacantes estão focados nesse vetor.

Onde obter o EPSS:

3. Validação automática: esta CVE é explorável em seu ambiente?

Uma CVE pode afetar um software que você usa, mas se estiver desabilitado ou corrigido, não representa um risco imediato. Aqui entram os scanners de vulnerabilidades:

Exemplo de workflow:

  1. Você recebe um alerta da CVE-2024-1234 (CVSS 8.8, EPSS 0.75).
  2. Seu script filtra pelo inventário e confirma que afeta postgresql 12.5 (que você usa).
  3. Inicia uma varredura com OpenVAS ou Nuclei para validar se a porta 5432 está exposta e se a versão é vulnerável.
  4. Se a varredura confirmar a vulnerabilidade, o alerta passa a ser "acionável". Se não, é arquivado.

Configuração mínima do OpenVAS para isso:

openvas-start
omp -u admin -w password -h localhost -p 9390 --xml="<create_task>
  <name>CVE-2024-1234 Validation</name>
  <target><hosts>192.168.1.100</hosts></target>
  <config id='daba56c8-73ec-11df-a475-002264764cea'/> <!-- Full and fast -->
</create_task>"

Na CyberShield, integramos o OpenVAS com nosso agente endpoint para validar CVEs em tempo real. Se a varredura confirmar a vulnerabilidade, o agente gera um alerta em nosso painel com contexto: "CVE-2024-1234 em postgresql 12.5 (servidor DB-01). Explorável: Sim. EPSS: 0.75. Recomendação: Atualizar para 12.15".

4. Alertas acionáveis: menos é mais

O erro mais comum no monitoramento de CVE é saturar a equipe com alertas. Um pipeline eficaz deve entregar apenas o que requer ação imediata. Em nossa experiência, isso significa:

Ferramentas para implementar isso:

import requests

def send_slack_alert(cve_id, epss, affected_host, recommendation):
    webhook_url = "https://hooks.slack.com/services/..."
    message = {
        "text": f":rotating_light: *ALERTA CVE CRÍTICA* :rotating_light:",
        "attachments": [{
            "color": "#ff0000",
            "fields": [
                {"title": "CVE", "value": cve_id, "short": True},
                {"title": "EPSS", "value": epss, "short": True},
                {"title": "Host afetado", "value": affected_host, "short": True},
                {"title": "Recomendação", "value": recommendation, "short": False}
            ]
        }]
    }
    requests.post(webhook_url, json=message)

Caso real: pipeline de alertas para uma PME da América Latina

Implementamos esse sistema para uma fintech no México com 15 servidores e 50 endpoints. Sua stack:

Resultados após 3 meses:

Exemplo de alerta real que gerou ação:

CVE-2023-4863 (Heap buffer overflow em libwebp).
CVSS: 8.8.
EPSS: 0.92 (92% de probabilidade de exploração).
Afeta: Node.js 18 (usado no microsserviço de autenticação).
Explorável: Sim (OpenVAS confirmou que a porta 3000 está exposta).
Recomendação: Atualizar para Node.js 18.18.2 ou aplicar correção temporária.
Ação tomada: Correção aplicada em 4 horas.

Sem esse pipeline, o alerta teria se perdido no ruído de 7.200 CVEs mensais. Com ele, a equipe agiu antes que a vulnerabilidade fosse explorada na wild (o que ocorreu 5 dias depois, segundo relatórios da CISA).

Erros comuns e como evitá-los

Durante a implementação desse sistema em vários clientes, identificamos padrões que levam ao fracasso:

  1. Inventário desatualizado:
    • Problema: Se seu inventário não refletir mudanças recentes (ex.: um novo microsserviço em Go), o filtro por CPE falhará.
    • Solução: Automatize a atualização do inventário com ferramentas como:
      • Ansible: Para servidores (ansible-inventory --list).
      • Kubernetes: kubectl get pods --all-namespaces -o json.
      • Endpoints: Agentes como osquery ou nossa stack na CyberShield, que reportam softwares instalados em tempo real.
  2. Confiar demais no CVSS:
    • Problema: Uma CVE com CVSS 10.0, mas EPSS 0.01 (1% de probabilidade de exploração), não é prioridade.
    • Solução: Use o EPSS como filtro principal após o CVSS. Na CyberShield, descartamos CVEs com EPSS < 0.05, mesmo que seu CVSS seja 9.0+.
  3. Não validar com scanners:
    • Problema: Presumir que uma CVE é explorável apenas porque afeta seu software leva a falsos positivos.
    • Solução: Sempre valide com OpenVAS/Nuclei antes de alertar. Exemplo: CVE-2023-3824 (PHP RCE) afeta PHP 8.0-8.2, mas apenas se phar.readonly = Off. Uma varredura com Nuclei pode confirmar se essa configuração está ativa.
  4. Alertas sem contexto:
    • Problema: Enviar apenas "CVE-2024-1234 detectada" gera mais perguntas do que respostas.
    • Solução: Inclua no alerta:
      • CVSS e EPSS.
      • Host/serviço afetado.
      • É explorável? (resultado da varredura).
      • Correção ou mitigação disponível.
      • Link para a CVE no NVD.

Na CyberShield, refinamos esse pipeline ao longo de 3 anos de implementações em PMEs da América Latina. A lição mais importante: o monitoramento de CVE não é um problema técnico, mas de priorização. Uma equipe pequena não consegue processar milhares de alertas, mas pode se concentrar nas 3-5 que realmente importam a cada semana.

A arquitetura descrita aqui reduz o ruído em 99% e entrega apenas o acionável. Não requer um SOC dedicado nem ferramentas caras: com NVD JSON, OpenVAS, EPSS e um pouco de scripting, qualquer equipe pode implementá-lo em uma semana. O que exige, sim, é disciplina para manter o inventário atualizado e resistir à tentação de alertar sobre cada nova CVE.

O monitoramento de CVE em tempo real não se trata de saber tudo o que acontece, mas de saber o que importa. Em um ambiente onde 80% dos ataques usam vulnerabilidades conhecidas (Relatório DBIR 2024), ignorar esse sistema é como navegar um barco de olhos fechados. Mas com a abordagem correta, você pode navegar com um mapa claro: apenas as ameaças que realmente o afetam, na ordem em que deve agir.

Na CyberShield, continuamos ajustando esse pipeline para nossos clientes, integrando novas fontes como KEV da CISA e feeds de exploits em tempo real. O objetivo não é eliminar o risco — isso é impossível —, mas reduzir a janela de exposição ao mínimo possível. Para uma PME, isso pode ser a diferença entre um incidente gerenciável e uma violação que coloque o negócio em risco.

Fontes

  1. NIST National Vulnerability Database (NVD). (2024). NVD JSON Feeds Documentation. https://nvd.nist.gov/vuln/data-feeds
  2. FIRST. (2024). Exploit Prediction Scoring System (EPSS). https://www.first.org/epss/
  3. Greenbone Networks. (2024). OpenVAS Documentation. https://www.openvas.org/
  4. ProjectDiscovery. (2024). Nuclei Documentation. https://nuclei.projectdiscovery.io/
  5. Verizon. (2024). Data Breach Investigations Report (DBIR). https://www.verizon.com/business/resources/reports/dbir/
  6. CISA. (2024). Known Exploited Vulnerabilities Catalog. https://www.cisa.gov/known-exploited-vulnerabilities-catalog
  7. NIST. (2023). NVD Statistics 2023. https://nvd.nist.gov/general/statistics
  8. OWASP. (2023). Dependency-Track Documentation. https://dependencytrack.org/
  9. FIRST. (2024). CVSS v3.1 Specification Document. https://www.first.org/cvss/specification-document
  10. CVE-2024-21887. (2024). NVD Entry. https://nvd.nist.gov/vuln/detail/CVE-2024-21887