Sin Sanitización del Output de IA
El HTML o código generado por un LLM se renderiza directo en la UI sin sanitización, abriendo la puerta a ataques de XSS almacenado.
Cómo Funciona
Si tu app le pide a un LLM que genere contenido HTML (emails, reportes, markdown) y lo renderizas con dangerouslySetInnerHTML o innerHTML sin eliminar tags maliciosos, un atacante puede usar inyección de prompts para que la IA devuelva una etiqueta script. Ese script luego corre en el navegador de cada usuario que ve el contenido.
// MAL: renderizando markdown generado por IA como HTML sin sanitización
const aiHtml = marked(aiGeneratedMarkdown); // convierte markdown a HTML
return <div dangerouslySetInnerHTML={{ __html: aiHtml }} />;// BIEN: sanitiza el HTML después de la conversión de markdown
import DOMPurify from 'dompurify';
const rawHtml = marked(aiGeneratedMarkdown);
const safeHtml = DOMPurify.sanitize(rawHtml, { USE_PROFILES: { html: true } });
return <div dangerouslySetInnerHTML={{ __html: safeHtml }} />;Ejemplo Real
Investigadores mostraron que los asistentes de escritura con IA que generan contenido HTML podían ser manipulados vía inyección indirecta de prompts para incluir payloads XSS. Si ese contenido se almacena y se muestra a otros usuarios, se convierte en una vulnerabilidad XSS almacenado a escala.
Cómo Prevenirlo
- Siempre pasa el HTML generado por IA por DOMPurify antes de usar dangerouslySetInnerHTML
- Usa una Content Security Policy (CSP) que bloquee scripts inline como medida de defensa en profundidad
- Considera usar un renderer de markdown que genere HTML sanitizado por defecto (como rehype-sanitize)
- Valida que el output de la IA solo contenga elementos HTML esperados para tu caso de uso
- Loguea los outputs de IA que contengan patrones sospechosos (tags script, event handlers) para revisión
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Inyección de Prompts
highEl input del usuario se concatena directo en el prompt del LLM, permitiendo que atacantes sobreescriban tus instrucciones y hagan que la IA haga lo que ellos quieran.
Filtración de PII a Modelos de IA
highTu app manda información personal identificable — emails, nombres, contraseñas, teléfonos — a APIs de IA externas, exponiendo datos de usuarios a proveedores de modelos de terceros.
Respuesta de IA Sin Validación
mediumEl output de un LLM se renderiza o ejecuta directo sin verificar si coincide con el formato esperado o contiene contenido dañino.
API Key de IA en el Frontend
criticalTu API key de OpenAI, Anthropic u otro proveedor de IA está expuesta en el código del cliente, donde cualquiera puede robarla y acumular cargos en tu cuenta.