Vulnerabilidad Insecure deserialization

 

www.onlinetis.com

La vulnerabilidad de la deserialización insegura (Insecure deserialization) ocurre cuando una aplicación web deserializa datos no confiables o manipulados por un atacante. La deserialización es el proceso de tomar datos estructurados, como un objeto serializado en un archivo o una cadena de texto, y reconstruirlo en un objeto ejecutable en la memoria. Si una aplicación no valida la entrada durante este proceso, un atacante puede inyectar un objeto malicioso que, al ser deserializado, ejecuta código no deseado en el servidor, lo que puede llevar a una toma de control completa del sistema.


Riesgos y tipos de ataques ☠️

La deserialización insegura es una vulnerabilidad crítica porque la ejecución de código puede ser tan simple como modificar un valor en el objeto serializado. Los riesgos principales incluyen:

  • Ejecución remota de código (RCE): El atacante puede ejecutar comandos arbitrarios en el servidor, lo que le permite instalar malware, robar datos sensibles, o tomar control total del sistema.

  • Ataques de denegación de servicio (DoS): Un atacante puede enviar datos serializados que causen que la aplicación entre en un bucle infinito, consuma todos los recursos de la CPU o la memoria, y colapse.

  • Elevación de privilegios: Si el atacante puede inyectar un objeto que se deserializa con permisos de administrador, podría acceder a funcionalidades restringidas.

La vulnerabilidad puede manifestarse de diferentes maneras según el lenguaje de programación y la biblioteca utilizada. Por ejemplo, en Java, se pueden explotar clases con métodos readObject mal implementados. En PHP, los atacantes pueden utilizar las funciones unserialize() para inyectar objetos con métodos mágicos como __wakeup() o __destruct(), que se ejecutan automáticamente al deserializar.


Prevención ✅

Para mitigar esta vulnerabilidad, es fundamental implementar las siguientes medidas:

  • Evitar deserializar datos no confiables: La mejor práctica es nunca deserializar datos que provengan de fuentes no confiables o que puedan ser manipulados por usuarios.

  • Utilizar formatos de datos seguros: Preferir formatos de datos que no admitan la serialización de objetos complejos y que sean más fáciles de validar, como JSON o XML.

  • Limitar los tipos de objetos: Si es necesario deserializar, la aplicación debe restringir explícitamente los tipos de objetos que se pueden reconstruir, para evitar que el atacante inyecte un objeto malicioso de un tipo no permitido.

  • Firmar los datos serializados: Utilizar firmas digitales para asegurar que los datos no hayan sido alterados desde que fueron serializados en el servidor.

  • Actualizar bibliotecas: Mantener las bibliotecas de serialización y deserialización actualizadas para protegerse de vulnerabilidades conocidas.

Entradas populares de este blog

Ciberseguridad y hacking con Whatweb

Como robar contraseñas haciendo un phishing web

Arsenal software hacking NFC