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:
Mitigaciones
- 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
Powered by WPeMatico