VOLVER A NOTICIAS
defensa #scanner #manual #vulnerabilidades #opsec #owasp

Escáner de Vulns: manual del operador y catálogo de detección

Qué busca el escáner de qbit404, cómo darle un objetivo, qué hace cada check realmente, y cómo se prioriza la salida. Léelo antes de ejecutarlo sobre cualquier cosa que no sea tuya.

por · · 5 min de lectura

Qué es esta herramienta

qbit404/scanner es un escáner no intrusivo dirigido por fingerprints y firmas. No explota. Sondea con peticiones seguras y bien conocidas y empareja respuestas contra un catálogo interno de firmas conocidas-vulnerables (etiquetadas con CVE), malas configuraciones, y perfiles malos conocidos de cabeceras / cookies / TLS. Los matchers son puro patrón + aritmética de versión; nada de lo que el escáner envía es destructivo ni amplificador de tasa.

Está pensado para sistemas que posees o tienes autorización escrita para probar. Apuntarlo a terceros es delito en la mayoría de jurisdicciones.

Qué cubre

El catálogo trae 7 módulos. Los módulos se activan/desactivan por escaneo.

1. Higiene TLS

  • Validez de cadena de certificados, expiración < 30 días
  • Auto-firmado en producción
  • Algoritmo de firma débil en cert (MD5, SHA-1, RSA < 2048)
  • Enumeración de cipher suites; marca: NULL, EXPORT, RC4, 3DES, modo CBC en TLS 1.0/1.1
  • Versiones de protocolo: cualquier TLS 1.0 / 1.1 / SSL 3.0 / SSL 2.0 aceptado
  • HSTS ausente / max-age muy bajo / sin includeSubDomains
  • Ausencia de OCSP stapling
  • Heartbleed (CVE-2014-0160) — envía un heartbeat benigno con longitud normal, comprueba longitud de respuesta
  • ROBOT (CVE-2017-13099) — fingerprint, sin explotación
  • Preparación PQ: sondea por anuncio KEX híbrido (X25519MLKEM768); marca ausencia en endpoints de cara a internet

2. Cabeceras HTTP y cookies

  • Faltan: Content-Security-Policy, X-Content-Type-Options, X-Frame-Options / frame-ancestors, Referrer-Policy, Permissions-Policy
  • CORS: Access-Control-Allow-Origin: * con credenciales
  • Cookies sin Secure, HttpOnly, SameSite
  • Disclosure de Server / X-Powered-By / X-AspNet-Version
  • Cache-Control en endpoints autenticados

3. Fingerprints de frameworks / CMS conocidos

El escáner pasea por una lista de rutas trilladas (/wp-login.php, /administrator/, /.git/config, /server-status, /actuator/env, /api/v1/swagger.json, /.env, ...) y empareja firmas de cuerpo / cabecera contra el feed CVE:

  • WordPress < 6.4.x — /wp-json/wp/v2/users expuesto (enumeración estilo CVE-2017-5487)
  • Drupal < 7.58 — fingerprint Drupalgeddon2 (CVE-2018-7600)
  • Joomla < 3.4.6 — fingerprint cadena RCE
  • Apache HTTP < 2.4.49/2.4.50 — Path traversal (CVE-2021-41773 / 42013)
  • nginx < 1.20.0 — heap overflow del resolver DNS (CVE-2021-23017)
  • Tomcat < 9.0.71 — ghostcat (CVE-2020-1938)
  • Spring Boot Actuator /env, /heapdump, /jolokia expuestos
  • Jenkins script console, lectura anónima
  • Confluence (CVE-2022-26134, CVE-2023-22515) fingerprints
  • Atlassian Jira /rest/api/2/user/picker?query=
  • GitLab enumeración de usuarios sin auth
  • Log4Shell (CVE-2021-44228) — fingerprint JNDI en cabeceras HTTP vía callback canary (solo si proporcionas tu propio host canary)

4. Superficie API / OpenAPI

  • Spec en /openapi.json / /swagger.json / /v2/api-docs — enumera endpoints, marca cualquiera que devuelva 200 a anónimo
  • Fingerprints BOLA / IDOR: parámetros id en path cuyas respuestas cambian pero el alcance de auth no
  • Páginas de error verbosas que filtran stack traces
  • Introspección GraphQL activa en producción

