葡先生 發表於 2014-12-3 09:03:22

WordPress 4.0以下版本存在跨站脚本漏洞

<p><img border="0" alt="QQ截图20141128094917" width="572" height="218" src="https://img.jbzj.com/file_images/article/201412/2014120309031528.png" /></p>
<p>该漏洞是由芬兰IT公司Klikki Oy的CEO Jouko Pynnonen发现的,只存在于Wordpress4.0以下的版本中。<strong>据调查得知全球有86%的Wordpress网站都感染了这一漏洞,也就意味着全球数百万的网站都存在着潜在的危险。</strong>一些知名网站也使用了Wordpress软件,如Time、UPS、NBC Sports、CNN、Techcrunch 和FreeBuf:)</p>
<p><strong>漏洞概述</strong></p>
<p>WordPress中存在一系列的跨站脚本漏洞,攻击者利用跨站脚本伪造请求以欺骗用户更改登录密码,或者盗取管理员权限。</p>
<p><strong>如Jouko Pynnonen解释道:</strong></p>
<blockquote>
<p>当博客管理员查看评论时,评论中的漏洞代码会自动在其Web浏览器上运行。然后恶意代码会偷偷接管管理员账户,从而执行管理员操作。</p>
</blockquote>
<p>为了证明他们的观点,研究人员创建了一个漏洞利用程序(exploits)。利用这个exploits,他们创建了一个新的WordPress管理员账户,改变了当前管理员密码,并在服务器上执行了攻击PHP代码。</p>
<p><strong>漏洞分析</strong></p>
<p>问题出在wordpress的留言处,通常情况下留言是允许一些html标签的,比如、<strong>、<code>等等,然而标签中有一些属性是在白名单里的,比如</code></strong><strong><code>标签允许href属性,但是onmouseover属性是不允许的。</code></strong></p>
<p>但是在一个字符串格式化函数wptexturize()上出现了问题,这个函数会在每一个留言上执行,函数的功能是把当前的字符转义成html实体,比如把&ldquo;&rdquo;转义为&ldquo;&rdquo;。为了防止干扰html格式,wptexturize()首先会以html标签为标准把文本分成若干段,除了html标签,还有方括号标签比如。分割的功能是由下列正则表达式完成的。</p>
<p><strong>在wp-includes/formatting.php代码的第156行:</strong></p>
<blockquote>
<p>$textarr&nbsp;=&nbsp;preg_split('/(&lt;.*&gt;|\[.*\])/Us',&nbsp;$text,&nbsp;-1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>PREG_SPLIT_DELIM_CAPTURE);</p>
</blockquote>
<p>但是如果文章中混合着尖括号&lt;&gt;和方括号[]会造成转义混淆,导致部分代码没有转义。</p>
<p>攻击者可以通过这个漏洞在允许的HTML标签中注入样式参数形成XSS攻击,比如通过建立一个透明的标签覆盖窗口,捕捉onmouseover事件。</p>
<p><strong>漏洞利用测试</strong></p>
<p><strong>以下代码可以用于测试</strong></p>
<blockquote>[&lt;a&nbsp;href=&quot;test&quot;&nbsp;title=&quot;]&quot;&gt;[&quot;&nbsp;<!--&nbsp;onmouseover=alert(/v587/)//><!--&nbsp;-->NOT&nbsp;VULNERABLE]</blockquote>
<p><strong>修复建议</strong></p>
<p>这一漏洞很容易被攻击者利用,WordPress官方建议用户尽快更新补丁,而在新版WordPress 4.0.1已经修复了所有的漏洞。</p>
<p>WordPress官方于11月20日发布了官方补丁,目前大多数的WordPress网站上都会收到补丁更新提醒通知;如果有一些其他原因使得你无法更新补丁,Klikki Oy公司还提供了另外一个解决方案(workaround)可以修复该漏洞。</p>
<p>wptexturize可以通过在wp-includes/formatting.php开头增加一个返回参数避免这个问题:</p>
<blockquote>
<p>function&nbsp;wptexturize($text)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>return&nbsp;$text;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ADD&nbsp;THIS&nbsp;LINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>global&nbsp;$wp_cockneyreplace;</p>
</blockquote>
<p><strong>额外提醒</strong></p>
<p>如果你使用的是WP-Statistics WordPress插件,你也应该更新补丁。因为这些插件上也存在跨站脚本漏洞,攻击者同样可以实施攻击。</p>
頁: [1]
查看完整版本: WordPress 4.0以下版本存在跨站脚本漏洞