New Class of Vulnerability in Perl Web Applications (WOOYUN)

  • A+
所属分类:WooYun-Zone

s0mun5New Class of Vulnerability in Perl Web Applications  (WOOYUN) New Class of Vulnerability in Perl Web Applications  (WOOYUN) | 2014-10-08 12:18

其实是Bugzilla的用户注册漏洞 :)

漏洞成因代码如下

my $otheruser = Bugzilla::User->create({
    login_name => $login_name,
    realname   => $cgi->param('realname'),
cryptpassword => $password});

这是创建新用户的代码

这里调用了 $cgi->param() 类

当我们进行复参请求时

index.cgi?foo=bar&foo=baz&foo=quux

如果我们用数组获取foo的值,输出如下
@values = $cgi->param('foo'); --> ['bar', 'baz', 'quux']

但是我们用变量获取foo的值时,输出如下

$value = $cgi->param('foo');  --> 'bar'

而在perl中用哈希表获取数组的值时,会如下

my @array = ("foo", 3, "bar", 6); my %hash = @array; --> { "foo" => 3, "bar" => 6 }

每两个值变成hash表的key值和value值

so 这里就产生了变量覆盖的问题

index.cgi?realname=JRandomUser&realname=login_name&realname=[email protected]
请求上面的url,realname随便,login_name是一个已经注册的用户,这样就覆盖了原来的 login_name

修复方法很简单

scalar $cgi->param('realname'),使用scalar取第一个值就ok了

看这里 http://blog.gerv.net/2014/10/new-class-of-vulnerability-in-perl-web-applications/

AND

这里 https://krebsonsecurity.com/2014/10/bugzilla-zero-day-exposes-zero-day-bugs/

分享到: