Portada » Home » Buenas prácticas de desarrollo seguro: A8 – Deserialización insegura

Buenas prácticas de desarrollo seguro: A8 – Deserialización insegura

Estos defectos ocurren cuando una aplicación recibe objetos serializados dañinos y estos pueden ser manipulados por el atacante para realizar ataques de repetición, inyecciones o modificar sus privilegios de ejecución. En el peor de los casos, la deserialización insegura puede conducir a la ejecución remota de código en el servidor.

Elvin Mollinedo, presidente de OWASP Bolivia, estuvo con nosotros y aprovechamos de conversar sobre esta vulnerabilidad, la cual analizamos a continuación:

Primero ¿Qué es la serialización?

La serialización es el proceso de codificación de un objeto (como un archivo o buffer de memoria) en una secuencia de bytes para almacenarlo o transmitirlo a un dispositivo o base de datos en un formato legible como JSON o XML (entre otros).

Deserialización

La falla de seguridad de deserialización que se analiza en el Top10, nos explica que los datos serializados (que el atacante envía al servidor de consumo de servicios) hacen que se ejecute, al momento de deserializar, un código arbitrario (malicioso).

El riesgo de esta falla de seguridad es que el atacante, gracias al código malicioso, puede tomar control del servidor remotamente u obtener información de este. En específico serían los siguientes ataques:

  • Ataques relacionados con la estructura de datos y objetos donde el atacante modifica la lógica de la aplicación o logra una ejecución remota de código si existen clases disponibles para la aplicación que pueden cambiar el comportamiento durante o después de la deserialización.
  • Ataques típicos de manipulación de datos, como ataques relacionados con el control de acceso en los que se utilizan estructuras de datos existentes pero se modifica su contenido.

Un ejemplo sería:

Un foro PHP utiliza serialización de objetos PHP para almacenar una cookie, conteniendo el ID, rol, hash de la contraseña y otros estados del usuario:

a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

Un atacante modifica el objeto serializado para darse a si mismo los privilegios de administrador:

a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

(fuente: OWASP)

Esta vulnerabilidad es una de las más actuales, debido al consumo de servicio que realizan las apps de celulares (IOS – Android) y las webs más modernas (Vue.js, Node.js, laravel, ruby on rails).

Recomendaciones

·Debe realizarse un parseo validado del formato del serializado antes de deserializar.

·Integrar firmas digitales a los objetos serializados con el fin de detectar modificación no autorizada.

·Aísla el código que realiza la deseralización, de modo que se ejecute en un entorno con los mínimos privilegios posibles, en este caso, el atacante no podría tener muchos privilegios si ingresa al servidor.

·Monitorear las conexiones de red entrantes y salientes desde contenedores o servidores que utilizan funcionalidades de deserialización.

More Reading

Post navigation