安全研究

安全漏洞
MyBB论坛口令重置功能弱随机数漏洞

发布日期:2010-04-13
更新日期:2010-04-15

受影响系统:
MyBB MyBB <= 1.4.11
不受影响系统:
MyBB MyBB 1.4.12
描述:
BUGTRAQ  ID: 39404

MyBB是一款流行的Web论坛程序。

MyBB的口令重置实现在生成口令重置令牌和随机口令时使用了弱随机数,如果Web服务器重新使用了PHP进程的话攻击者就可以破解口令入侵任意账号。

MyBB在多处使用了mt_srand()函数对随机数生成器提供种子:

    // Setup a unique posthash for attachment management
    if(!$mybb->input['posthash'] && $mybb->input['action'] != "editdraft")
    {
       mt_srand((double) microtime() * 1000000);
       $posthash = md5($mybb->user['uid'].mt_rand());
    }

这种方式所提供的随机数种子只有100万个不同的种子值;此外第一个生成的随机数还会以posthash的形式泄露给用户。由于用户知道了自己的uid,就可以通过暴力猜测100万种可能性找到种子。普通的桌面PC可在一秒钟内完成这种攻击。

由于随机数生成器的状态被同一PHP进程所处理的请求所共享,因此之后的口令重置就会使用攻击者已知的状态。

口令重置首先会创建发送给用户的随机口令重置令牌。如果使用了这个令牌,口令重置的第二步就会生成新的随机口令,这两个随机字符串都是由以下函数生成的:

     function random_str($length="8")
     {
        $set =array("a","A","b","B","c","C","d","D","e","E","f","F",
                    "g","G","h","H","i","I","j","J","k","K","l","L",
                    "m","M","n","N","o","O","p","P","q","Q","r","R",
                    "s","S","t","T","u","U","v","V","w","W","x","X",
                "y","Y","z","Z","1","2","3","4","5","6","7","8","9");
        $str = '';

        for($i = 1; $i <= $length; ++$i)
        {
           $ch = mt_rand(0, count($set)-1);
           $str .= $set[$ch];
        }

        return $str;
     }

这段代码的问题是使用了mt_rand()生成随机字符串且mt_rand()随机数生成器的状态是攻击者已知的,因此可以预测出所生成的口令重置令牌和新的口令。

<*来源:Stefan Esser (s.esser@ematters.de
  
  链接:http://secunia.com/advisories/39378/
        http://marc.info/?l=bugtraq&m=127121097526268&w=2
*>

建议:
厂商补丁:

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

http://blog.mybboard.net/2010/04/13/mybb-1-4-12-released-security-maintenance-update/

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