Tema 10

10. A08: Software and Data Integrity Failures

Una aplicación no solo debe procesar datos y ejecutar código; también debe confiar correctamente en el origen, la integridad y la legitimidad de aquello que consume y despliega. Cuando esa confianza está mal planteada, un atacante puede introducir artefactos manipulados, abusar de procesos automáticos o lograr que el sistema ejecute contenido que nunca debió aceptar.

Objetivo Entender cómo se rompe la confianza en software y datos
Enfoque Artefactos, updates, CI/CD y deserialización
Resultado Ver la integridad como una capa crítica de seguridad

10.1 Introducción

Una aplicación moderna consume paquetes, plugins, configuraciones, archivos serializados, actualizaciones, imágenes de contenedor, scripts de automatización y resultados de pipelines. En todos esos puntos existe una pregunta de fondo: ¿el sistema está confiando en algo que realmente debería confiar?

OWASP agrupa bajo Software and Data Integrity Failures aquellas debilidades donde la aplicación o sus procesos aceptan software, datos o artefactos sin verificar adecuadamente su legitimidad, integridad o procedencia. Esto incluye desde procesos inseguros de actualización hasta deserialización peligrosa y pipelines capaces de introducir cambios no confiables en producción.

Esta categoría es importante porque muestra una realidad central: la seguridad no se rompe solo cuando entra un dato malicioso por un formulario. También se rompe cuando el sistema confía ciegamente en lo que ejecuta, despliega o interpreta como válido.

10.2 Qué significa integridad en este contexto

La integridad se refiere a la garantía de que un artefacto, dato o componente no fue alterado indebidamente y proviene de una fuente legítima dentro del flujo esperado. En términos prácticos, significa poder responder con confianza preguntas como estas:

  • ¿Este paquete es realmente el que queríamos usar?
  • ¿Este update no fue manipulado?
  • ¿Este pipeline está construyendo exactamente lo que creemos?
  • ¿Este objeto serializado debe ser aceptado y procesado?
  • ¿Este archivo o configuración fue modificado fuera del flujo autorizado?

Cuando esas respuestas son débiles, la aplicación queda expuesta a ejecución de código, manipulación del despliegue o comportamiento inesperado con impacto severo.

10.3 Confianza implícita: el problema de fondo

Muchas fallas de esta categoría nacen de una confianza implícita no revisada. El sistema asume que cierto software, artefacto o dato es legítimo solo porque llegó desde un canal habitual o porque forma parte de un proceso automatizado.

Esa confianza puede ser riesgosa cuando:

  • No se verifica origen ni integridad del artefacto.
  • El pipeline puede ser modificado por actores no previstos.
  • Se aceptan objetos complejos del cliente sin validación fuerte.
  • Las actualizaciones se consumen automáticamente sin suficiente control.
Automatizar no equivale a asegurar. Un proceso automático mal protegido puede introducir compromiso a gran velocidad y escala.

10.4 Integridad de software y cadena de suministro

El software que una aplicación ejecuta no proviene de una sola fuente. Llega a través de repositorios, dependencias, herramientas de build, imágenes base, artefactos compilados y pipelines de entrega. Cada uno de esos pasos puede alterar lo que finalmente se ejecuta en producción.

Por eso la integridad de software se conecta directamente con la seguridad de la cadena de suministro. El riesgo no es solo que un componente tenga una vulnerabilidad conocida, sino que un artefacto o una actualización pueda ser manipulado antes de llegar al entorno final.

10.5 Actualizaciones automáticas y confianza excesiva

Las actualizaciones automáticas pueden ser útiles para reducir exposición temporal frente a bugs o vulnerabilidades, pero si se implementan sin validación suficiente también pueden introducir software no confiable o cambios no controlados.

El problema no es actualizar automáticamente en sí, sino hacerlo sin:

  • Verificación de procedencia.
  • Controles de integridad del artefacto.
  • Aprobaciones o validaciones según criticidad.
  • Pruebas razonables previas al despliegue.

Cuando el proceso de update se trata como una caja negra confiable por defecto, el riesgo se desplaza desde la aplicación hacia todo el mecanismo de suministro.

10.6 Pipelines CI/CD como superficie de ataque

Los pipelines de integración y despliegue continuo aceleran el desarrollo moderno, pero también concentran mucho poder. Un pipeline comprometido puede modificar artefactos, inyectar código, alterar configuraciones o desplegar software malicioso con apariencia legítima.

