Sploitus

Exploit for ruby-RCE-CVE-2019-5420-

kitploit · 2026-08-27

Exploit Code

MARKDOWN46 lines
## 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