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)
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-textconvParcheado 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. 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. 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. 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
- 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.
- 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.
- 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
- Aislamiento: abrí carpetas no confiables solo en una VM o contenedor descartable, sin credenciales montadas.
- 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)?
- 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?
- 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
- Manifold Security — Divulgación de GitSpawn (1 sep 2026)
- Goose — GHSA-r5pp-p5r8-466r (CVE-2026-72718)
- OpenCVE — CVE-2026-19592 (OpenAI Codex)
- openai/codex PR #22652 — ignorar config fsmonitor en lecturas de metadatos de Git
- VulnCheck — Hermes Agent CVE-2026-71963
- Hermes Agent PR #101483 — corrección de GitSpawn
- Qwen Code PR #11669 — proteger llamadas internas a git
- Qwen Code issue #10561 — claves de config que ejecutan comandos
- Changelog de Claude Code (Anthropic)
- GitHub Copilot CLI — GHSA-9ccr-r5hg-74gf (CVE-2026-45033)
- Documentación de Git — core.fsmonitor y core.hooksPath



