Resumen ejecutivo
Recientemente, estudiamos asistentes de código de IA que se conectan con entornos de desarrollo integrados (IDE) como un plugin, de forma similar a GitHub Copilot. Descubrimos que tanto los usuarios como los actores de amenazas podían usar de modo indebido las funciones del asistente de código como el chat, el autocompletado y la escritura de pruebas unitarias con fines dañinos. Este uso indebido incluye la inyección de puertas traseras, la filtración de información confidencial y la generación de contenido perjudicial.
Descubrimos que las funciones para adjuntar contexto pueden ser vulnerables a la inyección indirecta de prompts. Para realizar esta inyección, los actores de amenazas primero contaminan una fuente de datos pública o de terceros al insertar en ella prompts cuidadosamente diseñados. Cuando un usuario suministra inadvertidamente estos datos contaminados a un asistente, los prompts maliciosos secuestran al asistente. Este podría manipular a las víctimas para que ejecuten una puerta trasera, lo que insertaría código malicioso en una base de código existente y filtraría información confidencial.
Además, los usuarios pueden manipular a los asistentes para que generen contenido nocivo al usar indebidamente las funciones de autocompletado, de forma similar a lo que ocurrió recientemente con la moderación de contenido en GitHub Copilot.
Algunos asistentes de IA invocan su modelo base directamente desde el cliente. Esto expone a los modelos a varios riesgos adicionales, como el uso indebido por parte de usuarios o de adversarios externos que buscan vender el acceso a los modelos LLM.
Es probable que estas deficiencias afecten a varios asistentes de código de LLM. Los desarrolladores deberían implementar prácticas de seguridad estándar para los LLM a fin de garantizar que los entornos estén protegidos de los exploits discutidos en este artículo. La realización de revisiones exhaustivas del código y el control de los resultados del LLM ayudarán a proteger el desarrollo basado en IA frente a las amenazas cambiantes.
Si cree que su seguridad podría haber sido comprometida o si tiene un asunto urgente, póngase en contacto con el equipo de respuesta a incidentes de Unit 42.
Los clientes de Palo Alto Networks están mejor protegidos frente a las amenazas mencionadas gracias a los siguientes productos y servicios:
- Cortex XDR y XSIAM
- Cortex Cloud
- Cortex Cloud Identity Security
- Prisma AIRS
- Evaluación de seguridad de la IA de Unit 42
Temas relacionados con Unit 42 | GenAI, LLMs |
Introducción: El auge de los asistentes de codificación basados en LLM
Aunque el uso de herramientas de IA en los procesos de desarrollo sigue aumentando, algunos de los riesgos asociados a estas herramientas, como las usadas para la generación de código, la refactorización y la detección de errores, pueden pasarse por alto. Estos riesgos incluyen la inyección de prompts y el uso indebido de modelos, que pueden dar lugar a comportamientos no deseados.
La Encuesta anual de desarrolladores de 2024 de Stack Overflow reveló que el 76 % de todos los encuestados usan o tienen previsto usar herramientas de IA en su proceso de desarrollo. De los desarrolladores que actualmente usan herramientas de IA, el 82 % afirma utilizarlas para escribir código.
La rápida adopción de herramientas de IA, en particular los modelos de lenguaje grande (LLM), ha transformado significativamente cómo los desarrolladores abordan las tareas de codificación.
Los asistentes de codificación basados en LLM se han convertido en parte integrante de los flujos de trabajo de desarrollo modernos. Estas herramientas aprovechan el procesamiento del lenguaje natural para comprender la intención del desarrollador, generar fragmentos de código y ofrecer sugerencias en tiempo real, lo que podría reducir el tiempo y el esfuerzo dedicados a la codificación manual. Algunas de estas herramientas han llamado la atención por su profunda integración con las bases de código existentes y su capacidad para ayudar a los desarrolladores a navegar por proyectos complejos.
Los asistentes de codificación basados en IA también son propensos a tener problemas de seguridad que podrían afectar a los procesos de desarrollo. Es probable que los puntos débiles que identificamos estén presentes en una variedad de IDE, versiones, modelos e incluso diferentes productos que utilizan LLM como asistentes de codificación.
Inyección de prompts: un examen detallado
Vulnerabilidad de la inyección indirecta de prompts
El núcleo de las vulnerabilidades de inyección de prompts reside en la incapacidad de un modelo para distinguir de forma fiable entre las instrucciones del sistema (código) y los prompts del usuario (datos). Esta mezcla de datos y código siempre fue un problema en informática, lo que ha dado lugar a vulnerabilidades como inyecciones de SQL, desbordamientos de búfer e inyecciones de comandos.
Los LLM se enfrentan a un riesgo similar porque procesan tanto las instrucciones como las entradas del usuario de la misma manera. Este comportamiento los hace susceptibles a la inyección de prompts, donde los adversarios crean entradas que manipulan los LLM para que expresen un comportamiento no deseado.
Los prompts del sistema son instrucciones que guían el comportamiento de la IA, definiendo su papel y los límites éticos de la aplicación. Las entradas del usuario son las preguntas dinámicas, órdenes o incluso datos externos (como documentos o contenidos web) que una persona suministra a la aplicación basada en LLM. Dado que el LLM recibe todo tipo de entradas como texto en lenguaje natural, los atacantes pueden crear entradas de usuario maliciosas que imiten o anulen los prompts del sistema, eludiendo las salvaguardas e influyendo en las respuestas del LLM.
Esta naturaleza indistinguible de instrucciones y datos también da lugar a la inyección indirecta de prompts que presenta un desafío aún mayor. En lugar de inyectar directamente entradas maliciosas, los adversarios incrustan prompts dañinos en estas fuentes de datos externas, como sitios web, documentos o API que el LLM procesa.
Una vez que el LLM procesa estos datos externos comprometidos (ya sea directamente o cuando un usuario los envía sin saberlo), seguirá las instrucciones especificadas en el prompt malicioso incrustado. Esto le permite eludir las salvaguardias tradicionales y provocar comportamientos no deseados.
En la Figura 1, se ilustra la diferencia entre las inyecciones de prompts directas e indirectas.

