MongoDBの検索でリモートから受け取った文字列を正規表現として使用しても安全ですか?
正規表現には、指数関数的に処理時間が増大するサービス不能攻撃(ReDOS)の危険性があるとのことです
http://blog.ohgaki.net/regex-dos-redos
実際に、Mongo ShellのJavaScriptで以下のコードを実行すると長時間CPU使用率が100%になります
regex = /(a+)+Z/
regex.exec("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")
しかし、コレクションにあるデータを正規表現で検索するときにはすぐに結果が返ってきます
db.test.insert({_id: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!"})
db.test.find({_id:/(a+)+Z/})
MongoDBの正規表現を使ったクエリーにはReDOS脆弱性がないことが保証されているのでしょうか?
MongoDBのドキュメントを探しましたがクエリーの正規表現にリモートから受け取った文字列を使用していいのかどうか見つけられませんでした。
唯一見つけたのは以下のもので、
https://www.mongodb.com/alerts/
Remotely trigger a denial of service (crash) via a specially crafted regular expression
とあり、で正規表現のReDOS攻撃に対処したようですが、明確に使用しても大丈夫だというドキュメントは見つけられませんでした。