Voltar às atualizações
New releaseAug 27, 2026

threat-finder v0.3.0

Scanner de vulnerabilidades em tempo de execução: encontra CVEs nos serviços realmente em execução em um host e os classifica por exposição de rede.

Compartilhar

OffSeq Threat Finder

CI crates.io docs.rs license

O threat-finder localiza o software vulnerável realmente em execução em um host — não o que um manifesto afirma — e informa quais achados são alcançáveis pela rede. Ele resolve cada serviço em execução (e, com --scope all, cada pacote de SO instalado) para um Package-URL exato e o compara com o catálogo OffSeq Radar usando regras de versão nativas do ecossistema, para que builds com backport/corrigidas não sejam sinalizadas falsamente.

OffSeq Threat Finder

Vulnerability summary (highest risk first):

  openssh-server@1:8.9p1-3ubuntu0.6 — 1 finding(s)  [PUBLIC tcp 0.0.0.0:22]
      [ACT-NOW 92]  HIGH  CVE-2024-6387  [KEV]  regreSSHion: remote code execution in OpenSSH
                          → fix: 1:8.9p1-3ubuntu0.10   https://radar.offseq.com/threat/…
  [email protected] — 1 finding(s)
      [SCHEDULE 41] MED   CVE-2023-44487        HTTP/2 Rapid Reset

2 confirmed finding(s) across 2 asset(s); 1 exposed, 1 known-exploited.

Instalação

brew install offseq/tap/threat-finder   # Homebrew (macOS/Linux), prebuilt
cargo binstall threat-finder            # prebuilt binary, no toolchain
cargo install threat-finder             # from source

Arquivos pré-compilados para Linux/macOS (x86_64 + arm64) e Windows (x86_64) estão na página de releases. Requer Rust ≥ 1.87 para compilar a partir do código-fonte. Linux, macOS, os BSDs e Windows são todos suportados.

Início rápido

export OFFSEQ_API_KEY=...    # from https://radar.offseq.com/console
threat-finder

Escaneia os serviços em execução, exibe um resumo classificado por risco e grava o relatório JSON completo em /tmp/threats.json. Adicione --scope all para também escanear todos os pacotes de SO instalados.

Uso

threat-finder [OPTIONS]
FlagDescrição
-o, --output <PATH>Grava o relatório JSON em PATH (padrão: solicitação interativa, ou /tmp/threats.json)
--jsonExibe o relatório JSON na saída padrão em vez de um arquivo
--scope <SCOPE>running (padrão) ou all (+ todos os pacotes de SO instalados)
--severity <LEVEL>Relata apenas achados em/não abaixo de critical|high|medium|low
--strictDescarta achados sem confirmação de coordenada (relata apenas confirmados)
--fail-on <WHAT>Sai com código 5 se houver achados correspondentes: any|critical|high|medium|low|kev|exposed
--sarif <PATH>Também grava um relatório SARIF 2.1.0 (para UIs de code-scanning)
--include <GLOB> / --exclude <GLOB>Filtra ativos por glob de nome (repetível)
-q, --quietSuprime o banner, o progresso e o resumo
--no-colorDesativa cores ANSI
-y, --yesAssume padrões, nunca solicita (CI/cron)
--resetReinsere a chave de API, ignorando a salva
--registerRegistra o host escaneado no Radar para monitoramento contínuo (sem prompt)
--no-registerNão registra nem solicita monitoramento nesta execução
--host-name <NAME>Nome amigável de host a enviar com um registro
--unregisterRemove o inventário deste host do Radar e sai
--windows-missing-updates(Windows) Lista também atualizações de segurança pendentes do Windows Update Agent (scan online; executar elevado)
-h, --help / -V, --versionAjuda / versão
# CI: apenas achados de severidade high+, JSON na saída padrão, sem prompts
OFFSEQ_API_KEY=… threat-finder --yes --json --severity high > report.json

