GitLost: Hicimos que el agente de IA de GitHub filtrara repos privados

Naturaleza de la vulnerabilidad

  • GitHub Agentic Workflows estaban configurados para:
    • Leer títulos y cuerpos de issues públicas.
    • Responder mediante comentarios públicos.
    • Tener acceso de lectura a otros repos de la organización, incluidos los privados.
  • Los atacantes podían inyectar instrucciones en issues públicas que hacían que el agente leyera repos privados y pegara el contenido de vuelta como comentarios públicos.
  • Varios comentaristas subrayan que el fallo clave es una frontera de confianza ausente entre el contenido no confiable de issues y el acceso a repos privados.

¿Quién tiene la culpa?

  • Una postura: esto es principalmente una mala configuración del usuario.
    • Los investigadores concedieron explícitamente al agente acceso org-wide a repos y le permitieron procesar issues públicas no confiables.
    • Analogía: darle secretos a un trabajo de CI y luego ejecutarlo en PRs públicas.
  • Otra postura: esto es un fallo de diseño de GitHub.
    • Los usuarios razonables esperan que un agente en un repo público no filtre repos privados ajenos.
    • Los permisos son demasiado gruesos y GitHub no hace que la configuración segura sea fácil ni obvia.

Prompt injection y guardrails (no) solucionables

  • Muchos argumentan que el prompt injection es inherente a los LLM: la entrada del usuario son instrucciones, así que no hay una forma sólida de separar “código” de “datos.”
  • Comparaciones con SQL injection:
    • Similar en que la entrada no confiable cambia el comportamiento.
    • Pero a diferencia de SQL, no existe un equivalente de las prepared statements; los guardrails son solo más texto de entrada y pueden ser anulados.
  • Algunos lo ven más como ingeniería social: solo puedes mitigar mediante procesos y control de acceso, no “arreglar” el modelo.

Permisos, arquitectura y mitigaciones

  • Una visión ampliamente compartida: las únicas defensas reales son arquitectónicas:
    • Ejecutar agentes con los mismos permisos o permisos más estrictos que los del usuario que los invoca; nunca con acceso “root”/org-wide.
    • Delimitar agentes a un único repo o a flujos de trabajo estrechamente definidos; segmentar flujos con distintos tokens.
    • Restringir las escrituras de agentes que manejan entrada pública, incluso si pueden leer datos privados.
    • Aislar agentes y darles sus propias credenciales; tratarlos como usuarios no confiables.
  • Algunos sugieren mejores UIs para permisos por prompt/por flujo de trabajo y tokens de GitHub más granulares.

Confianza en GitHub, la nube y las integraciones de IA

  • Escepticismo hacia GitHub/Microsoft:
    • Percepción de “IA en todas partes” impulsada por presión de inversores, lo que lleva a funciones apresuradas e inseguras.
    • Preocupaciones de que los datos de repos privados alimenten el entrenamiento de Copilot salvo exclusión explícita.
  • Un subgrupo visible aboga por migrar a forges autoalojados (Forgejo, Codeberg, bare git) para evitar la integración de IA y recuperar el control.

Reflexiones más amplias

  • Varios comentaristas ven esto como otro ejemplo de una débil cultura de seguridad (“negligencia criminal”, envío “YOLO”).
  • Temas de consenso:
    • Los LLM deben tratarse como otra capa de interfaz, no como un backend privilegiado.
    • No se puede confiar en guardrails a nivel de modelo; solo las barreras de seguridad duras y un diseño de mínimo privilegio reducen el riesgo de forma significativa.