User Tools

Site Tools


ja:rule:inp:正規表現に用いられる入力データにメタ文字がないことを確認する

This is an old revision of the document!


正規表現に用いられる入力データにメタ文字がないことを確認する

正規表現やその一部に外部入力を用いると、正規表現を用いたDoSや情報漏洩の原因となる場合がある。正規表現を用いた検索を行う場合、入力データにメタ文字が無いことを確認する。

正規表現インジェクションの例

システムのイベントを記録したログがあり、自身のユーザーIDのログは参照できるとする。

14:14:15 bob[14] Login from IP 10.10.10.123
14:14:30 tom[14] Login from IP 10.10.20.234
14:15:27 bob[34] Update password
14:15:27 tom[38] Update email from tom@example.com to tom@example.org
14:18:12 bob[15] Logout
14:19:43 bob[15] Logout

システムにbobがログインしている場合に、自身のログのみを検索する正規表現は以下のような物となる。

(.*? +bob\[\d+\] +.*<SEARCHTEXT>.*)

<SEARCHTEXT>はユーザーが入力する検索条件となる。この場合、攻撃者が

.*)|(.*

を入力した場合、検索用の正規表現は次のようになり

(.*? +bob\[\d+\] +.*.*)|(.*.*)

bob以外のログエントリ全てを取得可能となる。

非適合コード例

[ルール/推奨事項に適合しないコードおよびその解説。複数あってよい。]

適合コード例(Whitelisting)

[ルール/推奨事項に適合するコードおよびその解説。複数あって構わない。その場合、セクション名の後に“(適合パターン名)“を記述する。]

適合コード例(Detect Meta Character)

例外

  • 正規表現を利用するユーザーが権限を持つシステム管理者のみ限定されている場合。

リスク評価

正規表現の記述をユーザーに許すと、正規表現のアルゴリズムを使ったReDoSを許したり、意図した文字列以外にもマッチさせ不正に情報を取得可能となる場合がある。

Rule Severity Likelihood Remediation Cost Priority Level
medium unlikely medium P4 L3

関連ガイドライン

参考文献

ja/rule/inp/正規表現に用いられる入力データにメタ文字がないことを確認する.1457245425.txt.gz · Last modified: 2016/03/06 06:23 by yohgaki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki