# Web LLM attacks

## Lab: Exploiting LLM APIs with excessive agency

### Enunciado

Para resolver el laboratorio, utiliza el LLM para eliminar al usuario **carlos**.

### Resolución

Como vemos es un asistente que puedes hablar en vivo. Tras muchas conversaciones por fin di en el clavo para eliminar al usuario **carlos**.

Atacar una integración LLM es similar a explotar un SSRF: se usa el sistema del servidor para atacar recursos internos.

**Cómo funcionan:**\
Los LLMs procesan entradas (prompts) y generan respuestas. En webs modernas pueden usarse para:

* Atención al cliente.
* Traducción.
* Análisis de contenido generado por usuarios.

**Problema común:**\
Los ataques suelen usar _prompt injection_, manipulando las respuestas del LLM para forzarlo a realizar acciones no previstas, como llamadas a APIs sensibles.

**Metodología para detectar vulnerabilidades:**

1. Identificar las entradas del LLM (directas e indirectas).
2. Determinar qué datos y APIs puede acceder.
3. Probar esa superficie de ataque.

**APIs del LLM:**\
El sitio puede describir APIs locales al LLM. Por ejemplo, un bot de soporte puede gestionar usuarios, pedidos o stock a través de sus APIs.

**Riesgo:**\
El LLM podría llamar a estas APIs en nombre del usuario sin que este lo sepa, si no hay confirmación previa.

**Excessive Agency:**\
Sucede cuando el LLM tiene acceso a APIs sensibles y puede ser manipulado para usarlas de forma insegura. El atacante explora preguntando qué APIs están disponibles o fingiendo ser un desarrollador.

**Exploración en el laboratorio:**

* Entrada directa: el prompt del chat en vivo.
* Entrada indirecta: datos de entrenamiento.
* Descubrimos que el LLM tiene acceso a un API interno que lista precios de productos.
* Confirmamos que también tiene acceso a funciones como `password_reset`, `debug_sql`, `product_info`.

**Explotación:**

* `password_reset` puede usarse para cambiar contraseñas de otras cuentas.
* `debug_sql` permite inyectar consultas SQL maliciosas.

**Ataque final:**\
Podemos pedirle al LLM que use la API `debug_sql` para ejecutar un comando que elimine al usuario carlos.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FrECCbjfFif0fJ5iHiJ9W%2Fimage.png?alt=media&#x26;token=13dabaa5-10bc-463d-9fa6-79e1681b05eb" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FziTuZ78C1MmZrDDxsiAA%2Fimage.png?alt=media&#x26;token=ad37f961-254c-4bf7-b54c-7be42ad4cbe1" alt=""><figcaption></figcaption></figure>

