# 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="/files/fsbeDYH2l9zNg45a7NSe" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/m1QNJnrOK4TNyIKAh9Hj" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://beafn28.gitbook.io/beafn28/web-security/laboratorios-portswigger/web-llm-attacks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
