Software Consulting Services

OWASP Top 10 for LLM y Promptfoo

Tags: Tecnologías, IA
Compartir

Tabla de contenido

owasp

 

La integración de modelos de lenguaje grandes (LLM) en aplicaciones acelera la entrega de productos, pero introduce riesgos de seguridad críticos inherentes a una nueva tecnología y capa de abstracción que se añade a las arquitectura de solución de las aplicaciones. Por esto se requiere introducir nuevas herramientas de pruebas de seguridad enfocadas en LLM, donde Promptfoo emerge como herramienta open-source esencial para detectar vulnerabilidades en LLM mediante evaluaciones automatizadas y red teaming alineada con el estándar OWASP.

 

Marco teórico

 

La Inteligencia Artificial (IA) se define formalmente como sistemas que exhiben comportamiento inteligente autónomo: percepción, razonamiento, aprendizaje y acción en entornos no triviales. La IA como disciplina, busca crear sistemas que emulen el comportamiento humano y de la naturaleza. En DevSecOps, la IA ayuda en labores desde la construcción del código hasta threat modeling dinámico y priorización de vulnerabilidades.

 

La IA define dos tipos de sistemas:

 

  • Sistemas Basados en Reglas: Ejecución de lógica programada.
  • Sistemas de Aprendizaje: Sistemas que ajustan su comportamiento y aprenden patrones según los datos.

 

Dentro de los sistemas de aprendizaje, existen diversas ramas:

 

  • Algoritmos Genéticos: Inspirados en la evolución biológica y selección natural.
  • Lógica Difusa (Fuzzy Logic): Procesamiento de información imprecisa o parcial.
  • Sistemas Expertos Modernos: Capaces de razonar sobre bases de conocimiento.
  • Machine Learning: El núcleo de la IA moderna basado en modelos estadísticos.

 

Dentro del Machine Learning, existen niveles de complejidad técnica:

 

  • Modelos Lineales y Estadísticos: Regresiones y árboles de decisión (Random Forest).
  • Máquinas de Soporte Vectorial: Clasificación de datos en espacios de vectores de alta dimensión.
  • Redes Neuronales Artificiales: Modelos inspirados en la estructura biológica del cerebro.
  • Aprendizaje Profundo (Deep Learning): Redes neuronales de múltiples capas capaces de extraer características automáticamente.

 

Dentro del Deep Learning, se aplican los paradigmas de aprendizaje:

 

  • Aprendizaje Supervisado: Entrenamiento basado en conjuntos de datos etiquetados.
  • Aprendizaje No Supervisado: Identificación de estructuras y patrones en datos no etiquetados.
  • Aprendizaje por Refuerzo: Optimización mediante funciones de recompensa y castigo.
  • Aprendizaje Autosupervisado (Self-Supervised): El modelo genera sus propias etiquetas de datos.

 

Estos paradigmas se materializan a través de Arquitecturas Especializadas:

 

  • Redes Neuronales Convolucionales (CNN): Especializadas en visión artificial y procesamiento de imágenes.
  • Redes Neuronales Recurrentes (RNN/LSTM): Diseñadas para secuencias temporales y texto.
  • Arquitecturas de Energía (JEPA): Propuestas recientes para que la IA aprenda modelos del mundo como los humanos.
  • Transformers: Arquitectura basada en mecanismos de atención, lo que permite procesamiento paralelo de datos.

 

Los Modelos de Lenguaje Grandes (LLM) surgen como la implementación de la arquitectura Transformer, que permite procesar grandes volúmenes de datos en unidades de información llamadas tokens (fragmentos de palabras o caracteres). A diferencia de arquitecturas previas, los Transformers permiten el procesamiento paralelo y el entendimiento de relaciones contextuales de larga distancia.

 

La interacción con estos sistemas se realiza mediante lenguaje natural, pero su efectividad mejora drásticamente mediante la Ingeniería de Prompts (expresiones estructuradas). En el contexto de DevSecOps, esta capacidad permite que el modelo no solo "escriba código", sino que "entienda el contexto de seguridad" de una infraestructura completa. Esta habilidad puede usarse para extraer o inyectar datos en sistemas que usen LLM y causar fugas de datos o inyección de código malicioso.

 

Vulnerabilidades

 

Los LLM son sistemas autónomos que presentan una superficie de ataque que abarca desde la fuga de datos sensibles hasta la generación y ejecución de código y contenido audiovisual malicioso. Estos modelos presentan vulnerabilidades inherentes a su diseño como:

 

  • Naturaleza de caja negra: La falta de interpretabilidad del contexto en los billones de parámetros de un modelo dificulta la predicción exacta de sus respuestas ante entradas adversarias.
  • Indistinción entre datos e instrucciones: A diferencia de la computación tradicional que separa el código de los datos, los LLM procesan ambos al mismo tiempo, lo que facilita ataques de prompt injection.
  • Alucinaciones Estocásticas: La tendencia del modelo a generar información falsa pero coherente debido a su arquitectura basada en la predicción del siguiente token más probable.

 

Para sistematizar el estudio de estas debilidades, se han adoptado marcos de referencia como MITRE ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems), que enfoca el ciclo de vida del ataque, y taxonomías específicas como el OWASP Top 10 for LLM Applications, que prioriza los riesgos críticos en la integración de estos modelos en entornos productivos.

 

A continuación se listan los 10 riesgos más importantes sobre LLM de acuerdo con OWASP:

 

Riesgo OWASPDescripción BreveImpacto en desarrollo
LLM01: Prompt InjectionManipulación de las entradas del usuario para saltarse filtros o ejecutar instrucciones no autorizadas.Brechas en APIs protegidas y ejecución de código no deseado.
LLM02: Insecure Output HandlingAceptación ciega de la salida del LLM sin validación, permitiendo XSS, CSRF o inyecciones SQL.Vulnerabilidades en el frontend y ejecución de scripts maliciosos.
LLM03: Training Data PoisoningManipulación de los datos de entrenamiento para introducir sesgos o "backdoors" en el modelo.Pérdida de integridad del modelo y resultados éticamente comprometidos.
LLM04: Model Denial of ServiceSobrecarga del modelo mediante consultas complejas que consumen recursos excesivos.Degradación del servicio y aumento drástico de costos operativos.
LLM05: Supply Chain VulnerabilitiesUso de modelos, datasets o plugins de terceros que están comprometidos o son vulnerables.Compromiso total del pipeline y riesgos de seguridad heredados.
LLM06: Sensitive Information DisclosureRevelación inadvertida de datos confidenciales (PII) o secretos del sistema en las respuestas.Incumplimiento regulatorio (GDPR) y exposición de propiedad intelectual.
LLM07: Insecure Plugin DesignPlugins de LLM con control de acceso deficiente o que no validan las entradas.Exacerbación de Prompt Injection y acceso no autorizado a sistemas internos.
LLM08: Excessive AgencyOtorgar al LLM demasiados permisos o autonomía para actuar sobre otros sistemas.Acciones no deseadas en bases de datos o sistemas críticos sin supervisión.
LLM09: OverrelianceConfianza excesiva en la veracidad del LLM, ignorando "alucinaciones" o errores lógicos.Toma de decisiones erróneas y fallos de seguridad por código autogenerado defectuoso.
LLM10: Model TheftAcceso no autorizado para copiar o extraer los pesos y la lógica interna del modelo propietario.Pérdida de ventaja competitiva y compromiso de la propiedad intelectual.

 

Promptfoo - Escaneo de Vulnerabilidades en LLM

Para detectar estas vulnerabilidades en aplicaciones que utilicen cualquier modelo de LLM como parte del producto final a ser entregado a usuarios finales, existen herramientas como Promptfoo, la cual ejecuta un escaneo mediante prompts para verificar la existencia de estas vulnerabilidades anteriormente mencionadas e implementar controles mitigantes.

 

Promptfoo

 

Es una herramienta de escaneo y análisis de vulnerabilidades en IA que nació como un proyecto de código abierto (de ahí su disponibilidad en GitHub), pero en 2026 fue adquirida por OpenAI. Se espera que la herramienta continúe siendo de código abierto, de ahí que sea la herramienta propuesta para este artículo. A continuación, se desarrolla un caso de uso para esta herramienta.

 

Alistamiento del entorno

