Multiple vulnerabilities on D-Link DIR-645 devices ================================================== [ADVISORY INFORMATION] Title: Multiple vulnerabilities on D-Link DIR-645 devices Discovery date: 06/03/2013 Release date: 02/08/2013 Advisory URL: http://roberto.greyhats.it/advisories/20130801-dlink-dir645.txt Credits: Roberto Paleari (roberto@greyhats.it, twitter: @rpaleari) [AFFECTED PRODUCTS] This security vulnerability affects the following products and firmware versions: * D-Link DIR-645, 1.03B08 Other products and firmware versions could also be vulnerable, but they were not checked. [VULNERABILITY DETAILS] This router model is affected by multiple security vulnerabilities. All of them are exploitable by remote, unauthenticated attackers. Details are outlined in the following, including some proof-of-concepts. 1. Buffer overflow on "post_login.xml" Invoking the "post_login.xml" server-side script, attackers can specify a "hash" password value that is used to authenticate the user. This hash value is eventually processed by the "/usr/sbin/widget" local binary. However, the latter copies the user-controlled hash into a statically-allocated buffer, allowing attackers to overwrite adjacent memory locations. As a proof-of-concept, the following URL allows attackers to control the return value saved on the stack (the vulnerability is triggered when executing "/usr/sbin/widget"): curl http:///post_login.xml?hash=AAA...AAABBBB The value of the "hash" HTTP GET parameter consists in 292 occurrences of the 'A' character, followed by four occurrences of character 'B'. In our lab setup, characters 'B' overwrite the saved program counter (%ra). 2. Buffer overflow on "hedwig.cgi" Another buffer overflow affects the "hedwig.cgi" CGI script. Unauthenticated remote attackers can invoke this CGI with an overly-long cookie value that can overflow a program buffer and overwrite the saved program address. Proof-of-concept: curl -b uid=$(perl -e 'print "A"x1400;') -d 'test' http:///hedwig.cgi 3. Buffer overflow on "authentication.cgi" The third buffer overflow vulnerability affects the "authentication.cgi" CGI script. This time the issue affects the HTTP POST paramter named "password". Again, this vulnerability can be abused to achieve remote code execution. As for all the previous issues, no authentication is required. Proof-of-concept: curl -b uid=test -d $(perl -e 'print "uid=test&password=asd" . "A"x2024;') http:///authentication.cgi 4. Cross-site scripting on "bind.php" Proof-of-concept: curl "http:///parentalcontrols/bind.php?deviceid=test'\"/><" 5. Cross-site scripting on "info.php" Proof-of-concept: curl "http:///info.php?RESULT=testme\", msgArray); alert(1); //" 6. Cross-site scripting on "bsc_sms_send.php" Proof-of-concept: curl "http:///bsc_sms_send.php?receiver=testme\"/>