## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-LAFFRAY-RUBY-RCE-CVE-2019-5420-
# Десериализация Ruby (CVE-2019-5420)
root@kitploit:~
https://github.com/PenTestical/CVE-2019-5420
Ссылки:
root@kitploit:~
[1] Процесс реализации полезной нагрузки для выполнения команд в Ruby on Rails
https://hackerone.com/reports/473888
Поскольку `ActiveSupport::MessageVerifier` и `ActiveSupport::MessageEncryptor` используют Marshal в качестве сериализатора по умолчанию, я подтвердил, что RCE возможен через инъекцию объектов.
root@kitploit:~
# https://github.com/rails/rails/blob/v5.2.2/activesupport/lib/active_support/message_verifier.rb#L110
def initialize(secret, options = {})
raise ArgumentError, "Secret should not be nil." unless secret
@secret = secret
@digest = options[:digest] || "SHA1"
@serializer = options[:serializer] || Marshal
end
root@kitploit:~
# https://github.com/rails/rails/blob/v5.2.2/activesupport/lib/active_support/message_encryptor.rb#L145
def initialize(secret, *signature_key_or_options)
options = signature_key_or_options.extract_options!
sign_secret = signature_key_or_options.first
@secret = secret
@sign_secret = sign_secret
@cipher = options[:cipher] || self.class.default_cipher
@digest = options[:digest] || "SHA1" unless aead_mode?
@verifier = resolve_verifier
@serializer = options[:serializer] || Marshal
end