Pacto, Carnadas y Fugas

Pacto

Pacto es una lista, por ruta, de las consultas, los hosts, las carpetas y los programas permitidos. Se genera a partir de tus tests y se guarda en vantor.pact.json. En modo bloqueo, rechaza las operaciones que no figuran en la lista.

1. Generar el archivo

En vantor.config.json:

{ "mode": "monitor", "pact": "learn" }

Corré tus tests o usá la aplicación en un entorno de prueba. Vantor escribe vantor.pact.json:

{
  "version": 1,
  "routes": {
    "POST /api/facturas": {
      "net": ["api.mercadopago.com"],
      "sql": ["insert into facturas ( monto ) values ( ? )"]
    }
  },
  "background": { "net": ["api.resend.com"] }
}

El archivo guarda la forma de cada consulta, sin valores. background lista los hosts que se llaman fuera de una petición, como en un cron.

Usá learn solo con tests o tráfico de confianza. En producción, un atacante podría agregar sus operaciones a la lista.

2. Revisar

Subí el archivo a git para revisar los cambios en cada PR. npx vantor pact muestra un resumen.

3. Aplicar

{ "mode": "block", "pact": "monitor" }

Empezá con monitor para ver qué operaciones faltan, y después pasá a "pact": "block". Lo que no figura en el archivo se reporta con la regla pact o, en bloqueo, falla con VANTOR_BLOCKED.

Una ruta que no figura en el archivo se compara con las operaciones de todas las demás rutas. Solo genera un evento si usa una operación que no figura en ninguna.

Límites de Pacto

Carnadas

Rutas y valores señuelo.

Rutas señuelo

Están activas por defecto. Las peticiones a /.env, /.git/config, /wp-login.php, /phpmyadmin y rutas similares generan un evento de la regla decoy. En modo bloqueo responden 404.

{
  "decoy": {
    "paths": ["/admin-viejo"],
    "banMinutes": 30
  }
}

banMinutes rechaza al cliente durante ese tiempo. Por defecto no se aplica. Usalo solo con trustProxy configurado. De lo contrario, un escáner puede bloquear a todos los usuarios detrás del mismo proxy.

Valores señuelo

Generá un valor único y guardalo como dato falso en tu base:

npx vantor decoy
# vantor-decoy-9f2c41ab07e3d165c2a8e04f
{ "decoy": { "values": ["vantor-decoy-9f2c41ab07e3d165c2a8e04f"] } }

Si el valor aparece en una respuesta o una petición, se genera un evento. En modo bloqueo, la respuesta no se envía. Verificá que ningún listado legítimo lo incluya.

Fugas

La regla leak revisa cada respuesta de texto antes de enviarla. Si contiene un campo como "password_hash", "hashed_password", "encrypted_password", "totp_secret", o una clave privada, se reporta y, en modo bloqueo, se responde 500.

Para agregar marcadores propios:

{ "leak": { "markers": ["\"cuil_completo\""] } }

Límites de Fugas