5. Autenticación y sesión

  • Formularios de login que postean por HTTP
  • La respuesta de login filtra enumeración de usuarios (error distinto para "no existe ese usuario" vs "contraseña incorrecta")
  • JWT alg: none aceptado
  • JWT firmado con secreto HS256 débil (diccionario offline contra un token capturado)
  • OAuth: redirect URIs abiertos, PKCE ausente en clientes públicos
  • Fijación de sesión: el servidor acepta cookie de sesión pre-establecida

6. Cloud / metadata

  • S3 buckets abiertos vía convenciones de nombrado conocidas
  • Containers de Azure blob públicos
  • Listado de buckets GCS sin auth
  • Kubernetes /api/v1/namespaces anónimo
  • Endpoint de metadata cloud alcanzable a través de sondas SSRF (solo con opt-in explícito del objetivo)
  • Registry docker público /v2/_catalog

7. Auditoría de preparación cuántica

  • Endpoint TLS anuncia o no KEX híbrido PQ
  • El campo alg del JWT incluye solo EdDSA / RSA-PSS — marca para migración híbrida
  • Algoritmo de firma del certificado — marca solo-clásicos para activos con validez > 5a
  • Frescura de la cadena de cert de firma de código
  • Fingerprint Server: revelado mapeado contra el tracker PQ-ready de qbit404

Qué no hace

  • No explota. El check de Log4Shell requiere que proporciones un host canary para que el escáner confirme un callback; nunca carga un payload por JNDI.
  • No hace brute-force a formularios de login en vivo más allá del diccionario offline de JWT.
  • No hace DoS, amplificación de tráfico ni tormentas de sesión.
  • No pivota. Cada objetivo se escanea de forma aislada.

Cómo usarlo

El frontend en /tools/scanner te guía por:

  1. Check de autorización: confirma que tienes permiso para escanear el objetivo.
  2. Entrada de objetivo: https://example.com o un rango IP que poseas.
  3. Selección de módulos: TLS, cabeceras, CMS, API, auth, cloud, PQ — toggle.
  4. Intensidad: ligera (10 req), normal (50 req), exhaustiva (250 req). Por defecto normal.
  5. Ejecutar.

El resultado es un informe priorizado:

  • Crítico: RCE / bypass de auth conocido con exploit público. Suelta todo.
  • Alto: versión vulnerable + exploit público + config estándar. Parchea esta semana.
  • Medio: misconfig con vector de ataque creíble. Planifica.
  • Bajo: higiene. Mete en el próximo pase de hardening trimestral.
  • Info: sin hallazgo, solo señal.

Cada hallazgo incluye: id CVE / CWE, regla origen, evidencia cruda (snippet de request/response), y un párrafo de remediación con el objetivo de upgrade o el flag de config.

Formatos de salida

  • Informe HTML (por defecto): priorizado inline, listo para adjuntar a un ticket
  • SARIF 2.1.0: tab de code-scanning en GitHub / GitLab
  • JSON: pipe a tu SIEM
  • CycloneDX VEX: para tracking alineado con SBOM

Frecuencia

Un escaneo es una foto. Para servicios con despliegues frecuentes, agéndalo en CI post-deploy y en un cron semanal. El coste de un escaneo contra tu propia infra es despreciable; el coste de no saber, no.

Falsos positivos

  • La detección por versión a veces falla detrás de proxies inversos que limpian la cabecera Server. El escáner cae a fingerprints de comportamiento, que son más ruidosos.
  • Los WAFs (Cloudflare, AWS WAF) atrapan y devuelven 403 a algunas sondas — marcado como WAF_BLOCKED. Re-ejecuta autenticado para saltarte el WAF y evaluar el origen.
  • Los módulos TLS pueden malinterpretar endpoints que presentan distintas cipher suites por SNI.

Si te encuentras uno, abre un issue con el par request/response; el catálogo se actualiza semanalmente.

Es tuyo cuando lo apuntas a tus cosas. No es tuyo cuando lo apuntas a las cosas de otros. El escáner se niega a correr contra dominios en su deny-list incorporado (navegadores, gobierno, bancos) sin un flag explícito --tengo-autorizacion-escrita, e incluso entonces escribe una entrada de audit-log en tu máquina local.

El escaneo de vulnerabilidades es higiene, no un sustituto del diseño. El catálogo solo encuentra lo ya visto. Usa el cazador 0-day para el resto.

// related ops

OPS RELACIONADAS