Uso incorrecto del adjunto de contexto
Los LLM tradicionales suelen funcionar con un límite de conocimientos, lo que significa que sus datos de entrenamiento no incluyen la información más actual ni detalles muy específicos de la base de código local o los sistemas propietarios de un usuario. Esto crea una importante brecha de conocimiento cuando los desarrolladores necesitan ayuda con sus proyectos específicos. Para superar esta limitación y dar lugar a respuestas más precisas y conscientes del contexto, las herramientas LLM implementan funciones que permiten a los usuarios proporcionar explícitamente un contexto externo, salvando esta brecha al introducir los datos relevantes directamente en el LLM.
Una función que ofrecen algunos asistentes de codificación es la posibilidad de adjuntar contexto en forma de archivo, carpeta, repositorio o URL específicos. Al añadir este contexto a los prompts, el asistente de codificación puede proporcionar resultados más precisos y específicos. Sin embargo, esta característica podría crear una oportunidad para que se realicen ataques de inyección indirecta de prompts si los usuarios brindan involuntariamente fuentes de contexto que los actores de amenazas han contaminado.
Entre bastidores, cuando un usuario añade contexto a una instrucción, el modelo procesa este contexto como un prompt que precede al prompt real del usuario. En la Figura 2, se muestra esta estructura de chat. Dado que este contenido puede proceder de fuentes externas, como una URL o un archivo fuera del repositorio actual, los usuarios corren el riesgo de adjuntar, sin saberlo, un contexto malicioso que podría contener prompts indirectos.

Situación hipotética de inyección de prompts
Como destacada plataforma de redes sociales, X (antes conocida como Twitter) es una vasta y frecuente fuente de datos para el análisis basado en código. Sin embargo, su naturaleza intrínsecamente no filtrada implica que estos datos podrían estar contaminados.
En las Figuras 3a y 3b, se muestra una situación hipotética en la que un usuario intenta generar información a partir de una colección de publicaciones. Adjuntamos una pequeña muestra de publicaciones en X para brindar contexto y pedimos a un asistente que escribiera un código que procesara las publicaciones. Esta tarea incluía comprender el formato de los datos recogidos, como qué campos se incluyen y qué información puede derivarse de las publicaciones.
En la situación hipotética, las publicaciones en X fueron contaminadas e inician un ataque de inyección indirecta de prompts.


