Gap Hunter Labs

ghl-jail

Un sandbox de Windows de una sola línea para las herramientas de línea de comandos en las que no confías del todo. Ejecuta un comando con acceso a una única carpeta de proyecto — y a nada más tuyo. Sin permisos de administrador, sin controlador, sin instalación.

El problema

En abril de 2026 una versión maliciosa de la CLI de Bitwarden estuvo viva en npm unos noventa minutos. En ese lapso leyó claves SSH, archivos .env y credenciales de AWS, Azure y GCP de cada máquina que la instaló. En octubre, el repositorio de la CLI oficial de OVHcloud fue comprometido de la misma forma — una versión mala, detectada y bloqueada en 94 minutos, pero solo después de que un cliente lo notara.

Ninguno era un virus que pudieras haber detectado. El antivirus pregunta si un archivo es conocido como malo y deja pasar cualquier cosa nueva. Y cada CLI que ejecutas — un gestor de paquetes, un binario de release, un script que te mandó un compañero — corre como tú, con acceso de lectura total a ~/.ssh, tus archivos de credenciales de la nube, el perfil de tu navegador y cualquier token que tengas en tu entorno.

Por qué el aislamiento habitual pesa demasiado

Levantar una máquina virtual o un contenedor solo para probar una herramienta de usar y tirar cuesta minutos y gigabytes — y en Windows las opciones de aislamiento sólidas requieren Pro, Hyper-V o un administrador que quizá no tengas en una máquina de trabajo restringida. Así que, en la práctica, la mayoría no aísla nada. La herramienta simplemente se ejecuta.

Una cerca en una línea

ghl-jail ejecuta un solo comando para que solo pueda tocar la carpeta de proyecto que le indiques:

C:\work\mi-proyecto> python ghl_jail.py run --project . -- herramienta-sospechosa.exe

Dentro de esa carpeta la herramienta lee y escribe con libertad. En cuanto intenta salir — hacia ~/.ssh, un archivo de credenciales de la nube, un token de tu entorno — choca con un muro:

Access is denied.

Y por defecto no tiene red, así que incluso una herramienta que no encontró nada que leer no tiene adónde enviarlo.

Demo en terminal: crear un proyecto, agregar ghl-jail, escribir dentro del proyecto (permitido), leer un secreto fuera de él (Access is denied), sin red, ejecutar git y la limpieza.
Una corrida real: escribir dentro del proyecto, una lectura bloqueada de un secreto fuera de él, sin red, git y la limpieza.

Qué bloquea y qué permite

ghl-jail tiene dos modos. Container es el más estricto — tapiado del resto de la máquina salvo la carpeta de proyecto, sin red. Token es para herramientas que necesitan red o que no arrancan en el modo más estricto (git); sigue bloqueando tu perfil. Un modo auto elige container para todo y cambia a token en silencio solo para las pocas herramientas que lo necesitan, avisándote cuando lo hace.

Verificado por la batería de pruebas del proyecto.
La herramienta intenta…containertoken
leer / escribir tu carpeta de proyectopermitidopermitido
leer ~/.ssh, ~/.aws, .env, datos del navegador, el resto de tu perfilbloqueadobloqueado
escribir en cualquier sitio fuera del proyectobloqueadobloqueado
llegar a la redbloqueado (salvo que se pida)permitido
leer un token de API dejado en una variable de entornobloqueadobloqueado
ejecutar python, java, nodesísí
ejecutar gitno (peculiaridad de Windows)sí

Tres formas de usarlo

Probar una CLI no confiable o recién descargada

Ve una carpeta vacía y nada de red — una versión con puerta trasera como la de Bitwarden no encuentra credenciales en el disco ni salida alguna.

Mantener a un agente de IA dentro de un repo

Un agente de IA, o cualquier script autónomo, que edita código y ejecuta comandos lee y escribe solo ese repo, sin conexión salvo que lo permitas. El radio de daño de una corrida confundida o con inyección de prompt pasa a ser un repo al que puedes hacer git reset, no toda tu cuenta.

Ejecutar npm install / pip install sin ceder tus credenciales

Los scripts de instalación llegan al registro y escriben en el proyecto, pero un hook post-install malicioso — exactamente el patrón de Bitwarden — nunca ve tus claves SSH ni tus tokens reales.

Lo que no es

Es reducción de daño, no una bóveda. Sube mucho el costo de un error; no es una garantía contra un atacante que ataca activamente este sandbox en concreto, y no reemplaza la aplicación a nivel de kernel ni una máquina virtual real. Es la cerca que pones alrededor de una herramienta antes de confiar en ella — no una razón para ejecutar cosas que ya sabes que son maliciosas.

Cómo obtenerlo

Necesitas Python 3.8+ y Windows 10 u 11 (Home incluido). Sin permisos de administrador, sin instalación, sin servicio en segundo plano. Clona el repositorio y ejecútalo:

# clona y luego ejecuta cualquier comando dentro de la jaula git clone https://github.com/GapHunterLabs/ghl-jail C:\work\mi-proyecto> python ghl_jail.py run --project . -- npm install

Código abierto y gratis. Solo Windows. El README tiene el recorrido completo, los tres modos y los límites conocidos.