ja:rule:inp:正規表現に用いられる入力データにメタ文字がないことを確認する
This is an old revision of the document!
Table of Contents
正規表現に用いられる入力データにメタ文字がないことを確認する
正規表現やその一部に外部入力を用いると、正規表現を用いた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