La herramienta funciona en sistemas Linux y tiene como dependencias Node.js (al menos versión 18) y su gestor de paquetes npm.

 

La herramienta está disponible en su repositorio oficial: https://github.com/promptfoo/promptfoo  O a través del gestor de paquetes npm.

 

Requisitos

  • Permiso para ejecutar pruebas sobre la aplicación.
  • Disponibilidad para consumir unos 4 millones de tokens en pruebas (esto puede significar consumos entre USD 1 y USD 120 dependiendo del modelo).
  • Credenciales de autenticación (usuario y contraseña).
  • Token de sesión (Bearer tokens, session cookies o API Keys).

 

Configuración

Promptfoo requiere de un archivo .yml en la carpeta de usuario para obtener las credenciales de autenticación, token de sesión y demás configuraciones requeridas para probar la aplicación.

 

La estructura de este archivo es la siguiente:

 

providers:
  - id: http
    config:
      url: https://dev.com/api/v1/chatbot/processes/chat
      method: POST
      headers:
        Content-Type: application/json
        Authorization: "Bearer XXX"
      body:
        question: "{{prompt}}"
prompts:
  - "{{prompt}}"
tests:
  - vars:
      prompt: "What is blockchain?"
    assert:
      - type: contains
        value: "distributed"

 

Consideraciones

  • La URL a escanear no es la URL de inicio de sesión, sino la URL de la API que expone el servicio LLM (por ejemplo, un chatbot).
  • Si existen múltiples endpoints, se deben ejecutar pruebas separadas para cada uno.
  • Los headers dependen del mecanismo de autenticación de la aplicación.
  • El body depende de la estructura de los requests de la API.
  • La definición de prompts: se mantiene como en el ejemplo para permitir la ejecución de pruebas.
  • El campo assert se utiliza para validar si la respuesta cumple con lo esperado.

 

Otros tipos de assert también pueden ser utilizados dependiendo del caso de prueba.

 

Assertions y Uso de Promptfoo

Tipos de Aserciones en Promptfoo

Aserción (Assertion)Qué verificaDescripción
containsContenido específicoVerifica que la salida incluya una cadena de texto (string) determinada.
not-containsExclusión de contenidoAsegura que la salida no incluya una cadena de texto específica (útil para evitar menciones de competidores o lenguaje prohibido).
regexExpresión regularValida que la salida cumpla con un patrón de formato definido (ej. correos electrónicos, fechas o estructuras de código).
latencyLatenciaComprueba que la respuesta se haya generado dentro de un tiempo límite de X milisegundos.
costCostoGarantiza que el costo de la llamada a la API se mantenga por debajo de un umbral específico de presupuesto.

Ejecución de pruebas

 

Para ejecutar el test se utiliza el comando promptfoo eval. Si los tests tienen éxito, entonces es posible ejecutar las pruebas reales. En otro caso, es necesario realizar troubleshooting sobre el archivo de configuración.

 

Luego se ejecuta el comando promptfoo redteam init, el cual genera un script de configuración para red teaming usando la estructura del archivo .yml de prueba previamente definido.

 

De esta manera, la herramienta construye un nuevo script con pruebas sugeridas, que se guardan en el archivo redteam.yml.

 

Con el comando promptfoo redteam run, se ejecuta la prueba, la cual puede durar más de una hora.

 

Finalmente, con el comando promptfoo view, se levanta un servidor local que permite visualizar los hallazgos de forma interactiva en: http://localhost:15500/eval 

 

Promptfoo es una herramienta muy útil en la evaluación de la postura de seguridad de aplicaciones dentro de un ciclo DevSecOps. Es fácilmente integrable en pipelines CI/CD y permite reducir el riesgo de caja negra inherente a los LLM.

 

Además, dota a los desarrolladores y equipos de producto con información clave para mitigar comportamientos no esperados o indeseados en aplicaciones que utilizan modelos de lenguaje.

 

Su implementación reduce significativamente la superficie de ataque en fases tempranas (shift-left), funcionando como un control preventivo automatizado que mitiga riesgos de fuga de información y asegura el cumplimiento regulatorio antes del despliegue en producción.

 

Asimismo, contribuye a alinear el comportamiento del modelo con las directrices de OWASP y los marcos legales vigentes.