Deserialización insegura: Riesgos asociados con la deserialización y cómo proteger tus datos

Cuando hablamos de deserialización en ciberseguridad nos referimos al proceso por el cual se toma un conjunto de datos previamente serializados, es decir, convertidos en un formato estructurado como JSON, XML o binario y se convierten de nuevo en un objeto o estructura de datos usable por una aplicación. 

La deserialización es una práctica común dentro de la programación, sin embargo, si no se hace adecuadamente, puede convertirse en una vulnerabilidad para el sistema o infraestructura informática. 

¿Qué puede ocurrir si no se hace correctamente una deserialización? 

Cuando la deserialización no se hace correctamente ni se implementa de forma segura, esto puede provocar un ataque conocido como “vulnerabilidad de deserialización insegura” (insecure deserialization). Este tipo de ciberataque puede ejecutarse cuando: 

  • Un ciberdelincuente envía datos manipulados o maliciosos que serán procesados por la aplicación durante la deserialización. 
  • En caso de que la deserialización se realice de forma automática, un ciberdelincuente puede aprovecharlo para ejecutar comandos maliciosos.
  • Un ciberdelincuente inyecta un objeto no esperado en los datos, alterando el comportamiento del programa.
  • Un ciberdelincuente bloquea el acceso a los datos.

Un ejemplo de deserialización insegura podría suceder con las bibliotecas de Java. Estas permiten la deserialización de objetos de manera dinámica. Un ciberdelincuente puede enviar objetos maliciosos, como instancias que ejecutan código arbitrario. 

Ejemplo seguro: 

Vs ejemp

Otro caso lo encontramos con lenguajes de programación como PHP y Python. Estos también cuentan con funciones para serializar y deserializar datos, pero si no se validan correctamente, podrían ejecutarse scripts no deseados o incluso comandos del sistema.

Un poco más sobre las vulnerabilidades de deserialización

Las vulnerabilidades de deserialización son una categoría de ciberamenazas donde las cargas de solicitud se procesan sin seguridad. Un ciberdelincuente que sepa cómo aprovechar estas vulnerabilidades en una aplicación puede provocar ataques por denegación de servicio (DDoS), la divulgación de información o la ejecución remota de código dentro de la aplicación destino.

Prevención frente a vulnerabilidades de deserialización

Evita la deserialización de datos no confiables

No deserialices datos provenientes de fuentes no confiables, como pueden ser entradas de usuarios, archivos externos o respuesta de terceros, sobre todo si no se puede verificar su seguridad. 

En caso de tener que deserializar datos externos, aplícale controles y validaciones estrictas.  

Usa formatos de datos más seguros 

Escoge formatos de datos simples y no ejecutables como por ejemplo JSON o XML en vez de formatos binarios que pueden incluir objetos complejos. 

Los formatos simples normalmente no permiten la inclusión de código ejecutable ni objetos inseguros. 

Implementa listas blancas de clases permitidas

Define explícitamente las clases o tipos de objetos permitidos durante la deserialización.

Por ejemplo, en Java puedes usar bibliotecas como Kryo o XStream para limitar las clases que se pueden deserializar.

Evita la deserialización de clases genéricas o dinámicas que puedan permitir la ejecución de métodos inseguros.

Deshabilitar o limitar la ejecución de código durante la deserialización


Algunas bibliotecas o marcos permiten la ejecución de constructores, métodos o inicializadores durante la deserialización. Deshabilita estas características si es posible. 

Validación estricta de datos


Es importante comprobar la estructura del  contenido (tamaño, formato, campos esperados, etc.). Además, rechazar cualquier dato que no cumpla con las expectativas. 

Aplicar sandboxing o aislamiento


Procesa los datos deserializados en un entorno controlado y aislado para minimizar el impacto a posibles ataques. 

Puedes usar contenedores o entornos de ejecución limitados para evitar que los atacantes obtengan acceso al sistema completo. 

Usa bibliotecas y frameworks seguros


Utiliza bibliotecas de serialización modernas que estén diseñadas con medidas de seguridad como por ejemplo: Jackson (Java), Gson(Java), protobuf (Protocol Buffers) o MessagePack.

Monitoriza y registra actividades sospechosas


Implementa sistemas de registro que detecten comportamientos inusuales durante el proceso de deserialización.

Aplica parches y actualizaciones


Mantén actualizados los frameworks, bibliotecas y lenguajes de programación utilizados, ya que las vulnerabilidades conocidas se corrigen con frecuencia.

Realiza pruebas y auditorías de seguridad


Realiza auditorías y análisis estáticos y dinámicos de tu código para identificar posibles puntos de deserialización no seguros.

Usa herramientas de análisis de vulnerabilidades como: Burp Suite, OWASP ZAP o escáneres especializados en deserialización insegura.

Utiliza el cifrado y la autenticación de datos


Si necesitas deserializar datos sensibles o externos, utiliza cifrado y/o firmas digitales para garantizar la integridad y autenticidad de los datos.

Esto asegura que los datos no hayan sido manipulados por atacantes antes de deserializarlos.

A modo de resumen

  • Evitar la deserialización de datos no confiables: No aceptar datos serializados de usuarios, redes no seguras, o fuentes externas sin validación estricta.
  • Validación de datos: Comprobar y filtrar datos antes de procesarlos.
  • Uso de bibliotecas seguras: Implementar métodos de deserialización que no permitan ejecutar código dinámico.
  • Implementación de un control estricto de objetos: Limitar qué clases u objetos pueden deserializarse.

La deserialización insegura es una amenaza seria en ciberseguridad porque puede llevar a ejecución remota de código (RCE), comprometiendo todo el sistema. Por eso, es fundamental manejar con cuidado cualquier operación de deserialización, especialmente cuando proviene de fuentes externas.

Suscríbete a nuestro blog
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Escanear mi website gratis