Saltar a contenido

Witnesses

Algunos efectos ocurren en la red. El runner levanta servidores witness para un contract ([[server]]) y el assert lee lo que recibieron.

  • Un witness puede registrar el encabezado de cada request, las rutas pedidas (normalizadas como las enrutaría un servidor) o el request completo con su cuerpo, y responder con lo que recibió, así el agente ve lo que llegó al upstream.
  • bind = "{host_ip}" pone un witness en la dirección propia del host, una a la que un proceso con sandbox no debe llegar.
  • [[host_alias]] resuelve un nombre a una dirección para un caso, en /etc/hosts.

Witnesses TLS

Un witness con tls = true y un name habla TLS para ese host, con un certificado firmado por una CA que el runner crea para el run. Varios comparten una dirección y cada conexión la atiende el que pide su server name. El launcher confía en esa CA, como confiaría en una CA local del sitio.

El witness host

El egress proxy de un sandbox puede rechazar nombres que resuelven al host del propio sandbox o a direcciones internas. Esa defensa decidiría un contract de credentials antes que la policy que prueba. Por eso esos contracts llegan a su witness a través de un segundo contenedor en una red del lab en TEST-NET-2 (198.51.100.0/24), un rango de direcciones que ninguna de esas protecciones trata como interno, y que reenvía al runner. Declaran requires = ["witness-host"] y quedan not-applicable en un host que no lo tiene (Quickstart).

El broker de referencia

Sin sandbox no hay broker de credenciales, así que el baseline de un contract [broker] corre contra uno de referencia escrito de la forma obvia: sin revisión del token, con todos los headers del agente reenviados, el prefijo comparado como texto y las redirecciones seguidas. Es el mismo para todos los sandboxes. Un attack que no logra pasarlo es vacuous.