XUT_ / COURSES / PENETRATION TESTER

Improper Output Handling - LLM05

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.