

正規表現には、指数関数的に処理時間が増大するサービス不能攻撃(ReDOS)の危険性があるとのことです  
<http://blog.ohgaki.net/regex-dos-redos>

実際に、Mongo ShellのJavaScriptで以下のコードを実行すると長時間CPU使用率が100%になります

[code]

    regex = /(a+)+Z/
    regex.exec("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")
    
[/code]

しかし、コレクションにあるデータを正規表現で検索するときにはすぐに結果が返ってきます

[code]

    db.test.insert({_id: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!"})
    db.test.find({_id:/(a+)+Z/})
    
[/code]

MongoDBの正規表現を使ったクエリーにはReDOS脆弱性がないことが保証されているのでしょうか？  
MongoDBのドキュメントを探しましたがクエリーの正規表現にリモートから受け取った文字列を使用していいのかどうか見つけられませんでした。

唯一見つけたのは以下のもので、  
<https://www.mongodb.com/alerts/>

> Remotely trigger a denial of service (crash) via a specially crafted regular
> expression

とあり、で正規表現のReDOS攻撃に対処したようですが、明確に使用しても大丈夫だというドキュメントは見つけられませんでした。


CC BY-SA 3.0
2016-06-16T01:05:38.040
26773
2016-06-21T12:46:43.513
16864
question
正規表現 security mongodb
MongoDBの検索でリモートから受け取った文字列を正規表現として使用しても安全ですか？


MongoDBバージョン2.6.8以前及び3.0.0でCVE-2014-8964でのReDOS脆弱性があるPCREライブラリーバージョン8.30が使用されていました。MongoDBをそれ以降のバージョンにアップデートすればこのPCRE脆弱性がなくなります。

_参照 （英語のみ）_  
[SERVER-17252](https://jira.mongodb.org/browse/SERVER-17252)  
及び、ご覧になったポストの右側にバージョンが記載されています。  
<https://www.mongodb.com/alerts/> 。


CC BY-SA 3.0
2016-06-21T12:46:43.513
26920
2016-06-21T12:46:43.513
113
26773
answer