Novedades
Lo que ya entregamos en Vigilantte, agrupado por fase del roadmap en vez de por fecha exacta.
Fase 1 — Fundamentos de plataforma
Rate limiting real en /api/ingest
Límite de envíos por IP, además del límite por sitio, para que nadie agote la cuota de telemetría de otra cuenta usando su token público.
Error tracking (Sentry)
Integramos Sentry en la app y en el worker para detectar errores reales, en vez de enterarnos por un reporte de un cliente.
Proxies salientes para escaneo (Webshare)
En planes pagos, el escaneo puede salir a través de proxies para no quedar bloqueado por el firewall del sitio que estás monitoreando.
Reporte PDF verificado con test de regresión
Cada cambio se valida generando un PDF de reporte real en cada corrida de CI, no solo compilando el código.
Tema claro e informe más ejecutivo
El reporte PDF ahora tiene un tema claro además del oscuro, con un resumen ejecutivo en lenguaje simple y un plan de acción priorizado al inicio.
Rate limiter distribuido (Redis) en vez de Map en memoria
El límite de requests ahora usa Redis con fallback en memoria, en vez de un contador que se perdía en cada reinicio del servidor.
Verificar dominio de envío en Resend
Verificamos el dominio de envío de emails, así las notificaciones de Vigilantte llegan de forma confiable.
Fase 2 — Conectores CMS y e-commerce
Plugin de WordPress
Hecho (2026-10-03, v1.1.0): wordpress-plugin/vigilantte-security/, descargable como .zip desde /api/downloads/wordpress-plugin (landing pública en /wordpress y tarjeta en la página de cada sitio WordPress).
Feed de vulnerabilidades por plugin/tema
Hecho (2026-10-03).
WPScan API para CVEs de plugins individuales
Activo desde 2026-10-03 (plan gratis: 25 consultas/día).
Plugin inventory vía WP REST API
Hecho: si el sitio expone /wp-json/wp/v2/plugins se listan los plugins instalados con su versión (worker/lib/cms.ts → fetchWpPluginInventory) para cruzarlos contra WPScan.
Escáner de formularios web
Analiza los formularios del HTML de la home y hasta 50 páginas del sitemap (worker/lib/forms.ts + worker/scanners/forms.ts).
Detección de CMS y análisis de vulnerabilidades
Detecta la plataforma (WordPress, WooCommerce, Shopify, Drupal, Joomla, Magento, PrestaShop, Wix, Squarespace, Webflow) solo por firmas técnicas —cabeceras, assets, meta generator—, nunca por la mención del nombre en …
Fase 4 — Servidores, apps y nube
Agente servidor multi-token y multi-sitio
Hecho 2026-10-02: SKUDO_SITE_TOKENS acepta varios tokens separados por coma; el agente recolecta una vez y reporta lo mismo a cada sitio del servidor.
Fase 5 — Correlación, SOC y compliance
Auto-verificación de hallazgos resueltos (RESOLVED → VERIFIED)
Si marcas un hallazgo como resuelto y no vuelve a aparecer en el siguiente escaneo, se confirma solo como verificado; si reaparece, se reabre automáticamente.
Diff de findings entre escaneos
Hecho: el detalle de cada escaneo compara contra el anterior (nuevos, resueltos, reabiertos) y, desde 2026-10-02, cada hallazgo muestra su historial en los últimos 10 escaneos (desde cuándo aparece y su estado en cada…
Alertas en tiempo real (Slack/Teams/webhooks)
Hecho: la organización configura un webhook entrante (Slack, Teams o Discord aceptan el mismo POST JSON) en Equipo, y el worker envía cada hallazgo CRITICAL nuevo con el mismo cooldown que el email (worker/lib/webhook…
Deduplicación y cooldown de alertas CRITICAL
Los avisos de hallazgos críticos se deduplican: te avisamos si es nuevo, o si sigue sin resolverse después de 7 días — antes se repetía en cada escaneo.
Fase 6 — Parches de seguridad de la plataforma
CSP permite unsafe-inline y unsafe-eval
Reforzamos la Content-Security-Policy con nonces en vez de permitir scripts inline sin restricciones.
Rate limiting en memoria se pierde al reiniciar
El límite de requests dejó de depender de un contador en memoria de un solo proceso, así resiste reinicios y funciona con varias instancias.
Token de verificación público cualquiera puede floodear /api/ingest
El token que viaja en el script instalable de tu sitio ahora está firmado, para que no cualquiera pueda mandar eventos falsos a tu cuenta.
Inyección HTML en emails vía nombre de organización
El nombre de tu organización se escapa antes de insertarse en los emails, para evitar que se inyecte HTML o JS en una invitación.
Dev server escucha en 0.0.0.0 exponiendo source maps
El servidor de desarrollo dejó de exponerse por default a toda la red local.
Contraseña temporal viaja en response HTTP plano
Las contraseñas temporales ya no viajan en la respuesta HTTP — se envían solo por email al dueño de la cuenta.
Falta CSRF protection en endpoints con sesión
Los endpoints que dependen de tu sesión ahora validan el origen del request para prevenir ataques CSRF.
User enumeration en endpoint de registro
El registro ya no revela si un email ya está en uso, para dificultar que alguien liste cuentas existentes.
Stripe webhook sin protección contra eventos duplicados
Los webhooks de Stripe ahora son idempotentes: un reintento del mismo evento no vuelve a disparar emails de facturación duplicados.
Sin límite de tamaño en request bodies
Los requests a la plataforma ahora tienen un límite de tamaño, para evitar abuso con payloads gigantes.
Sin logging de intentos de autenticación fallidos
Registramos los intentos de login fallidos (captcha, contraseña incorrecta, cuenta suspendida) para poder detectar ataques de fuerza bruta.
Sin 2FA / MFA
Hecho: TOTP (apps de autenticación) configurable desde Cuenta; si está activo, el login exige el código (src/lib/totp.ts, src/lib/auth.ts, /api/user/totp/*).
User-Agent personalizado en verificaciones de sitio
La verificación de dominio ahora usa un User-Agent genérico de navegador, en vez de uno identificable que un sitio podría usar para evadirla.
Chromium en producción 300-500MB RAM por PDF
Resuelto 2026-09-28: el PDF se genera en una cola (src/lib/report-pdf-queue.ts), un Chromium a la vez y solo con ≥800 MB de memoria libre; si no hay, espera y reintenta.
Deploy script con git reset --hard sin validación
El script de deploy ahora hace una verificación previa y muestra los cambios antes de aplicarlos, en vez de forzarlos sin revisión.
Fase 7 — Detección de malware e integridad de archivos
Escaneo profundo de scripts externos (frontend)
Hecho (2026-10-03).
Verificación SRI (Subresource Integrity)
Hecho (2026-10-03, worker/lib/sri.ts).
Inventario y legitimidad de tags de analytics/marketing
Hecho (2026-10-03).
Detección de defacement y phishing intra-página
Hecho (2026-10-03).
Análisis de integridad de assets estáticos (checksum remoto)
Hecho (2026-10-03, worker/lib/asset-integrity.ts + tabla site_asset_hashes).
Librerías JavaScript con vulnerabilidades conocidas
Hecho 2026-10-02: se detectan jQuery, jQuery UI/Migrate, Bootstrap, Lodash, Moment, AngularJS, Vue, Handlebars y DOMPurify con su versión (archivo, ?ver=, cdnjs/jsDelivr/unpkg) y se cruzan contra OSV.dev (base pública…
Verificación de checksums contra fuentes oficiales
Hecho (2026-10-03).
Monitoreo de cambios en DNS y WHOIS
Implementado: tabla SiteInfraBaseline (1 fila por sitio) guarda la última IP resuelta, nameservers, registrador y estado de DNSSEC.
Fuentes de reputación adicionales (URLhaus, AlienVault OTX, PhishTank)
Implementado en worker/lib/urlhaus.ts (sin API key, base comunitaria de URLs con malware activo), worker/lib/otx.ts (con OTX_API_KEY opcional, reportes de threat intel) y worker/lib/phishtank.ts (con PHISHTANK_API_KEY…
Sistema de falsos positivos (ignore rules)
Puedes marcar un hallazgo como falso positivo por sitio para que no vuelva a reportarse en los próximos escaneos.
Ignore rule desde el finding (1-click)
Desde el detalle de cualquier hallazgo puedes crear la regla de ignorado en un click, sin armarla a mano.
Expiración automática de ignore rules
Las reglas de ignorado pueden tener fecha de expiración, para que un falso positivo silenciado no quede olvidado para siempre.
Bulk ignore
Hecho: en el detalle de un escaneo se seleccionan varios hallazgos y se crean sus reglas de ignorado en una sola acción (POST /api/sites/[siteId]/ignore-rules/bulk), con motivo obligatorio.
¿Quieres ver también lo que estamos construyendo ahora? El roadmap completo, con lo que está en progreso y lo planeado, se gestiona internamente — esta página muestra solo lo ya entregado.