Desarrollo IASeguridad

GitSpawn: Cómo un Archivo de Config de Git Ejecuta Código en Tu Agente de IA

14 de octubre de 2026
10 min de lectura
Candado sobre el teclado de una laptop junto a una carpeta de archivos de código
Compartir:

El 1 de septiembre de 2026 Manifold Security publicó GitSpawn: el propio .git/config de un repositorio puede nombrar un programa mediante core.fsmonitor, y varios agentes de programación con IA lo disparan cuando ejecutan un git status en segundo plano para juntar contexto. Según Manifold, el comando corre con tus privilegios, fuera del sandbox del agente y, en algunas herramientas, antes de cualquier aviso de confianza o de login.

Seis semanas después el panorama es desparejo: Codex, Goose y Hermes tienen correcciones que podés verificar en registros públicos, Qwen Code integró una el 12 de septiembre, y para Claude Code, Cursor y Grok Build el rastro público es escaso. Acá va qué está confirmado, qué no, y la semana de trabajo que correría.

1. Contexto: Qué Encontró Manifold y Qué Está Confirmado por Otras Fuentes

Manifold documentó ocho hallazgos en siete agentes. El hilo común no es un modelo ni un prompt: es Git. core.fsmonitor es un ajuste documentado cuyo valor es la ruta de un comando hook que Git ejecuta para saber qué archivos cambiaron, y Git lo lee del .git/config del propio repositorio. Cualquier comando que refresque el índice, como git status o git diff, puede entonces ejecutar lo que ese valor nombre. Los agentes corren esos comandos solos para armar contexto, muchas veces antes de que escribas un prompt. Manifold dice que la carga se dispara antes del aviso de confianza del workspace en Claude Code, antes de autenticarte en Qwen Code y en la primera tecla en Grok Build. Para Goose, el advisory confirma que el comando corre antes de cualquier llamada al modelo, aviso o aprobación de herramienta.

Línea de tiempo con registros públicos (2026)

