Límites
Límites conocidos de Vantor. No reemplaza las prácticas de desarrollo seguro.
Ataques no cubiertos
| Ataque | Por qué | Qué hacer |
|---|---|---|
| Control de acceso roto (IDOR) | Cambiar /facturas/41 por /facturas/42 es una consulta válida | Verificá en cada ruta que el recurso sea del usuario |
| Errores de lógica de negocio | Las reglas de negocio de tu aplicación no forman parte de lo que Vantor revisa | Tests y revisión |
| XSS en el navegador | Las reglas no inspeccionan el HTML que devolvés. La CSP por defecto no restringe scripts | Usá la CSP con nonce, escapá la salida y usá un framework que escape por defecto |
| Autenticación débil, secretos filtrados | No forma parte de lo que intercepta | vantor check detecta algunos casos |
| Dependencias maliciosas | Las reglas revisan lo que vino del cliente. Pacto detecta operaciones que no figuran en la lista, pero un paquete que ya ejecuta código en tu proceso puede evitarlo | Auditá las dependencias y fijá versiones |
| Inyección de segundo orden | Un valor guardado y usado después no se identifica como valor del cliente | Parametrizá siempre |
| DDoS | El rate limit es por proceso y corre dentro de tu aplicación | Usá un CDN o WAF delante |
Valores transformados
Vantor identifica un valor en la operación si llega sin cambios, con otras mayúsculas o URL-decodificado. Si tu código lo transforma antes de usarlo (base64, reemplazos, concatenación de dos campos), puede no identificarlo.
Entornos no cubiertos
| Entorno | Estado |
|---|---|
| Aplicaciones solo de frontend (React con Vite, por ejemplo) | No aplica. Todo el código del navegador lo controla el usuario |
| Next.js Edge y middleware en Edge | No cubierto. No hay fs, http ni hooks |
| Vercel, Lambda y otros serverless | No verificado. El rate limit en memoria no sirve porque cada instancia cuenta por separado |
Servidores HTTP/2 nativos (node:http2) | No cubiertos. Funciona con un proxy delante que use HTTP/1.1 hacia la aplicación |
worker_threads | Lo que corre en un worker no queda cubierto |
| Bun y Deno | No probados |
Drivers
Se interceptan automáticamente pg, mysql2, better-sqlite3 y los filtros de supabase-js. Cualquier otro driver u ORM que no use uno de estos por debajo (Prisma con su motor propio, postgres.js, mongodb) no pasa por la regla sql. Usá guardSql() en las consultas construidas a mano.
Para MongoDB, la regla input rechaza los operadores en la entrada, pero las consultas en sí no se revisan.
Con supabase-js, Vantor solo revisa lo que sale por fetch hacia rutas /rest/v1/. No revisa el código SQL de las funciones que llamás con .rpc() ni de las Edge Functions.
Límites de detección
- Falsos positivos: posibles, sobre todo si un valor del cliente con sintaxis SQL coincide con el texto fijo de una consulta. Por eso se recomienda empezar en modo monitor.
fetchy DNS rebinding:fetchno permite intervenir en su resolución de DNS, así que se revisa justo antes de conectar y queda una ventana breve.httpyhttpsno tienen este límite.- Cabeceras de la propia aplicación:
Host,Origin,RefereryX-Forwarded-Hostno cuentan como elección del cliente para SSRF, porque las aplicaciones las usan para llamarse a sí mismas. Un SSRF a través deHostno se detecta. - Hosts de una sola palabra: para SSRF, un destino como
dbno se considera elegido por el cliente aunque el valor coincida, porque coincidiría con búsquedas comunes.localhostymetadatasí se detectan. - Multipart: se inspecciona el primer MB. Si tu parser deja los campos en
req.body, se revisan completos igual. vantor check: es una búsqueda por líneas. No sigue los datos entre funciones. Un resultado limpio no prueba que el código sea seguro.
Un atacante que ya ejecuta código
Vantor corre dentro del proceso de la aplicación. Un atacante que ejecuta código en ese proceso puede desactivarlo.
El control de licencias
El control de licencias se puede quitar modificando el paquete. Hacerlo viola la licencia. Este control no agrega seguridad a la aplicación. Se usa para registrar el uso y conectar el panel.
Errores internos
Ante un error interno, Vantor deja pasar la petición. La aplicación sigue funcionando, pero esa petición puede quedar sin revisar.
Sin licencia válida, la aplicación funciona sin protección, con una advertencia en stderr. Revisá los logs o el panel para confirmar que la protección está activa.