Desde seguridad, un pipeline debe considerarse infraestructura crítica porque puede:

  • Construir lo que irá a producción.
  • Consumir secretos y credenciales sensibles.
  • Publicar imágenes, binarios o paquetes.
  • Ejecutar scripts con permisos significativos.

10.7 Riesgos frecuentes en CI/CD

  • Credenciales de pipeline expuestas o demasiado amplias.
  • Jobs modificables por actores sin suficiente control.
  • Artefactos no firmados ni verificados.
  • Dependencia de scripts externos no revisados.
  • Despliegues automáticos a producción sin validación apropiada.
  • Falta de trazabilidad sobre qué build llegó realmente al entorno final.

Esto convierte la integridad del pipeline en una pieza central de la seguridad operativa.

10.8 Deserialización insegura

Uno de los ejemplos clásicos dentro de esta categoría es la deserialización insegura. La serialización permite representar objetos o estructuras para almacenarlos o transmitirlos. El problema aparece cuando la aplicación acepta esos datos serializados desde una fuente no confiable y los reconstruye como objetos complejos sin controles adecuados.

En ciertos entornos, eso puede permitir:

  • Alterar el estado lógico de la aplicación.
  • Manipular flujos internos.
  • Provocar ejecución inesperada de código o comportamientos peligrosos.
  • Desencadenar cadenas complejas dentro de librerías o runtimes.

10.9 Por qué la deserialización es tan peligrosa

La deserialización insegura es especialmente delicada porque la aplicación no solo lee datos: reconstruye estructuras que pueden tener semántica interna rica, relaciones de objetos o comportamientos asociados. Si se hace sobre información controlada por el atacante, el problema puede ir mucho más allá de un dato alterado.

Además, suele ser difícil de detectar superficialmente porque el flujo puede estar oculto detrás de cookies firmadas incorrectamente, cachés, colas, sesiones persistidas o integraciones entre servicios.

10.10 Integridad de datos versus integridad de software

Aunque están relacionadas, conviene diferenciar ambas dimensiones.

Tipo de integridad Qué protege Ejemplo de riesgo
Integridad de software Artefactos, paquetes, builds, imágenes, actualizaciones Despliegue de software manipulado
Integridad de datos Objetos, archivos, configuraciones, estados serializados Procesamiento de datos alterados como si fueran confiables

En ambos casos el problema central es confiar sin validar adecuadamente.

10.11 Plugins, extensiones y ejecución de código dinámico

Algunas aplicaciones permiten cargar complementos, plantillas, scripts o reglas configurables. Esa flexibilidad puede ser útil para el negocio, pero aumenta el riesgo si el sistema no controla bien quién puede introducir esos artefactos y cómo se verifica su legitimidad.

La pregunta clave es simple: ¿el sistema está ejecutando algo que puede haber sido alterado fuera del flujo de confianza previsto?

10.12 Webhooks, integraciones y confianza entre sistemas

Muchas aplicaciones confían en datos que llegan desde otros sistemas mediante webhooks, sincronizaciones, colas o APIs internas. Si esa confianza no se protege bien, el atacante puede falsificar origen, alterar contenido o abusar de integraciones para modificar comportamiento.

Esto puede afectar:

  • Eventos de pago o facturación.
  • Confirmaciones de estados externos.
  • Actualización de perfiles o permisos.
  • Procesamiento de documentos o archivos.

La integridad aquí no solo depende del dato, sino del canal y de la autenticidad del emisor.

10.13 Artefactos firmados y verificación de integridad

Una forma de fortalecer esta categoría es incorporar mecanismos que permitan verificar que artefactos y actualizaciones provienen de fuentes legítimas y no fueron alterados. Esto puede incluir firmas, checksums, trazabilidad de build y validaciones dentro del flujo de despliegue.

Lo importante no es solo generar esas evidencias, sino asegurarse de que realmente se verifiquen antes de consumir o desplegar el artefacto.

10.14 El riesgo de confiar en "interno = seguro"

Un error de diseño frecuente consiste en asumir que todo lo que llega desde un sistema interno, una red privada o un pipeline corporativo es automáticamente confiable. Esa suposición es peligrosa porque un compromiso interno puede propagarse con gran impacto si no existen verificaciones adicionales.

En seguridad moderna, lo interno no equivale a confiable por definición. La confianza debe justificarse y verificarse.