14 mayOpenAI integra openai/codex#22652, ‘ignore fsmonitor config in Git metadata reads’, meses antes de la divulgación pública.
29 junSale Claude Code 2.1.196 (2.1.193 fue el 25 jun). Según Manifold trae la corrección de core.fsmonitor; el changelog público no la menciona.
24 julGoose 1.44.0 (23 jul) y advisory GHSA-r5pp-p5r8-466r (24 jul). El CVE-2026-72718 se publica el 10 ago.
1 sepManifold publica GitSpawn. OpenAI publica el CVE-2026-19592 el mismo día.
2 sepHermes integra su corrección (PR #101483). VulnCheck publica el CVE-2026-71963 el 3 sep; el tag v0.21.1 (7 sep) contiene el commit.
12 sepQwen Code integra el PR #11669 en main. No pude atarlo a un release etiquetado.
8 octHermes v0.21.6 cierra otra clase: programas de filtros definidos en la config de un repositorio no confiable.

Git se comporta como está documentado, y acá no hay receta

La config local de un repositorio es configuración de confianza por diseño; la falla es que los agentes invocan git sobre una carpeta que no crearon sin neutralizarla. No reproduje esto y deliberadamente no publico un payload: todo lo que sigue sale de advisories, commits y changelogs públicos enlazados al final.

La condición de entrega define tu exposición real. El .git/config de un repositorio origen no viaja con git clone, fetch ni pull, algo que afirman tanto el registro CVE de Codex como el pull request de Hermes. Viaja cuando viaja el directorio .git: un proyecto en zip, una unidad compartida o sincronizada, un pendrive, una entrega de un contratista, una prueba técnica. Es la carpeta que alguien te pasó, no el repo que clonaste.

2. Cuatro Implicaciones para Devs que Usan Agentes de Código

Son las cuatro consecuencias que cambian cómo abriría un proyecto hoy, ordenadas por la frecuencia con que van a importar en una semana normal.

🚦

Los avisos de aprobación no son la primera barrera

Orden de operaciones · Advisory de Goose, Manifold

La recolección de contexto en segundo plano puede correr antes de que apruebes nada. El advisory de Goose es explícito: el comando corre antes de cualquier llamada al modelo, aviso o aprobación de herramienta; Manifold reporta el mismo orden en Claude Code, Qwen Code y Grok Build. Un diálogo que todavía no viste no puede protegerte.

📦

Tu canal de entrada es la superficie de ataque

Archivos y entregas · No git clone

Freelancers, agencias, rescates de proyecto, pruebas técnicas y repros de bugs llegan como carpetas. Si el directorio .git vino con ellas, su config pasa a ser tuya para confiar. Cloná desde el remoto que sí es de confianza en vez de abrir la copia recibida.

🧱

Los sandboxes de la herramienta no lo cubren

Fuera del sandbox · Advisory de Goose

El proceso git corre en el host con tus privilegios, fuera del sandbox y del modelo de permisos del agente. El aislamiento tiene que envolver a todo el agente: una VM o contenedor descartable, no solo una shell restringida.

🔑

Los secretos viajan con el proceso

Entorno heredado · Hermes, Goose

El proceso hereda el entorno del agente, y tanto el registro de Hermes como el de Goose nombran las API keys de proveedores como alcanzables. Tokens acotados y de vida corta convierten un mal día en uno contenido.

Triage de una carpeta que recibiste como archivos

Primero chequeos de solo lectura, después una llamada endurecida para el tooling que controlás. Los comandos grep y ls solo leen texto; nada de esto ejecuta el repositorio.

# 1. Leé la config como texto plano antes de que un agente o IDE abra la carpeta
grep -nEi 'fsmonitor|hookspath|pager|editor|sshcommand|helper|textconv|external|program|smudge|clean|process|driver|include' .git/config
# PowerShell: Select-String -Path .git\config -Pattern 'fsmonitor|hookspath|pager|helper|textconv|smudge|include'

# 2. Hooks que no son los de ejemplo, configs extra, drivers por atributos
ls -la .git/hooks | grep -v '\.sample$'
ls .git/config.worktree .git/modules 2>/dev/null
grep -nE 'diff=|filter=|merge=' .gitattributes 2>/dev/null

# 3. Todo lo que nombre un programa que no reconozcas: no lo ejecutes.
#    Cloná de nuevo desde el remoto de confianza, o copiá los archivos sin .git.

# 4. Scripts, CI y agentes propios: neutralizá la config en llamadas automáticas
git -c core.fsmonitor=false -c core.hooksPath=/dev/null \
    --no-optional-locks status --porcelain
git -c core.fsmonitor=false diff --no-ext-diff --no-textconv

Parcheado no es lo mismo que cerrado

Hermes publicó su corrección de fsmonitor en v0.21.1 y una segunda para programas de filtros del repositorio en v0.21.6. Los mantenedores de Qwen Code describen el conjunto de claves de config que ejecutan comandos como un conjunto de entradas abierto (issue #10561), y su PR lista rutas que deja sin proteger. El Copilot CLI de GitHub tuvo un advisory hermano en mayo (CVE-2026-45033: un repositorio bare anidado que llega a core.fsmonitor, corregido en 1.0.43). Contá cada actualización como menos exposición, no como el fin de la clase.

3. Qué Hacer Esta Semana

No hace falta un plan de proyecto. Cinco días hábiles, en este orden:

☀️ Días 1–2: Inventario y actualización

  1. 1. Listá cada agente de código y wrapper de CLI en las laptops del equipo y en los runners de CI, con la versión que reporta cada uno.
  2. 2. Compará con las versiones corregidas que pude verificar: Codex CLI 0.131.0+ (builds de Desktop 26.519.x), Goose 1.44.0+ y Hermes Agent 0.21.1+ (tag v2026.9.7). Claude Code 2.1.196+ se apoya solo en Manifold.
  3. 3. Actualizá igual todo lo demás al último release, y tratá a Qwen Code, Grok Build y Cursor como sin confirmar hasta que tu proveedor diga lo contrario.

📅 Días 3–4: Inspeccionar y endurecer

  1. Regla de entrada: todo proyecto que llegue como archivo, unidad o carpeta sincronizada es no confiable hasta leer su .git como texto. Preferí un clon nuevo o una copia sin .git.
  2. Llamadas a git propias: usá el conjunto de flags de arriba (fsmonitor apagado, hooks path a /dev/null, sin ext-diff ni textconv). Replica lo que hacen las correcciones de Hermes y Qwen Code; esperá un git status más lento en repos enormes que dependen de un fsmonitor real.
  3. Entorno: sacá las claves de larga vida de la shell que lanza el agente y usá tokens acotados y de vida corta.

📆 Día 5: Aislar y preguntarle a tu proveedor

  1. Aislamiento: abrí carpetas no confiables solo en una VM o contenedor descartable, sin credenciales montadas.
  2. Preguntá por el alcance: ¿neutralizan la config local del repo en cada llamada automática a git, con lista permitida o lista negra, y qué sumideros más allá de core.fsmonitor cubren (hooks path, drivers de diff y textconv, filtros, credential helpers, pagers)?
  3. Preguntá por el momento: ¿puede correr alguna llamada a git antes del aviso de confianza o de la autenticación, y hay un test de regresión que pruebe que sigue cerrado?
  4. Pedí el registro: ¿qué advisory o CVE lo rastrea, y qué versión exacta lo corrigió?

4. Dónde Está Cada Proveedor (Verificado el 14 de Octubre de 2026)

‘Confirmado’ significa que encontré un registro distinto de la propia publicación de Manifold: un CVE o advisory, un commit integrado o una nota de release. Todo lo demás está redactado como ‘según Manifold’.

🟢

Codex (OpenAI)

Corregido y confirmado. CVE-2026-19592, publicado el 1 sep 2026 por OpenAI como CNA (CVSS 7.3 Alto, puntaje secundario de CISA ADP). Afectadas: CLI 0.102.0 a 0.130.0; corregido en CLI 0.131.0 y en builds de Desktop 26.519.x. El PR openai/codex#22652 se integró el 14 may 2026.

🟢

Goose

Corregido y confirmado. CVE-2026-72718 / GHSA-r5pp-p5r8-466r, CVSS v4 7.0 Alto: goose review ejecutaba git sin quitar la config del repositorio. Afectadas: versiones anteriores a 1.44.0; corregido en 1.44.0 (publicada el 23 jul 2026).

🟢

Hermes Agent

Corregido en el código. El CVE-2026-71963 (VulnCheck, CVSS v4 8.6 Alto) cubre 0.18.2 a 0.21.0. El commit f6234d0 (PR #101483, 2 sep) está contenido en el tag v2026.9.7 (v0.21.1) y posteriores; v0.21.6 (8 oct) cierra además los programas de filtros del repositorio. El ‘sin parche’ de Manifold se refiere a 0.21.0 el 1 sep.

🟡

Qwen Code

Parcial. Según Manifold: sin parche en 0.22.3 el 1 sep. El PR #11669 (‘guard internal git calls against configured helper programs’) se integró en main el 12 sep y su descripción lista rutas sin proteger. Sin release etiquetado ni advisory confirmados; último release v0.25.1 (11 oct). Actualizá y verificá.

🟡

Claude Code

Según Manifold: la ruta core.fsmonitor se confirmó en 2.1.193 y quedó corregida en 2.1.196; una ruta distinta vía /ultrareview seguía sin parche en 2.1.252 el 1 sep. El changelog público de Anthropic para 2.1.196 (29 jun 2026) no lista un endurecimiento de la config de git, y no encontré un GHSA para este tema. Última versión listada: 2.1.300 (14 oct).

⚪

Cursor

Según Manifold: afectado, reportado el 8 jul, cerrado como duplicado y parcheado. No encontré número de versión ni advisory público para este caso.

🔴

Grok Build

Según Manifold: sin parche en 1.0.13, cerrado como duplicado de un reporte del 1 jul. Los resúmenes de release truncados que pude ver hasta v1.0.52 (11 oct) no nombran una corrección. Estado sin confirmar; planificá como si siguiera expuesto.

Lo que no pude confirmar

Tres puntos se apoyan solo en Manifold: la corrección de Claude Code 2.1.196, la de Cursor, y la existencia y estado del problema separado de /ultrareview. Los estados de Qwen Code, Grok Build y Hermes según Manifold son del 1 de septiembre y pueden haber cambiado. No encontré reportes de explotación activa. Revisá la página de advisories de tu proveedor antes de actuar sobre esta lista.

Regla de oro

Tratá la config local de Git como un script de shell de un desconocido: leela antes de que algo la ejecute, y asumí que un agente que no puede explicar cómo sanea Git no lo hace.

Conclusión

GitSpawn es menos un bug puntual que un recordatorio: los agentes de código ejecutan Git como vos, sobre carpetas que no escribiste, antes de que hayas dicho que sí a nada. Los proveedores con registros públicos (Codex, Goose, Hermes) cerraron sus casos; otros tienen un rastro escaso, y la clase es más ancha que una sola clave de config.

Hacé la pasada de cinco días de arriba. Cuesta una semana, y te convierte en la persona del equipo que lee el .git/config antes de apretar enter.

Esta semana en una pantalla

Actualizar

  • • Codex CLI 0.131.0+
  • • Goose 1.44.0+
  • • Hermes 0.21.1+

Inspeccionar

  • • Leer .git/config como texto
  • • Revisar hooks y atributos
  • • Clonar de nuevo del remoto

Aislar

  • • VM o contenedor descartable
  • • Sin claves largas en el env
  • • Pedir pruebas al proveedor

Fuentes

Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego →