Broadcom UPnP Remote Preauth Root Code Execution



EKU-ID: 2996 CVE: OSVDB-ID:
Author: Vedran Kajic Published: 2013-02-01 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


DefenseCode Security Advisory
http://www.defensecode.com/


Broadcom UPnP Remote Preauth Root Code Execution Vulnerability


Advisory ID: DC-2013-01-003
Advisory Title: Broadcom UPnP Remote Preauth Root Code Execution
Vulnerability
Advisory URL: http://www.defensecode.com/subcategory/advisories-28
Software: Broadcom UPnP software
Vulnerable: Multiple router manufacturers
Vendor Status: Vendors contacted
Initial Release Date: 2013-01-15
Release Date Postponed To: 2013-01-31
Risk: Critical



1. General Overview
===================

During the security evaluation of Cisco Linksys routers for a client,
we have discovered a critical security vulnerability that allows remote
unauthenticated attacker to remotely execute arbitrary code under root
privileges.
Upon initial vulnerability announcement a few weeks ago Cisco spokesman
stated that only one router model is vulnerable - WRT54GL.
We have continued with our research and found that, in fact, same
vulnerable firmware component is also used in at least two other Cisco
Linksys models - WRT54G3G and probably WRT310N. Could be others.

Moreover, vulnerability turns out even more dangerous, since we have
discovered that same vulnerable firmware component is also used across
many other big-brand router manufacturers and many smaller vendors.

Vulnerability itself is located in Broadcom UPnP stack, which is used by
many router manufacturers that produce or produced routers based on
Broadcom chipset.
We have contacted them with vulnerability details and we expect patches
soon. However, we would like to point out that we have sent more than 200
e-mails to various router manufacturers and various people, without much
success.

Some of the manufacturers contacted regarding this vulnerability are
Broadcom, Asus, Cisco, TP-Link, Zyxel, D-Link, Netgear, US Robotics,
and so on.
Routers with vulnerable Broadcom UPnP stack are mostly based on Broadcom
UPnP chipset. You can check how many manufacturers use Broadcom chipset
here: http://wiki.openwrt.org/toh/start  (search for Broadcom, brcm
or bcm).

We don't know exactly how many of them are affected, since we were unable
to contact all of them, but we suspect there are probably tens of millions
vulnerable routers out there.

According to separate recent vulnerability disclosure by Rapid7 in another
UPnP implementation (libupnp):
"In all, 73 per cent of problems occur with products based on four SDKs,
the report found. These are Portable SDK for UPnP Devices; MiniUPnP; a
third, commercial stack that is likely developed by Broadcom; and another
commercial SDK that could not be tracked to a specific developer."
- Rapid7

Many routers have their UPnP interface available over the WAN interface,
so the vulnerability can also be exploited over the internet. It seems
that, at the moment, only popular UPnP implementation that's not hit by
remote preauth security vulnerability is MiniUPnP.



2. Software Overview
====================

Broadcom UPnP is UPnP (Universal Plug and Play) protocol implementation
developed by Broadcom, and often used on routers shipped with Broadcom
chipset.
Vulnerability described in this advisory is located within wanipc and
wanppp modules of Broadcom UPnP stack.
Universal Plug and Play (UPnP) is a set of networking protocols that
permits networked devices, such as personal computers, printers, Internet
gateways, Wi-Fi access points and mobile devices to seamlessly discover
each other's presence on the network and establish functional network
services for data sharing, communications, and entertainment.



3. Vulnerability Description
============================

During the security analysis, we have discovered remote preauth format
string vulnerability in Broadcom UPnP stack. Vulnerability can be
exploited to write arbitrary values to arbitrary memory address, and
also to remotely read router memory. When properly exploited, it allows
unauthenticated attacker to execute arbitrary code under root account.

Full exploit was previously demonstrated in the following video on Cisco
Linksys WRT54GL, that is also based on Broadcom UPnP stack:
http://www.youtube.com/watch?v=cv-MbL7KFKE.

Vulnerability is present in SetConnectionType function of wanipc and
wanppp modules. Vulnerability itself can be reached with a single SOAP
request that calls SetConnectionType function.

SetConnectionType:
------------------
<?xml version="1.0"?>
<SOAP-ENV:Envelope...>
<SOAP-ENV:Body>
    <m:SetConnectionType
xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1" as="">
<NewConnectionType>#FORMAT_STRING#</NewConnectionType>
    </m:SetConnectionType>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
------------------

Format string output is available through GetConnectionTypeInfo SOAP
request as presented below.

GetConnectionTypeInfo:
------------------
<?xml version="1.0"?>
<SOAP-ENV:Envelope...>
<SOAP-ENV:Body>
    <m:GetConnectionTypeInfo
xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1">
    </m:GetConnectionTypeInfo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
------------------

Format string vulnerability is present because user-input from SOAP
request is supplied as a format string argument to the snprintf() function
in files wanipc.c and wanpp.c.
Vulnerable code lines are located in the following files and code lines:

/upnp/igd/wanipc.c:
-------------------
static int SetConnectionType(UFILE *uclient, PService psvc, PAction ac,
pvar_entry_t
args, int nargs) {
      snprintf(psvc->vars[VAR_ConnectionType].value,
sizeof(psvc->vars[VAR_ConnectionType].value), ac->params[0].value);

      return TRUE;
}
-------------------

/upnp/igd/wanppp.c:
-------------------
int WANPPPConnection_SetConnectionType(UFILE *uclient, PService psvc,
PAction ac,
pvar_entry_t args, int nargs)
/*     "SetConnectionType", WANPPPConnection_SetConnectionType, */
{
      snprintf(psvc->vars[VAR_ConnectionType].value,
sizeof(psvc->vars[VAR_ConnectionType].value), ac->params[0].value);

      return TRUE;
}
-------------------



4. Solution
===========

Since vulnerability is spread across multiple router manufacturers, and
we were unable to reach all of them on this matter, it's unclear how long
it will take certain manufacturers to patch it. Especially those that we
were unable to contact. However, we're open to any questions from vendors
regarding this vulnerability. Moreover, during the contact with one
particular vendor, we were asked if the vulnerability is in
<name-intentionally-removed> function. It wasn't. But that quickly led us
to yet another vulnerability in also popular router software, obviously
already reported to router manufacturers by someone, but still non-public.
ADVISORY UPDATE: That turns out to be libupnp vulnerability disclosed by
Rapid7.



5. The Exploit
==============

We have developed working exploit as demonstrated in video
http://www.youtube.com/watch?v=cv-MbL7KFKE, but because of the
vulnerability impact and presence of this vulnerability across multiple
router manufacturers, we won't publish the exploit.



6. Credits
==========

Vulnerability discovered by Leon Juranic and Vedran Kajic.
We would like to thank Kost for further help on shellcode development,
and Davor Serfez for router debugging.
Also, thanks to Armijn Hemel for helping us contacting some router
manufacturers.



7. About DefenseCode
====================

DefenseCode is an information security consultancy company.
DefenseCode provides security services and products designed for
comprehensive security assessment of web applications, network
and software products.
DefenseCode is specialized in web application security and provides
both static source code security analysis and dynamic web application
security analysis security products.
DefenseCode security products are designed for comprehensive security
audit of web applications.
Audit your web applications for SQL Injections, Cross Site Scripting,
Code Execution, File Inclusion, and much, much more.

E-mail: defensecode[at]defensecode.com
Website: http://www.defensecode.com