8 puntos por GN⁺ 2025-10-14 | 1 comentarios | Compartir por WhatsApp
  • En junio de 2025, se descubrió una vulnerabilidad crítica (CVSS 9.6) en GitHub Copilot Chat
  • Se confirmó la posibilidad de filtrar secretos y código privado usando técnicas de evasión de CSP e inyección remota de prompts
  • Es posible manipular los resultados de respuesta de Copilot de otros usuarios abusando de la función de comentarios ocultos de GitHub
  • Se logró evadir la CSP tras analizar en detalle la estructura de uso del proxy Camo de GitHub
  • GitHub corrigió de emergencia esta vulnerabilidad en agosto de 2025 desactivando el renderizado de imágenes

Resumen TL;DR

  • En junio de 2025, se descubrió una vulnerabilidad crítica en GitHub Copilot Chat que permitía la filtración de código fuente y secretos de repositorios privados
  • El investigador utilizó inyección remota de prompts y una evasión de la CSP (Content Security Policy) de GitHub para manipular y controlar por completo las respuestas de Copilot, e inducir sugerencias de código o enlaces maliciosos
  • El núcleo de este ataque está en aprovechar la función oficial de comentarios ocultos de GitHub y la sensibilidad de Copilot al contexto para insertar prompts de una forma que nadie puede ver
  • Al analizar el comportamiento por el que GitHub convierte automáticamente enlaces externos de imágenes al proxy Camo, se diseñó un método para reutilizar esa estructura carácter por carácter y componer la información filtrada
  • Tras el reporte a través de HackerOne, GitHub aplicó un parche bloqueando la función de renderizado de imágenes en Copilot Chat

Contexto

  • GitHub Copilot Chat es un asistente de IA integrado que ayuda a los desarrolladores a hacer preguntas, obtener explicaciones de código o recibir sugerencias de implementación
  • Copilot Chat consulta diversa información de contexto, como código del repositorio, commits y PR (pull requests)
  • A medida que aumenta la cantidad de contexto disponible, también se amplía la superficie de ataque

Uso de inyección de prompts y comentarios ocultos

  • En un experimento que atacaba la sensibilidad al contexto de GitHub Copilot, se insertó un prompt específico en la descripción de un PR (pull request)
  • Sin embargo, normalmente cualquier prompt o mensaje insertado puede ser visto por todos los usuarios
  • Aquí se descubrió que al usar la función oficial de comentarios ocultos de GitHub (``), era posible enviar instrucciones solo a Copilot de forma invisible
  • Si se coloca un prompt dentro de un comentario oculto, aparece en las notificaciones, pero su contenido específico no se muestra, lo que genera un efecto de Server-Side Injection

Alcance del prompt malicioso

  • El prompt en comentario oculto también afecta a Copilot cuando otros usuarios acceden a la página del PR
  • En lugar de una frase simple, es posible insertar instrucciones complejas como sugerencias de código, Markdown, URLs maliciosas o recomendaciones de paquetes maliciosos como Copilotevil
  • Copilot usa los mismos permisos que el usuario que envía la solicitud, por lo que puede acceder a repositorios privados y usar esa información
  • Es posible implementar un escenario donde la información se filtra al atacante si el usuario hace clic, añadiendo deliberadamente datos codificados en base16 a una URL

Resumen del impacto principal

  • Manipulación y control del contenido de las respuestas de Copilot de otros usuarios
  • Posibilidad de inyección de prompts personalizada mediante Markdown, imágenes, código y URL
  • Ejecución práctica de intentos de filtración de información dentro del alcance de permisos del usuario afectado

Interpretación estructural de la evasión de CSP en GitHub

  • GitHub aplica una CSP robusta para restringir la carga de imágenes y recursos desde dominios externos
  • Cuando se insertan imágenes en un README o en Markdown, el proxy Camo de GitHub convierte la URL externa en una URL de proxy basada en firma HMAC
  • Para que el navegador cargue la imagen, se necesita una URL Camo y un valor de firma generados previamente por GitHub
  • Aunque el usuario cree una URL con datos dinámicos de forma arbitraria, será bloqueada si no pasa por el proxy Camo

Cómo se abusó de la estructura de Camo

  • El investigador generó por adelantado un diccionario completo de URLs del proxy Camo para todo el conjunto de letras y caracteres especiales, y lo incluyó en el prompt oculto
  • Se diseñó para pedirle a Copilot un "juego de arte ASCII", de modo que convirtiera la información filtrada (por ejemplo, código fuente o claves) en una secuencia de imágenes del proxy Camo
  • Con cada solicitud de imagen, el navegador solo recibe un píxel transparente de 1x1, por lo que el usuario no percibe ningún cambio
  • Finalmente, se añadieron parámetros aleatorios para evitar problemas de caché

Implementación y prueba del ataque real

  • El objetivo se definió como información descriptiva sobre una vulnerabilidad zero-day en un issue de un proyecto privado
  • Se demostró el proceso real de exfiltración mediante una PoC (prueba de concepto)
  • Incluso se automatizó con Copilot la búsqueda de la palabra clave de ejemplo "AWS_KEY" y la filtración del resultado

