En la seguridad de aplicaciones tradicional, los desarrolladores son enseñados a nunca confiar en el input del usuario; debería ser siempre validado, sanitizado y manejado cuidadosamente antes de ser procesado. Cuando se trata de aplicaciones motorizadas por LLM, el mismo principio aplica, pero hay un giro: en lugar del input del usuario, suele ser el output del modelo lo que se vuelve la nueva fuente de información no confiable.
El manejo inadecuado se refiere a situaciones donde el sistema confía ciegamente en lo que sea que el LLM genera y usa sin verificación, filtrado o sanitización. Aunque esto puede sonar inofensivo, se vuelve un problema cuando el contenido generado es:
- Renderizado directamente en el navegador, por ejemplo, inyectando texto crudo en una página web sin escaparlo.
- Incrustado en plantillas o scripts, donde el output del modelo es usado para generar páginas o mensajes del lado del servidor.
- Pasado a procesos automatizados, como una pipeline CI/CD, cliente API o constructor de queries de base de datos que ejecuta lo que sea que el modelo produzca.
Debido a que los LLMs pueden generar texto arbitrario, incluyendo código, scripts y comandos, tratar estos como output "seguro" puede llevar fácilmente a vulnerabilidades.
Lugares Comunes donde Esto Pasa
El manejo indebido de output puede aparecer en un sistema con integración LLM de varias maneras. Aquí las más comunes:
Renderizado Frontend
La respuesta de un chatbot es insertada directamente en una página con innerHTML, permitiendo a un atacante inyectar código malicioso HTML o JavaScript.
Plantillas del Lado del Servidor
Algunas aplicaciones usan el output del modelo para poblar las plantillas o construir vistas. Si el output contiene sintaxis de plantilla (como Jinja2 o Twig), puede disparar SSTI.
Pipelines Automatizadas
En casos de uso más avanzados, los LLMs pueden generar queries SQL, comandos o código que se ejecuta automáticamente por sistemas backend. Sin validación, esto puede resultar en inyección de comandos, queries o lógica no intencional.
Consecuencias del Mundo Real
El output mal manejado de los LLMs no es sólo un riesgo teórico, sino que puede tener consecuencias serias:
XSS Basada en DOM
Si un chatbot sugiere una pieza de HTML y es renderizada sin escapar, un atacante puede construir un prompt que cause que el modelo genere un tag <script>, llevando a XSS.
Inyección de Plantilla
Si el output del modelo es incrustado en una plantilla del lado del servidor sin sanitización, podría llevar a ejecución remota de código en el servidor.
Ejecución Accidental de Comandos
En herramientas de desarrollador o pipelines de automatización internas, los comandos generados puede que sean ejecutados directamente en una shell. Un prompt cuidadosamente construido podría hacer que el LLM diera un comando destructivo (como rm -rf /) que se ejecuta automáticamente.
Por Qué es Fácil de Obviar
La razón por la que esta vulnerabilidad es tan común es porque los desarrolladores ven a los LLMs como componentes en los que confiar. Después de todo, están generando contenido, no recibiéndolo. Sin embargo, en realidad el output del modelo es otra forma de información no confiable, particularmente cuando es influenciado por prompts dados por el usuario.