10.15 Ejemplos típicos de esta categoría

  • Pipeline CI/CD capaz de desplegar sin controles de integridad adecuados.
  • Aplicación que consume artefactos o scripts no verificados.
  • Procesamiento de objetos serializados provenientes de entradas no confiables.
  • Actualizaciones automáticas sin validación de origen e integridad.
  • Integraciones que aceptan eventos externos sin autenticidad suficiente.
  • Plugins o componentes dinámicos cargados sin control fuerte.

10.16 Impacto posible

Las fallas de integridad pueden ser especialmente graves porque afectan directamente aquello que la aplicación ejecuta o interpreta como confiable.

Falla Impacto posible
Deserialización insegura Manipulación de lógica interna o ejecución no prevista
Pipeline comprometido Despliegue de código malicioso o alterado
Actualización no verificada Introducción de software no confiable
Integración sin validación fuerte Aceptación de eventos o datos falsificados

10.17 Señales que justifican revisión inmediata

  • La aplicación ejecuta o carga artefactos obtenidos sin verificación robusta.
  • Los pipelines tienen secretos poderosos y poca segregación de funciones.
  • Se aceptan objetos complejos del cliente o de canales poco controlados.
  • Las actualizaciones son automáticas y no hay validación trazable de integridad.
  • No existe claridad sobre qué build exacta está en producción.
  • Se confía demasiado en origen interno sin autenticidad adicional.

10.18 Buenas prácticas de prevención

La prevención de esta categoría exige disciplina tanto de desarrollo como de operación.

  • Verificar integridad y procedencia de artefactos antes de consumirlos.
  • Proteger pipelines CI/CD como infraestructura crítica.
  • Restringir quién puede modificar jobs, scripts y configuraciones de despliegue.
  • Evitar deserializar datos no confiables en estructuras complejas cuando no sea imprescindible.
  • Autenticar y validar integraciones entre sistemas.
  • Mantener trazabilidad clara entre código fuente, build y despliegue.

10.19 Menos confianza implícita, más validación explícita

Una regla útil para esta categoría es reducir la confianza implícita en procesos automáticos, redes internas y artefactos heredados. Cuanto más crítico sea lo que se ejecuta o despliega, más fuerte debe ser la validación previa.

Esto no significa frenar todo con burocracia, sino diseñar controles proporcionales al poder que tiene cada artefacto o flujo.

10.20 Errores frecuentes en la remediación

  • Confiar en checksums o firmas pero no verificarlos realmente en el proceso.
  • Proteger el código fuente pero descuidar el pipeline de despliegue.
  • Asumir que "interno" equivale a seguro.
  • Corregir un caso de deserialización puntual sin revisar patrones equivalentes.
  • No limitar el alcance de secretos usados por automatización.
  • Ignorar integridad de configuraciones y scripts auxiliares.

10.21 Relación con otras vulnerabilidades

Software and Data Integrity Failures suele combinarse con otras categorías del curso.

  • Con Vulnerable Components, si la cadena de suministro introduce componentes inseguros.
  • Con Security Misconfiguration, si pipelines o artefactos quedan innecesariamente expuestos.
  • Con Injection, si ciertos datos manipulados terminan siendo interpretados como control.
  • Con Logging Failures, si no hay trazabilidad para reconstruir qué artefacto fue desplegado o modificado.

Esto muestra que la integridad no es un tema aislado; atraviesa la forma en que el sistema construye y mantiene su propia confianza.

10.22 Qué debes recordar de este tema

  • La integridad afecta tanto software como datos, artefactos y procesos automáticos.
  • Actualizar, construir o desplegar sin verificación suficiente puede introducir compromiso grave.
  • Los pipelines CI/CD son activos críticos y deben protegerse como tales.
  • La deserialización insegura es un ejemplo clásico de confianza excesiva en datos complejos.
  • Lo interno o automatizado no debe considerarse confiable por defecto.
  • La trazabilidad entre código, build y despliegue es parte de la seguridad.
  • La validación explícita debe reemplazar la confianza implícita en flujos críticos.

10.23 Conclusión

Software and Data Integrity Failures nos obliga a mirar más allá del código de negocio y a revisar la confianza que la aplicación deposita en artefactos, actualizaciones, datos estructurados y procesos de automatización. Cuando esa confianza está mal diseñada, el problema puede llegar directamente al corazón del sistema: aquello que ejecuta, despliega o considera legítimo.

En el próximo tema estudiaremos A09: Security Logging and Monitoring Failures, centrado en qué ocurre cuando una organización no logra ver, registrar ni responder a tiempo ante actividad sospechosa o compromisos en curso.