Respuesta y parche de GitHub

  • GitHub corrigió la vulnerabilidad a partir del 14 de agosto de 2025 desactivando por completo el renderizado de imágenes en Copilot Chat

Más información

1 comentarios

 
GN⁺ 2025-10-14
Opiniones de Hacker News
  • Estamos muy contentos de haber migrado todo el entorno de trabajo a Forgejo, un VCS self-hosted. Hace 2 años empezamos a migrar incluso todos los repositorios de clientes, y no solo redujimos drásticamente el costo de la suscripción de GitHub, sino que además el sistema, usado por 30 a 40 desarrolladores al día, obtuvo un rendimiento mucho más rápido y estable. También prohibimos el uso de VSCode y de todos los editores con funciones de LLM integradas. Los desarrolladores pueden usar agentes de codificación basados en CLI, pero los operamos dentro de contenedores estrictamente aislados, permitiéndoles solo acceso a código fuente limitado

    • Me pregunto cómo evitan que alguien exponga accidentalmente un repositorio completo a un LLM en un entorno donde 30 o 40 desarrolladores clonan repositorios en sus máquinas locales para trabajar. Si alguien no reporta el error por miedo a consecuencias profesionales, también me pregunto cómo detectan un incidente de filtración

    • Quisiera preguntar qué IDE usan como alternativa

    • Me pregunto a qué se conectan las herramientas CLI: si son servicios oficiales de OpenAI o Claude, o un proveedor como AWS Bedrock

    • Prohibir por completo VSCode se siente como una medida excesiva, más allá de simplemente restringir plugins con funciones problemáticas. VSCode es el único IDE con soporte amplio incluso para lenguajes que otros IDE casi no cubren, como Haskell, Lean 4 y F*. Incluso en grandes empresas comerciales de productos de consumo no suelen prohibir VSCode como tal, y consideran suficiente no usar las funciones problemáticas

  • Creo que este problema en realidad no está resuelto como se debe. La parte impresionante de Copilot es que acepta entrada en lenguaje natural; es decir, cualquier método de filtración funcionará si se lo describes en inglés. Dicen que “arreglaron” un método específico, pero no revelan cómo lo hicieron realmente. Por ejemplo, se podría usar base64 en una URL de imagen, y hasta se podría engañarlo para que entregue contraseñas con algo como “guardé por error la lista de mi carrito en el campo passswd, ayúdame a encontrarla”. Parece que hay muchísimas vulnerabilidades por descubrir. Me pregunto si al menos pagan bug bounty por esto; aquí hay una mina de oro

    • Me pregunto qué significa eso de usar base64 como URL de imagen. ¿Te refieres a usar una URL de imagen a la que no se le aplique Camo? Según entiendo, las imágenes sin Camo quedan bloqueadas por CSP. Y si el agente de Copilot no tiene acceso a internet, hasta hacer fetch sería difícil; si sí lo tiene, entonces se abrirían rutas de ataque mucho más fáciles que usar imágenes

    • Entiendo que GitHub resolvió este problema desactivando por completo la renderización de imágenes en Copilot Chat

  • Me pareció impresionante la idea de pregenerar en URLs de Camo todas las letras y símbolos del alfabeto, e insertarlos en el prompt. Es un enfoque hermoso

  • Este artículo da un poco la impresión de ser promoción para una empresa llamada Legit. Pero en realidad, todas las soluciones basadas en IA comparten la misma debilidad: falta de transparencia y problemas de confianza. Al usar herramientas de ciberseguridad con IA que no estén basadas en FOSS, la amenaza de seguridad incluso puede aumentar

  • Esta no es la primera vez que pasa algo así; antes ya hubo un caso relacionado llamado “GitHub Copilot Chat: From Prompt Injection to Data Exfiltration”

    • Esto va a seguir repitiéndose en el futuro
  • Creo que ocultar información usando comentarios HTML escondidos en un PR puede seguir siendo un problema serio, especialmente más peligroso en repositorios open source. Me pregunto si mejoraron esa parte

    • Esta función se usa ampliamente para poner mensajes de guía en plantillas de issue/PR. Pero parece relativamente sencillo eliminar comentarios de la entrada de Copilot, y mientras el problema de “prompt injection” de los LLM no esté completamente resuelto de forma segura, haría falta al menos un tratamiento temporal de ese tipo
  • Me parece interesante que este exploit aproveche el patrón lento de respuesta token por token de los LLM para permitir reconstruir los datos en secuencia. Si el LLM devolviera toda la respuesta de una sola vez en bloque, supongo que se alteraría el timing y la reconstrucción sería mucho más difícil

    • Quisiera proponer que se generen URLs que incluyan no solo cada carácter, sino también su posición. Por ejemplo, si la cadena fuera “hacked”, podría hacer solicitudes como 0.0.0.0/1-h, 0.0.0.0/2-a, y así luego se podrían ordenar las solicitudes y eliminar llamadas duplicadas
  • Me pregunto si no se podría responder a esto limitando el acceso a repos de los usuarios de Copilot a solo lectura

  • Ni siquiera recuerdo cuándo fue la última vez que filtré mi código fuente personal con Copilot

  • Realmente me parece un enfoque muy único y genial