# Lista de verificación de seguridad para LLM

Utiliza esta lista antes de publicar una funcionalidad basada en un LLM que lea contenido no fiable, recupere datos privados o invoque herramientas.

## 1. Límites del flujo de trabajo

- [ ] Se ha designado a la persona responsable del flujo.
- [ ] Las acciones permitidas del flujo están documentadas.
- [ ] Se han identificado las acciones externas, destructivas, financieras, legales, laborales o visibles para clientes.
- [ ] Existe un procedimiento documentado para desactivar rápidamente el flujo.
- [ ] El flujo dispone de un procedimiento de reversión o una alternativa manual.

## 2. Inventario de entradas no fiables

- [ ] La entrada directa del usuario se trata como no fiable.
- [ ] Los documentos recuperados se tratan como datos no fiables, no como instrucciones.
- [ ] Los resultados de las herramientas se tratan como no fiables, salvo que se generen dentro del límite de confianza.
- [ ] Los PDF, imágenes, audios, hojas de cálculo y transcripciones cargados se tratan como no fiables.
- [ ] Las páginas web y las observaciones de agentes de navegación se tratan como no fiables.
- [ ] Los prompts editables por administradores, plantillas de flujos, contenidos del CMS y fuentes de conocimiento se revisan antes de utilizarlos en producción.

## 3. Límites de datos y recuperación

- [ ] Nunca se envían al modelo secretos, credenciales, tokens sin procesar ni URL privadas.
- [ ] La recuperación filtra por organización, usuario, función y permisos de la fuente antes de ordenar los resultados.
- [ ] Los fragmentos recuperados conservan el ID de fuente, ID de organización, visibilidad, responsable, versión y marca de tiempo de revisión.
- [ ] La ruta de respuesta puede citar o registrar los ID de las fuentes utilizadas.
- [ ] Las fuentes obsoletas, no revisadas o poco fiables se excluyen o señalan.
- [ ] Los registros ocultan los datos personales y las credenciales.

## 4. Contrato de prompt y contexto

- [ ] Las instrucciones de sistema y desarrollador se versionan y revisan como código.
- [ ] El contenido no fiable está delimitado y etiquetado como datos.
- [ ] El modelo recibe instrucciones sobre cómo actuar cuando el contenido no fiable contradice las instrucciones de la tarea.
- [ ] El modelo recibe únicamente el contexto mínimo necesario.
- [ ] Los flujos de alto riesgo utilizan un paso de extracción acotado antes de que el agente principal acceda al contenido.
- [ ] Las frases señuelo del prompt se utilizan solo para detectar ataques, no como defensa principal.

## 5. Diseño de herramientas y acciones

- [ ] Las herramientas tienen un alcance limitado y específico para la tarea.
- [ ] Las herramientas obtienen el usuario, la organización y la función del contexto de autenticación del servidor, no de los argumentos del modelo.
- [ ] Cada herramienta valida sus argumentos mediante un esquema y reglas de negocio.
- [ ] Cada herramienta aplica la autorización de forma independiente del modelo.
- [ ] Las herramientas de escritura son idempotentes cuando es posible.
- [ ] Los efectos externos requieren aprobación humana o comprobaciones deterministas de políticas.
- [ ] Se han configurado límites de frecuencia, cuotas y costes.
- [ ] Las llamadas a herramientas se registran junto con el usuario, organización, flujo, versión del prompt, modelo, resumen de argumentos y resultado.

## 6. Validación de la salida

- [ ] La salida del modelo se procesa con un esquema estricto antes de utilizarla.
- [ ] Los campos desconocidos se rechazan cuando el contrato debe ser cerrado.
- [ ] Las URL, el contenido Markdown y HTML, los nombres de archivo y los bloques de código se sanean cuando corresponde.
- [ ] Las salidas no pueden incluir clases de datos ajenas al alcance permitido de la tarea.
- [ ] Las respuestas factuales basadas en fuentes privadas requieren ID o fragmentos de las fuentes.
- [ ] Una salida mal formada provoca un fallo seguro, en lugar de recurrir a texto libre.

## 7. Pruebas de regresión

- [ ] Prueba de inyección directa: la entrada del usuario pide al modelo que ignore las instrucciones.
- [ ] Prueba de inyección indirecta: el contenido recuperado pide al modelo que revele datos o invoque una herramienta.
- [ ] Prueba entre organizaciones: una solicitud intenta acceder a datos de otra organización.
- [ ] Prueba de llamada insegura: el modelo solicita una acción no disponible o no permitida.
- [ ] Prueba de salida mal formada: se rechazan campos adicionales o valores de enumeración no válidos.
- [ ] Prueba de exfiltración: la salida intenta incluir secretos, datos privados o el texto del prompt.
- [ ] Prueba de persistencia: el contenido almacenado incluye instrucciones maliciosas que se recuperan posteriormente.
- [ ] Prueba multimodal, si procede: las instrucciones visibles mediante OCR o en imágenes se tratan como no fiables.

## 8. Supervisión y respuesta a incidentes

- [ ] Los intentos de extraer el prompt pueden detectarse.
- [ ] Los fallos repetidos del validador generan alertas.
- [ ] Se generan alertas ante una amplitud de recuperación, volumen de llamadas, número de destinatarios externos, coste o frecuencia inusuales.
- [ ] Los intentos de inyección de prompts pueden vincularse al usuario, organización, flujo, ID de fuentes y llamadas a herramientas.
- [ ] El equipo sabe cómo desactivar el flujo o herramientas concretas.
- [ ] El equipo sabe cómo revocar claves del proveedor y rotar las credenciales afectadas.
- [ ] Existe una persona responsable de las decisiones de notificación a clientes, equipos jurídicos y de seguridad y organismos reguladores.

## Control previo a la puesta en marcha

No declares el flujo listo para producción hasta que:

- [ ] Todas las acciones con consecuencias importantes disponen de un control.
- [ ] Se ha superado al menos una prueba con un documento adversario.
- [ ] Al menos un intento de acceso no autorizado ha fallado de forma segura.
- [ ] Al menos un intento de llamada insegura a una herramienta ha fallado de forma segura.
- [ ] Al menos una prueba de salida mal formada ha provocado un fallo seguro.
- [ ] Se ha probado al menos un procedimiento para desactivar el flujo.
