安全 Mongo BSON 注入漏洞

Rei · 2015年06月04日 · 最后由 rei 回复于 2015年06月04日 · 9026 次阅读

Mongo BSON Injection: Ruby Regexps Strike Again

http://sakurity.com/blog/2015/06/04/mongo_ruby_regexp.html

原因是一个正则表达式使用了 ^$ 而不是 \A\z,输入多行内容的时候会躲过检测。

测试是否使用有问题版本:

b=((defined?(Moped::BSON) ? Moped::BSON : BSON)::ObjectId)
raise "DoS!" if b.legal? "a"*24+"\n"
raise "Injection!" if b.legal? "a"*24+"\na"

临时补丁:

def ((defined?(Moped::BSON) ? Moped::BSON : BSON)::ObjectId).legal?(s)
  /\A\h{24}\z/ === s.to_s
end

题外话:

这种直接公布漏洞的行为并不符合社区运作的规则,发现漏洞应该先联系库的维护者打补丁,然后发公告,让开发者有时间通过更新修复漏洞。这样直接公布漏洞(甚至还有利用方法)就是逼迫所有开发者跟骇客时间竞赛。


https://github.com/mongodb/bson-ruby/blob/master/CHANGELOG.md#304

bson-ruby 3.0.4 已经修复了。

thx, patch 已打

Ruby 默认/m,等效下面的 php /m

<?php
if (preg_match("/^abc$/m", "abc\nd")) {
    echo "yes";
} else {
    echo "no";
}
?>

#3 楼 @lululau 恩,那就是 ruby 默认 MULTILINE,不是/m

正则又立功了……

公布漏洞这伙很牛掰啊

星巴克 - race condition

Facebook - CSRF

需要 登录 后方可回复, 如果你还没有账号请 注册新账号