# Falha o build apenas quando um serviço exposto à rede tem uma CVE conhecida como explorada
OFFSEQ_API_KEY=… threat-finder --yes --quiet --fail-on exposed

Códigos de saída: 0 ok · 1 erro de consulta/IO · 2 sem chave de API · 3 SO não suportado · 4 limite de taxa/cota, ou acesso à API exigido (upgrade necessário) · 5 limiar de --fail-on atingido.

Chave de API (obtenha uma no Radar Console), resolvida nesta ordem:

  1. Variável de ambiente OFFSEQ_API_KEY (ideal para CI/cron).
  2. A chave salva em $XDG_CONFIG_HOME/offseq-rust/config.toml (0600), a menos que --reset seja fornecido.
  3. Um prompt interativo e oculto em um TTY — depois salvo para a próxima vez.

Sem chave disponível e sem modo interativo (--yes / sem TTY), sai com código 2.

Defina OFFSEQ_CONFIG_DIR para sobrescrever onde a configuração fica (padrão: o diretório de configuração por usuário do SO) — útil para contêineres/CI que precisam de um caminho determinístico.

Como funciona

Correspondência por coordenada exata. Cada ativo vira um purl carregando sua versão completa (epoch + revisão da distribuição) e um qualificador ?distro=, por exemplo, pkg:deb/ubuntu/openssh-server@1:8.9p1-3ubuntu0.6?distro=jammy. O inventário é comparado em chamadas POST /match/batch em lote (uma requisição por bloco do tamanho do tier) no lado do servidor, com regras de versão nativas do ecossistema (dpkg/rpm/apk/semver) — então um build com backport e corrigido como 1.18.0-6+deb11u3 não é sinalizado corretamente, e não há adivinhação de versão no cliente. Os achados são divididos pelo flag confirmed da API: achados confirmados são relatados; correspondências de coordenada cuja versão não pode ser confirmada são exibidas separadamente como não confirmados / triagem (excluídos da contagem, de byCve e de --fail-on; descarte-os com --strict).

Correlação de exposição à rede. Scanners de manifesto (Trivy, Grype, osv-scanner) leem listas de pacotes; scanners externos (Nessus, OpenVAS) precisam de um segundo host. Esta ferramenta mapeia o processo de cada serviço em execução para os sockets em que ele está escutando (/proc/net no Linux, lsof nos outros Unixes, Get-NetTCPConnection / netstat no Windows) e classifica a alcançabilidade — loopback / private / public. Um serviço vulnerável em 0.0.0.0 é um risco muito diferente de um em 127.0.0.1: os achados são classificados com os expostos primeiro e --fail-on exposed condiciona o CI exatamente a isso. Nenhum pacote é enviado. Os achados também carregam KEV da CISA e EPSS.

Priorização ciente de exposição. Cada achado recebe um riskScore (0–100) e uma faixa de decision no estilo SSVC — act-now · soon · schedule · track — fundidos a partir de severidade, EPSS, KEV e da exposição de rede do ativo proprietário. O resumo inicia cada linha com um badge no estilo [ACT-NOW 92] e ordena por ele, de modo que o punhado de problemas voltados ao público e conhecidos como explorados flutua para o topo de um host ruidoso. O score usa a mesma fórmula localmente e no servidor (a visão de monitoramento do Radar adiciona um pequeno bônus quando um achado KEV passou da data de vencimento — uma data que a CLI não tem), e aparece em --json e SARIF (properties).

Monitoramento contínuo

Um scan pontual é um retrato do momento. Registre um host uma vez e o Radar continua observando: quando uma CVE recém-publicada afeta uma de suas coordenadas, você recebe um alerta (email + Console), priorizado por exposição — sem necessidade de novo scan.

Após um scan interativo, a ferramenta pergunta:

Add these 42 services to Radar for continuous monitoring & alerts? [Y/n/never]

Categorias