libmodsecurity + owasp crs + nginx: カスタム除外ルールの POST パラメータ名に含まれるハイフンの正規表現

libmodsecurity + owasp crs + nginx: カスタム除外ルールの POST パラメータ名に含まれるハイフンの正規表現

modsecurity の paranoia_level = 3 は、owasp crs バージョン 3.3.4 のルール 920272 を使用して、フェーズ 2 で POST ペイロード (application/x-www-form-urlencoded) とともに印刷できない文字をアップロードすることを禁止します。

ただし、場合によっては、UTF-8 でエンコードされたパスワードでもトリガーされることがあります。

ルール 920272 を非アクティブ化する最初の試みは成功しました:

SecRule REQUEST_URI "/login" \
    id:2001,\
    phase:2,\
    pass,\
    nolog,\
    ctl:RuleRemoveById=920272"

ただし、POST でアップロードされたすべてのフィールドの保護は無効になります。

目標: 2 つの POST パラメータのみに対して 920272 を非アクティブ化します。

  • パスワード
  • 隠しパスワード

ここで事態は複雑になります:

SecRule REQUEST_URI "/login" \
    id:2001,\
    phase:2,\
    pass,\
    nolog,\
    ctl:RuleRemoveById=920272;ARGS:password"

同様に動作します。

しかし、パラメータ「hidden-password」にはハイフンが含まれています。ハイフンをマスクするために何度か試みましたが、成功しませんでした。

私が試してみました:

ctl:RuleRemoveById=920272;ARGS:hidden-password"
ctl:RuleRemoveById=920272;ARGS:hidden\-password"
ctl:RuleRemoveById=920272;ARGS:'hidden-password'"
ctl:RuleRemoveById=920272;ARGS:^/hidden-password/"
ctl:RuleRemoveById=920272;ARGS:^/hidden\-password/$"

そしておそらくさらにいくつか...

発生するエラーは次のいずれかです:

  • "Not a number: password" または
  • "Expecting an action, got: \-password" または
  • "Expecting an action, got: 'hidden-password'"

または、上記のメッセージのいずれかに類似した内容。

によるとhttps://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-ARGS パラメータの名前は正規表現にすることができます。OK。いくつか試してみましたが(上記参照)、失敗しました。

なぜなのかご存知ですか ?

関連情報