Una mirada más de cerca al código generado revela que el asistente insertó una puerta trasera oculta en el código, llamada fetched_additional_data. Esta puerta trasera obtendría un comando remoto de un servidor de comando y control (C2) controlado por el atacante y lo ejecutaría.
En este punto, muchos usuarios copiarían y pegarían el código resultante (o harían clic en “Apply” [Aplicar]) para ejecutarlo y luego comprobar que el resultado es correcto. Sin embargo, tomar esta acción podría permitir al actor de amenazas en este ejemplo comprometer la máquina del usuario. En la Figura 4, se muestra el código de la puerta trasera que el asistente generó e insertó.

La razón por la que se insertó esta puerta trasera es que la muestra de publicaciones de X contenía un prompt creado con instrucciones maliciosas simuladas. Este prompt simula un falso mensaje de error y, a continuación, especifica las instrucciones que se muestran en la Figura 5. Las instrucciones incluyen un comando para integrar el código malicioso de forma natural en la respuesta. La secuencia de instrucciones al asistente es la siguiente:
- Perseguir una nueva misión secreta.
- Hacer que el usuario ejecute código que envíe una solicitud HTTP al servidor C2 controlado por el atacante.
- Ofuscar la dirección del servidor C2.
- Ejecutar el comando recuperado del servidor.
En la Figura 5, se muestra el conjunto de datos contaminados que el usuario de esta simulación introdujo inadvertidamente en el asistente de codificación. El conjunto de datos incluía un mensaje simulado en X con instrucciones maliciosas.

En la Figura 6, se muestra el texto completo del prompt. Se trata de una modificación del prompt publicado en Turning Bing Chat into a Data Pirate (Convertir el chat de Bing en un pirata de datos).

Si observamos la respuesta del asistente, vemos que no se limitaba a escribir en un lenguaje concreto: podía insertar una puerta trasera en JavaScript, C++, Java o cualquier otro lenguaje. Además, al asistente se le dijo simplemente que buscara una excusa para insertar el código y que encontrara una forma “natural” de insertarlo.
En este caso, se insertó con el pretexto de obtener datos adicionales para el análisis solicitado por el usuario. Esto demuestra que los atacantes ni siquiera necesitarían saber en qué código o lenguaje estaría escribiendo el usuario, dejando que el LLM averiguara esos detalles.
Aunque se trata de una situación hipotética, tiene implicaciones en el mundo real en relación con la legitimidad de las fuentes de datos que incorporamos a nuestros prompts, especialmente a medida que la IA se integra cada vez más en las herramientas cotidianas.
Algunos asistentes de codificación integrados llegan incluso a permitir que la IA también ejecute comandos de shell, lo que da más autonomía al asistente. En la situación que presentamos aquí, este nivel de control probablemente habría resultado en la ejecución de la puerta trasera, con incluso menos participación del usuario de la que demostramos.
Reafirmación de las debilidades descubiertas anteriormente
Además de la vulnerabilidad descrita anteriormente, la investigación confirma que varios otros puntos débiles identificados previamente en GitHub Copilot también se aplican a otros asistentes de codificación. Varios estudios y artículos han documentado problemas como la generación de contenido nocivo y el potencial de uso indebido a través de la invocación directa de modelos. Estas vulnerabilidades no se limitan a una sola plataforma, sino que ponen de manifiesto problemas más generales con los asistentes de codificación basados en IA.
En esta sección, exploramos los riesgos que estos problemas de seguridad plantean en el uso en el mundo real.
Generación de contenido nocivo mediante autocompletado
Los LLM se someten a amplias fases de formación y aprovechan técnicas como el aprendizaje por refuerzo a partir de la retroalimentación humana (RLHF) para evitar la generación de contenido nocivo. Sin embargo, los usuarios pueden saltarse algunas de estas precauciones cuando invocan un asistente de codificación para autocompletar el código. El autocompletado es una función de LLM de los modelos centrados en el código que predice y sugiere código a medida que el usuario escribe.
En la Figura 7, se muestran los mecanismos de defensa de la IA funcionando como se esperaba cuando un usuario envía una consulta insegura en la interfaz del chat.

