Seguridad

A08:2021 – Software and Data Integrity Failures


En este capítulo del OWASP Top Ten, vamos a hablar de la vulnerabilidad A08:2021 – Software and Data Integrity Failures o en español A08:2021 – Fallos en el software y en la integridad de los datos.

Descripción de la vulnerabilidad

Este tipo de vulnerabilidad se manifiesta cuando la aplicación no está protegida adecuadamente contra la manipulación de datos críticos o componentes del software, lo que puede dar lugar a alteraciones en los datos, ataques de suplantación o la inyección de código no autorizado. Esta categoría incluye específicamente riesgos como la falta de integridad en actualizaciones de software, bibliotecas externas o configuraciones críticas de datos.

Impacto

El impacto de esta vulnerabilidad en los sistemas y aplicaciones donde está presente incluye lo siguiente:

  • Inyecciones de código: Los atacantes pueden comprometer el software y las aplicaciones inyectando código que se ejecuta en el sistema. Esto podría resultar en acceso no autorizado, filtración de datos o alteración de la funcionalidad del sistema.
  • Compromiso de la cadena de suministro del software: Si un atacante consigue comprometer una dependencia o biblioteca utilizada por múltiples organizaciones, el impacto puede ser amplio, afectando a numerosas aplicaciones que dependen de dicho componente.
  • Ataques de escalada de privilegios o denegación de servicio: Es posible modificar configuraciones críticas del sistema o introducir vulnerabilidades que permitan elevar privilegios, comprometiendo la infraestructura o impidiendo su correcto funcionamiento.

Relación con otras vulnerabilidades de OWASP Top Ten

  • A06:2021 – Vulnerable and Outdated Components: Esta vulnerabilidad está estrechamente relacionada con el uso de componentes inseguros o desactualizados, ya que la falta de integridad del software a menudo involucra dependencias vulnerables.
  • A07:2021 – Identification and Authentication Failures: Si las configuraciones de autenticación no están adecuadamente protegidas, los atacantes pueden aprovechar fallos en la integridad de los datos para manipular estos mecanismos.
  • A09:2021 – Security Logging and Monitoring Failures: La falta de una monitorización adecuada puede hacer que los errores en la integridad del software o los datos pasen desapercibidos, incrementando el riesgo de explotación.

Ejemplo práctico

Deserialización Insegura

La deserialización insegura se produce cuando un sitio web deserializa datos controlados por el usuario. Esto puede permitir que un atacante manipule objetos serializados para introducir datos maliciosos en el código de la aplicación.

En algunos casos, el atacante puede reemplazar un objeto serializado por uno de una clase completamente diferente. Lo preocupante es que cualquier objeto de una clase disponible en el sitio web será deserializado e instanciado, sin importar la clase que originalmente se esperaba. Por esta razón, la deserialización insegura también se conoce como una vulnerabilidad de «inyección de objetos».

Un objeto de una clase inesperada podría generar una excepción, pero en muchos casos el daño ya se habrá producido. De hecho, muchos ataques basados en la deserialización se completan antes de que finalice el proceso. Esto significa que el propio proceso de deserialización puede desencadenar el ataque, incluso si la funcionalidad del sitio web no interactúa directamente con el objeto malicioso. Por lo tanto, los sitios web que utilizan lenguajes con tipado estricto también pueden ser vulnerables a estas técnicas.

Manipulación de objetos serializados

Explotar algunas vulnerabilidades de deserialización puede ser tan simple como modificar un atributo en un objeto serializado. Dado que el estado del objeto se conserva, es posible analizar los datos serializados para identificar y cambiar los valores de atributos relevantes. Luego, el objeto malicioso se puede enviar al sitio web a través de su proceso de deserialización. Este es el paso inicial en un ataque básico de deserialización.

En términos generales, existen dos enfoques para manipular objetos serializados. Se puede editar el objeto directamente en su forma de flujo de bytes, o bien escribir un pequeño script en el lenguaje correspondiente para crear y serializar el nuevo objeto por cuenta propia. Este último enfoque suele ser más sencillo cuando se trabaja con formatos de serialización binaria.

Modificación de los atributos de los objetos serializados

Al manipular los datos, siempre que el atacante conserve un objeto serializado válido, el proceso de deserialización creará un objeto en el servidor con los valores de los atributos modificados.

A modo de ejemplo, Se accede a una web con credenciales de usuario sin privilegios válidas y la web genera una cookie de sesión, como se puede observar en la siguiente imagen:

A continuación, si se accede a la sección de la aplicación donde están los datos de la cuenta del usuario mediante el método HTTP GET, se observa como la cookie de sesión también es enviada.


Esta cookie de sesión se envía en base64 con codificación URL, por lo tanto, si se deserializa es posible ver los objetos y los campos que se envían en ella.


Analizando la cookie en texto plano, se puede observar que el objeto «admin» es de tipo booleano y tiene como valor 0, es decir, usuario sin privilegios. Viendo esto, es posible que la aplicación web detecte si un usuario tiene o no privilegios debido a ese parámetro.

Si ahora se modifica el valor booleano de «admin» de 0 a 1 y se realiza la petición, al no tener un mecanismo de control de los datos serializados que evite la modificación de estos por parte del usuario, será posible elevar privilegios a Administrador y, por tanto, acceder al panel de administración de la web.


Mitigaciones

Las mitigaciones recomendadas por OWASP para minimizar el impacto de esta vulnerabilidad son las siguientes:
  • Utilizar firmas digitales o mecanismos similares para verificar que el software o los datos proceden de la fuente original y no han sido alterados.
  • Hay que asegurar que las bibliotecas y dependencias, como npm o Maven, se obtienen de repositorios de confianza. Si la aplicación tiene un perfil de riesgo elevado, se puede considerar alojar un repositorio interno de confianza.
  • Utilizar herramientas de seguridad para la cadena de suministro de software, como OWASP Dependency Check u OWASP CycloneDX, para verificar que los componentes no contienen vulnerabilidades conocidas.
  • Establecer un proceso de revisión de los cambios en el código y la configuración para minimizar la posibilidad de introducir código o configuraciones maliciosas en el pipeline.
  • Asegurar que el pipeline CI/CD cuente con la segregación, configuración y control de acceso adecuados para garantizar la integridad del código que fluye a través de los procesos de construcción y despliegue.
  • Garantizar que los datos serializados sin firmar o sin cifrar no se envíen a clientes no fiables sin algún tipo de comprobación de integridad o firma digital para detectar la manipulación o reproducción de los datos serializados.


Conclusiones

La vulnerabilidad A08:2021 – Software and Data Integrity Failures es un riesgo crítico que compromete la seguridad de las aplicaciones cuando no se aseguran adecuadamente los mecanismos que garantizan la autenticidad y fiabilidad del software y los datos. 

Para prevenir esta vulnerabilidad, es fundamental implementar medidas como el uso de firmas digitales, la gestión segura de dependencias y bibliotecas de software, la protección de configuraciones críticas y la integración de controles de seguridad a lo largo del ciclo de vida del desarrollo, aumentando así la integridad de los datos de la aplicación.

Justo Martin, Analista de Ciberseguridad en Zerolynx.

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.