
Escáner de vulnerabilidades en tiempo de ejecución: detecta CVEs en los servicios que realmente se ejecutan en un host y los clasifica según su exposición a la red.
threat-finder encuentra el software vulnerable realmente en ejecución en un host — no lo que afirma un manifiesto — y te indica qué hallazgos son accesibles desde la red.
Resuelve cada servicio en ejecución (y, con --scope all, cada paquete del sistema operativo instalado) a un Package-URL exacto y lo compara con el catálogo de OffSeq Radar usando reglas de versionado nativas del ecosistema, de modo que las compilaciones con backport/corregidas no se marcan falsamente.
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.
brew install offseq/tap/threat-finder # Homebrew (macOS/Linux), prebuilt
cargo binstall threat-finder # prebuilt binary, no toolchain
cargo install threat-finder # from source
Los archivos precompilados para Linux/macOS (x86_64 + arm64) y Windows (x86_64) están en la página de lanzamientos. Se requiere Rust ≥ 1.87 para compilar desde el código fuente. Se admiten Linux, macOS, los BSD y Windows.
export OFFSEQ_API_KEY=... # from https://radar.offseq.com/console
threat-finder
Escanea los servicios en ejecución, imprime un resumen ordenado por riesgo y escribe el informe JSON completo en /tmp/threats.json. Añade --scope all para escanear también todos los paquetes del sistema operativo instalados.
threat-finder [OPTIONS]
| Flag | Descripción |
|---|---|
-o, --output <PATH> | Escribe el informe JSON en PATH (por defecto: pregunta, o /tmp/threats.json) |
--json | Imprime el informe JSON en stdout en lugar de un archivo |
--scope <SCOPE> | running (predeterminado) o all (+ cada paquete del sistema operativo instalado) |
--severity <LEVEL> | Solo informa de hallazgos en/por encima de critical|high|medium|low |
--strict | Descarta los hallazgos sin confirmación de coordenadas (solo informa de los confirmados) |
--fail-on <WHAT> | Sale con 5 si existen hallazgos coincidentes: any|critical|high|medium|low|kev|exposed |
--sarif <PATH> | También escribe un informe SARIF 2.1.0 (para interfaces de code-scanning) |
--include <GLOB> / --exclude <GLOB> | Filtra activos por nombre glob (repetible) |
-q, --quiet | Suprime el banner, el progreso y el resumen |
--no-color | Desactiva los colores ANSI |
-y, --yes | Asume los valores predeterminados, nunca pregunta (CI/cron) |
--reset | Vuelve a introducir la clave API, ignorando la guardada |
--register | Registra el host escaneado en Radar para monitorización continua (sin preguntar) |
--no-register | No registra ni pregunta sobre la monitorización en esta ejecución |
--host-name <NAME> | Nombre de host descriptivo para enviar con un registro |
--unregister | Elimina el inventario de este host de Radar y sale |
--windows-missing-updates | (Windows) También lista las actualizaciones de seguridad pendientes del Agente de Windows Update (escaneo en línea; ejecutar como administrador) |
-h, --help / -V, --version | Ayuda / versión |
# CI: solo hallazgos high+, JSON a stdout, sin preguntas
OFFSEQ_API_KEY=… threat-finder --yes --json --severity high > report.json
# Falla la compilación solo cuando un servicio expuesto a la red tiene un CVE con exploit conocido
OFFSEQ_API_KEY=… threat-finder --yes --quiet --fail-on exposed
Códigos de salida: 0 correcto · 1 error de búsqueda/IO · 2 sin clave API · 3 sistema operativo no compatible · 4 límite de tasa/cuota, o se requiere acceso a la API (actualización necesaria) · 5 umbral --fail-on alcanzado.
Clave API (obtén una en la Consola Radar), se resuelve en este orden:
OFFSEQ_API_KEY (lo mejor para CI/cron).$XDG_CONFIG_HOME/offseq-rust/config.toml (0600),
a menos que se indique --reset.Sin modo interactivo (--yes / sin TTY) y sin clave disponible se sale con 2.
Define OFFSEQ_CONFIG_DIR para anular la ubicación de la configuración (por defecto: el directorio de configuración por usuario del SO) — útil para contenedores/CI que necesitan una ruta determinista.
Coincidencia por coordenadas exactas. Cada activo se convierte en un purl que lleva su versión completa (epoch + revisión de la distribución) y un calificador ?distro=, p. ej.
pkg:deb/ubuntu/openssh-server@1:8.9p1-3ubuntu0.6?distro=jammy. El inventario se compara en llamadas por lotes POST /match/batch (una solicitud por fragmento del tamaño de un nivel) en el servidor, con reglas de versionado nativas del ecosistema (dpkg/rpm/apk/semver) — de modo que una compilación con backport y corregida como 1.18.0-6+deb11u3 no se marca correctamente, y no hay adivinanzas de versiones en el cliente. Los hallazgos se dividen según el indicador confirmed de la API: los hallazgos confirmados se notifican; las coincidencias de coordenadas cuya versión no puede confirmarse se muestran por separado como no confirmados / triaje (excluidos del recuento, de byCve y de --fail-on; elimínalos con --strict).
Correlación de exposición a la red. Los escáneres de manifiestos (Trivy, Grype, osv-scanner) leen listas de paquetes; los escáneres externos (Nessus, OpenVAS) necesitan un segundo host. Esta herramienta asigna el proceso de cada servicio en ejecución a los sockets en los que está escuchando (/proc/net en Linux, lsof en los otros Unix, Get-NetTCPConnection / netstat en Windows) y clasifica la alcanzabilidad: loopback / private / public. Un servicio vulnerable en 0.0.0.0 es un riesgo muy distinto de uno en 127.0.0.1: los hallazgos se ordenan con los expuestos primero y --fail-on exposed condiciona el CI exactamente a eso. No se envían paquetes. Los hallazgos también incluyen KEV de CISA y EPSS.
Priorización según exposición. Cada hallazgo recibe un riskScore (0–100) y una banda de decision estilo SSVC — act-now · soon · schedule · track — combinada a partir de la severidad, EPSS, KEV y la exposición a la red del activo propietario. El resumen encabeza cada línea con una insignia estilo [ACT-NOW 92] y ordena por ella, de modo que los pocos problemas públicos y con exploit conocido floten a la cima de un host ruidoso. La puntuación usa la misma fórmula localmente y en el servidor (la vista de monitorización de Radar añade un pequeño bonus cuando un hallazgo KEV ha superado su fecha límite — una fecha que la CLI no tiene), y aparece en --json y SARIF (properties).