Después de un entendimiento completo de la serialización a lo largo de diferentes lenguajes de programación, transicionaremos ahora a un aspecto crítico de la ciberseguridad, explotando y mitigando vulnerabilidades relacionadas a la serialización. Antes de ver las técnicas de explotación es necesario aprender a identificar estas vulnerabilidades en las aplicaciones, ya tengamos acceso al código o no.
Acceso al Código Fuente
Cuando tenemos acceso al código fuente, identificar las vulnerabilidades de serialización puede ser más directo, pero requiere un buen entendimiento de dónde y qué buscar. Por ejemplo en busca de funciones como serialize(), unserialize() o pickle.loads(). Debemos prestar especial atención a cualquier punto donde el input del usuario sea pasado directamente a estas funciones.
Sin Acceso al Código Fuente
Al auditar una aplicación sin acceso al código fuente, el reto recae en deducir cómo se procesa la información basado en observaciones e interacciones externas. Esto es comúnmente conocido como black-box testing. Una técnica bastante usada para intentar acceder a backups o archivos temporales creados por editores de texto es añadir ~ al final de un archivo PHP.
Analizando Respuestas del Servidor
- Mensajes de error: Ciertos mensajes de error pueden indicar indirectamente problemas con las serialización. Por ejemplo, PHP puede que mande errores o avisos que contengan frases como
unserialize()u Object deserialisation error que revela procesos de serialización y puntos de vulnerabilidad potenciales. - Inconsistencias en el comportamiento de la aplicación: Desde comportamiento inesperado en la respuesta hasta input manipulado, pueden sugerir problemas con cómo se deserializa y maneja la información. Observar cómo maneja información serializada alterada la aplicación puede ofrecer pistas sobre código potencialmente vulnerable.
Examinando Cookies
Las cookies se suelen usar para guardar información serializada en aplicaciones web. Examinando los contenidos de la cookie podemos soler inferir:
- Valores base64 encodeados en cookies (PHP y .NET): Si las cookies contienen información que se ve como base64 encoded, decodearla puede revelar objetors o estructuras de datos serializazdos. PHP suele usar serialización para manejo de sesiones y guardar variables de sesión en formato serializado.
- View State ASP.NET: Las aplicaciones .NET puede que usen la serialización en el view state mandado al navegador del cliente. Un campo llamado
__VIEWSTATE, que está base64 encodeado, puede verse a veces. Decodearlo y examinarlo puede revelar si contiene datos serializados potencialmente explotables.
