Carlos Tapia
← Todas las notas

Tres de cada cuatro escapes de sandbox que medí no rompen ninguna regla configurada

· 3 min de lectura

el sandboxagentework/.git/hooks/pre-commitescribeesto se ve normaltú, más tarde:git commitel hook corre afueraahí está la fuga

Mantengo un sandbox, tartaros (mío), así que estos tests no los escribí yo. Tomé los 168 contratos que tenía el laboratorio el 15 de octubre de 2026, todos de las suites públicas de sandbox-runtime, nono, Codex y bubblewrap, y corrí los tres primeros contra ellos.

Cada contrato tiene un ataque, un control con trabajo legítimo que tiene que seguir funcionando y un efecto que se revisa después en disco. Un ataque solo cuenta si funciona sin sandbox.

Resultadosandbox-runtimenonoCodex
Contenido993174
Escapó223324
Control roto4627
No lo puede expresar187818
No prueba nada878
No aplica en Linux / falta en el runner131313

TABLA 1 · Linux 6.8, 2026-10-15. Hay resultados retenidos mientras sigue abierto un proceso de divulgación coordinada; se publicarán cuando el proveedor lo autorice. «No lo puede expresar» es una función que el sandbox no tiene.

También mandé reportes a los programas de seguridad de los vendors: 4 a sandbox-runtime (uno sigue abierto) y 2 a Codex (uno sigue abierto). Un reporte abierto queda fuera de los resultados publicados hasta que se corrige.

Casi todos los escapes son valores por defecto

De los 79 escapes, 61 prueban algo que ninguna regla configurada pedía, como proteger .git/hooks dentro de la carpeta donde el agente puede escribir. Es el sandbox tal como viene. 13 son fallas confirmadas de una regla configurada.

De dónde salen los escapes

Escapes por sandbox, según si alguna regla configurada pedía esa protección.

Sobre un valor por defecto Sobre una regla configurada
0 10 20 30 sandbox-runtime — Sobre un valor por defecto 14 · Sobre una regla configurada 8 · total 22 sandbox-runtime 14 22 nono — Sobre un valor por defecto 27 · Sobre una regla configurada 6 · total 33 nono 27 33 Codex — Sobre un valor por defecto 20 · Sobre una regla configurada 4 · total 24 Codex 20 24

FIG. 1 · 61 de los 79 escapes caen del lado del valor por defecto: el contrato prueba algo que ningún campo de la política pide. El tramo de regla configurada suma los escapes con nota de revisión (5) y los confirmados (13). Una corrida, Linux 6.8, 2026-10-15.

Tipo de escapesandbox-runtimenonoCodexTotal
trust-handoff7171337
isolation77519
filesystem1539
secrets2013
network5005
lifecycle0325
ipc0101
Total22332479

TABLA 2 · Los 79 escapes por categoría del laboratorio.

En un escape de trust-handoff el agente escribe un hook de git o una configuración del editor dentro de su carpeta, y tu próximo git commit o tu editor lo ejecuta fuera del sandbox. Nueve contratos escapan en los tres sandboxes; cinco son de trust-handoff.

Un «bloqueado» no basta

Mirando solo si el ataque falló, los tres sumarían 111, 44 y 109 «bloqueados». En Codex, 27 de los 35 de diferencia son controles rotos: el ataque falló y el trabajo legítimo también.

nono en su propio modelo

Los contratos asumen que todo se puede leer salvo lo que se niega. nono funciona al contrario: concedes el workspace y lo demás no existe, así que 62 de sus 78 «no lo puede expresar» no dicen nada de nono. En una segunda corrida reescribí 22 de esos ataques en su modelo sin cambiar lo que prueban. El resto no tiene equivalente.

Las 22 variantessandbox-runtimenonoCodex
Contenido211718
Escapó040
Control roto003
No prueba nada111

TABLA 3 · Segunda corrida, mismo host. Los 4 escapes de nono: sockets unix que el kernel no media y permisos que se resuelven a través de symlinks.

Después de esta corrida

landrun se sumó el mismo día: 17 de sus 38 escapes son de trust-handoff. tartaros (mío) se midió el 22 de octubre de 2026 contra 188 contratos: 150 contenidos, 3 escapes. Desde el 26 de octubre el corpus tiene 196 contratos. Los contratos, el runner y los resultados actuales están en el laboratorio.

Cómo se midió. 168 contratos (el corpus del laboratorio al 2026-10-15) contra sandbox-runtime 0.0.79, nono 0.80.0 y Codex CLI 0.162.1 en Linux 6.8. Cada ataque se corre primero sin sandbox; cada resultado no contenido se revisó a mano. Los resultados retenidos por divulgación coordinada no se cuentan.

Relacionadas