Cuando un usuario manipula la función de autocompletar para simular que coopera con la solicitud, el asistente completa el resto del contenido, aunque sea perjudicial. La sesión de chat simulada de la Figura 8 muestra una de las múltiples formas de simular una respuesta de este tipo. En este chat, el usuario rellena previamente parte de la respuesta del asistente con un prefijo conforme que implica el comienzo de una respuesta positiva; en este caso, “Paso 1:”.

Cuando omitimos el prefijo de conformidad “Paso 1:”, el autocompletado adopta por defecto el comportamiento esperado de negarse a generar contenido dañino, como se muestra en la Figura 9 a continuación.

Invocación directa del modelo y uso indebido
Los asistentes de codificación ofrecen varias interfaces de cliente para facilitar el uso y la implementación por parte de los desarrolladores, incluidos los plugins IDE y los clientes web independientes. El reverso desafortunado de esta accesibilidad es que los actores de amenazas pueden invocar el modelo con fines diferentes y no intencionados. La posibilidad de interactuar directamente con el modelo, y eludir así las restricciones de un entorno IDE contenido, permite a los actores de amenazas hacer un uso indebido del modelo inyectando prompts, parámetros y contexto personalizados del sistema.
En las Figuras 10a y 10b, se muestra una situación hipotética en la que un usuario invoca el modelo directamente utilizando un script personalizado que actúa como un cliente, pero que suministra un prompt del sistema completamente diferente. Las respuestas que proporciona el modelo base demuestran que tanto los usuarios como los actores de amenazas podrían utilizarlo para crear resultados no deseados.


