
Demostración educativa de deserialización insegura de Node.js (CVE-2017-5941) con inyección de payload basada en cookies y explotación de reverse shell para entrenamiento en seguridad.
Node.js es un entorno de ejecución de código abierto utilizado para implementar funcionalidad de servidor en JavaScript.
Un paquete de software específico dentro de Node.js contiene una función vulnerable que maneja la deserialización, lo que provoca que ejecute comandos no autorizados si el cliente proporciona una cookie especialmente diseñada.
Esta vulnerabilidad fue replicada y puede potencialmente lanzar una shell inversa, lo cual es posible debido a los datos de entrada no sanitizados que se leen de una cookie en la solicitud de un cliente. El cliente puede editar sus cookies, inyectar un payload inseguro que contenga un comando bash y enviarlo al servidor, donde este ejecutará el comando ciegamente. Esto puede llevar a que usuarios no autorizados accedan a bases de datos o a máquinas completas.
Las implicaciones éticas de este tipo de vulnerabilidad residen en los datos a los que se puede acceder en las bases de datos del servidor backend. Dependiendo de los datos, esto puede ser perjudicial para la seguridad de un usuario y puede afectar la confiabilidad y reputación de una empresa. Por ello, encontrar las vulnerabilidades antes que otros atacantes es importante. Existen diversas herramientas disponibles como Snyk, Burp Suite y otras opciones de pago para identificar estas vulnerabilidades.
La mejor manera de mitigar esta vulnerabilidad es practicar una correcta sanitización de entradas y descontinuar cualquier uso de la función vulnerable unserialise dentro de Node.js. Se recomienda el reemplazo de esta función vulnerable por JSON.parse.