我们注意到上周vBulletin团队向所有客户发邮件提醒vBSEO存在一个潜在的安全漏洞。
经过深入分析,我们判断该漏洞极其危险,它能允许攻击者在客户网站上执行PHP恶意代码,所以应立即手动修补该插件。
由于vBulletin是一个高度可配置的软件,所以你是否直接受到影响取决于网站的具体配置。
含有漏洞的这段代码会在vBulletin加载 memberinfo_visitormessage 模板时执行。这就意味着如果你(作为站长)允许访问者(无论是否已认证通过)能查看用户介绍中的 "访客留言(visitor message)" 一节,就会令你陷入危险。
出于某些原因,vBSEO会在 visitormessage 模板中添加用户提供的 referer 链接:
正如你所看到的,653行到658行会将 $permalinkurl 变量传给 vbseo_modify_template34() 方法,这看似没什么问题,却会引发一个明显的XSS漏洞(变量在传递之前并没有针对xss进行过滤)。
接下来看一下 vbseo_modify_template34() 的代码,就会发现事情变得有些糟糕:
第一眼我们就能看出来:调用preg_replace()可不是什么好事,对于我们而言,尤其是攻击者能够控制$replacewith的内容——以此就可以构造出XSS Palyload——利用这些正则表达式将PHP代码之类的内容添加到模板当中。
通过分析 vbseo_modify_template() 函数,我们验证了上述判断。该函数实质上只是在vBulletin模板缓存中替换了指定的代码片段。
因此,攻击者要想注入PHP代码,就必须在referrer字段中添加如下这样的代码(通过查看HTTP服务器的日志,很容易标识出这些内容):
http://www.somesite.com/?a=$stylevar[${${phpinfo()}}]
由此可见,这是一个非常严重的问题,请您务必更正此前我们所提及的代码,尽快修补这个插件。
if(isset($_REQUEST[‘ajax’]) && isset($_SERVER[‘HTTP_REFERER’])) $permalinkurl = $_SERVER[‘HTTP_REFERER’].$permalinkurl;
// if(isset($_REQUEST[‘ajax’]) && isset($_SERVER[‘HTTP_REFERER’])) // $permalinkurl = $_SERVER[‘HTTP_REFERER’].$permalinkurl;