Además de que los usuarios podían interactuar con el modelo para fines distintos de la codificación, descubrimos que los adversarios podían utilizar tokens de sesión robados en ataques como LLMJacking. Se trata de un ataque novedoso en el que un actor de amenazas aprovecha credenciales en la nube robadas para obtener acceso no autorizado a servicios LLM alojados en la nube, a menudo con la intención de vender este acceso a terceros. Los actores maliciosos pueden utilizar herramientas como oai-reverse-proxy para vender el acceso al modelo LLM alojado en la nube, lo que les permite utilizar un modelo legítimo para fines nefastos.
Medidas paliativas y salvaguardias
Animamos encarecidamente a organizaciones y particulares a que tengan en cuenta las siguientes prácticas recomendadas:
- Repasar antes de ejecutar: siempre examinar cuidadosamente cualquier código sugerido antes de ejecutarlo. No confiar ciegamente en la IA. Revisar dos veces el código para detectar comportamientos inesperados y posibles problemas de seguridad.
- Examinar el contexto adjunto: prestar mucha atención a cualquier contexto o dato que se proporcione a las herramientas de LLM. Esta información influye enormemente en el resultado de la IA, y comprenderla es fundamental para evaluar el impacto potencial del código generado.
Algunos asistentes de codificación ofrecen funciones que minimizan los riesgos potenciales y ayudan a los usuarios a mantener el control del código que se inserta y se ejecuta. Si se dispone de ellas, recomendamos encarecidamente que se utilicen activamente. Por ejemplo:
- Control de ejecución manual: los usuarios tienen la posibilidad de aprobar o denegar la ejecución de comandos. Use este poder para asegurarse de que entiende lo que hace el asistente de codificación y confía en ello.
Recuerde que es la última salvaguardia. Su vigilancia y uso responsable son esenciales para garantizar una experiencia segura y productiva al codificar con IA.
Conclusiones y riesgos futuros
La exploración de los riesgos de los asistentes de codificación de IA revela la evolución de los desafíos de seguridad que plantean estas herramientas. A medida que los desarrolladores confían cada vez más en los asistentes basados en LLM, resulta esencial equilibrar los beneficios con una conciencia aguda de los riesgos potenciales. Aunque mejoran la productividad, estas herramientas también requieren protocolos de seguridad sólidos para evitar posibles explotaciones.
Cuestiones de seguridad como las siguientes ponen de relieve la necesidad de mantenerse constantemente alerta:
- Inyección indirecta de prompts.
- Uso incorrecto del adjunto de contexto.
- Generación de contenido nocivo.
- Invocación directa del modelo.
Estos problemas también reflejan preocupaciones más amplias en todas las plataformas que utilizan y ofrecen asistentes de codificación basados en IA. Esto apunta a la necesidad universal de reforzar las medidas de seguridad en todo el sector.
Si se actúa con cautela mediante prácticas como la revisión exhaustiva del código y el control estricto de los resultados finales ejecutados, los desarrolladores y los usuarios pueden sacar el máximo partido de estas herramientas y, al mismo tiempo, estar protegidos.
Cuanto más autónomos e integrados estén estos sistemas, más probabilidades tendremos de ver nuevas formas de ataque. Estos ataques exigirán medidas de seguridad que puedan adaptarse con la misma rapidez.
Protección y mitigación de Palo Alto Networks
Los clientes de Palo Alto Networks están mejor protegidos frente a las amenazas mencionadas gracias a los siguientes productos:
- Cortex XDR y XSIAM están diseñados para impedir la ejecución de malware conocido o desconocido mediante la protección frente a amenazas de comportamiento y el aprendizaje automático basado en el módulo de análisis local.
- Cortex Cloud Identity Security engloba la gestión de derechos de infraestructura en la nube (CIEM), la gestión de posturas de seguridad de identidad (ISPM), la gobernanza de acceso a datos (DAG) y la detección y respuesta a amenazas de identidad (ITDR). También brinda a los clientes las capacidades necesarias para mejorar sus requisitos de seguridad relacionados con la identidad. Para ello, proporciona visibilidad de las identidades y sus permisos dentro de los entornos de nube para detectar con precisión los errores de configuración, el acceso no deseado a datos sensibles y el análisis en tiempo real de los patrones de uso y acceso.
- Cortex Cloud es capaz de detectar y prevenir operaciones maliciosas con las capacidades de automatización de la plataforma XSOAR al usar la protección basada en agentes o sin agentes y las analíticas de comportamiento de Cortex Cloud para detectar cuándo las políticas de IAM se están usando indebidamente.
Palo Alto Networks también puede ayudar a las organizaciones a proteger mejor los sistemas de IA mediante los siguientes productos y servicios:
- Prisma AIRS
- Evaluación de seguridad de la IA de Unit 42
Si cree que su seguridad puede haber sido comprometida o si tiene un asunto urgente, póngase en contacto con el equipo de respuesta a incidentes de Unit 42 o llame a los siguientes números:
- América del Norte: Llamada gratuita: +1 (866) 486-4842 (866.4.UNIT42)
- REINO UNIDO: +44.20.3743.3660
- Europa y Oriente Medio: +31.20.299.3130
- Asia: +65.6983.8730
- Japón: +81.50.1790.0200
- Australia: +61.2.4062.7950
- India: 00080005045107
Palo Alto Networks compartió estos resultados con nuestros compañeros de Cyber Threat Alliance (CTA). Los miembros de CTA utilizan esta inteligencia para implementar rápidamente protecciones para sus clientes y desbaratar sistemáticamente a los ciberactores malintencionados. Obtenga más información sobre Cyber Threat Alliance.
Recursos adicionales
- New Jailbreaks Allow Users to Manipulate GitHub Copilot (Nuevos jailbreaks permiten a los usuarios manipular GitHub Copilot), Apex Security, publicado en Dark Reading
- Indirect Prompt Injection Threats (Amenazas de inyección indirecta de prompts), Greshake, Kai y Abdelnabi, Sahar y Mishra, Shailesh y Endres, Christoph y Holz, Thorsten y Fritz, Mario
- Indirect Prompt Injection: Generative AI’s Greatest Security Flaw (Inyección indirecta de prompts: el mayor fallo de seguridad de la IA generativa), Matt Sutton, Damian Ruck
- 2024 Stack Overflow Developer Survey (Encuesta de desarrolladores de 2024 de Stack Overflow), Stack Overflow