6. Seguridad y permisos en GitHub Copilot CLI

Objetivo del tema

Comprender los riesgos asociados a permitir que GitHub Copilot CLI opere en tu entorno local y aprender a controlar sus permisos.

Al finalizar sabrás evaluar solicitudes de ejecución, configurar directorios seguros, administrar herramientas permitidas y diseñar estrategias de mitigación.

6.1 Riesgos de que Copilot ejecute comandos o modifique archivos

Copilot CLI puede leer, modificar y ejecutar archivos en tu nombre. Cada vez que acepta una instrucción:

  • Puede ejecutar comandos de shell (por ejemplo rm, git push o node).
  • Puede crear, editar o eliminar archivos dentro del directorio de trabajo.
  • Puede acceder a credenciales o secretos presentes en el árbol del proyecto si no se restringe su alcance.

Revisa cada plan antes de aprobarlo. Copilot solo debe tener el mismo nivel de acceso que concederías a una automatización de confianza o a otra persona integrante del equipo.

6.2 Directorios de confianza: qué son y cuándo confiar

Al iniciar una sesión interactiva, la CLI solicita confirmar si confías en el directorio actual:

  • Sí, continuar: habilita permisos solo para la sesión en curso.
  • Sí, y recordar esta carpeta: agrega la ruta a la lista permanente de directorios de confianza.
  • No, salir: cancela la sesión sin otorgar acceso.

El ámbito es heurístico: evita ejecutar Copilot desde $HOME o carpetas con datos sensibles. Limítalo a repositorios controlados y, si quieres revocar el permiso recordado, edita la lista trusted_folders en ~/.config/github-copilot-cli/config.json.

6.3 Aprobación de herramientas (permitir / denegar comandos)

Cuando Copilot necesita utilizar una herramienta potencialmente peligrosa, muestra un cuadro con tres opciones:

  1. Yes: autoriza el comando puntual; la próxima vez volverá a pedirlo.
  2. Yes, and approve TOOL for the rest of the running session: otorga permiso para reutilizar la herramienta durante toda la sesión.
  3. No: rechaza la acción y puedes indicarle una alternativa.

La segunda opción es cómoda, pero también arriesgada. Si concedes rm para la sesión, Copilot puede ejecutar cualquier variante del comando (por ejemplo rm -rf ./*) sin consulta adicional.

Prefiere aprobaciones puntuales para comandos críticos (borrados masivos, despliegues, git push) y limita las aprobaciones globales solo a herramientas de baja criticidad (por ejemplo chmod o sed).

6.4 Opciones de línea de comandos para control de herramientas

La CLI expone banderas que definen qué herramientas puede utilizar sin pedir confirmación:

  • --allow-all-tools: autoriza cualquier comando sin preguntar. Úsalo solo en entornos desechables.
  • --allow-tool '<herramienta>': aprueba automáticamente una herramienta concreta (por ejemplo --allow-tool 'write' o --allow-tool 'shell(git status)').
  • --deny-tool '<herramienta>': bloquea una herramienta específica incluso si --allow-all-tools está activo.

Ejemplos:

# Permite cualquier comando excepto eliminar archivos o hacer push
copilot --allow-all-tools --deny-tool 'shell(rm)' --deny-tool 'shell(git push)'

# Autoriza solo comandos de shell de lectura
copilot --allow-tool 'shell(cat)' --allow-tool 'shell(ls)'

Estas banderas pueden combinarse con --prompt para automatizaciones o añadirse a scripts que integren Copilot en pipelines.

6.5 Mitigación de riesgos (entornos aislados, contenedores, etc.)

Además de limitar permisos, implementa medidas defensivas adicionales:

  • Entornos aislados: ejecuta la CLI dentro de máquinas virtuales, contenedores o espacios de desarrollo sin acceso a datos sensibles.
  • Repositorios espejo: experimenta en clones desechables y propaga los cambios revisados a los repositorios principales mediante PRs.
  • Auditoría y control de versiones: revisa cada cambio generado por Copilot y asegúrate de que las pipelines de CI ejecuten pruebas antes de fusionar.
  • Restricción de secretos: usa gestores de secretos y evita almacenar credenciales en el árbol de archivos donde Copilot opera.

Si necesitas habilitar --allow-all-tools en automatizaciones, hazlo dentro de entornos desechables sin acceso a recursos críticos y regenera las credenciales luego de cada ejecución.