libmodsecurity + owasp crs + nginx: regex para hífen no nome de um parâmetro POST na regra de exclusão personalizada

libmodsecurity + owasp crs + nginx: regex para hífen no nome de um parâmetro POST na regra de exclusão personalizada

a paranoia_level = 3 do modsecurity proíbe o upload de caracteres não imprimíveis com cargas POST (application/x-www-form-urlencoded) na fase 2 usando a regra 920272 do owasp crs versão 3.3.4

Mas, às vezes, também é acionado para senhas codificadas em UTF-8.

A primeira tentativa de desativar a regra 920272 funciona:

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

mas desativa a proteção de TODOS os campos carregados com POST.

Objetivo: desativar 920272 apenas para 2 parâmetros POST:

  • senha
  • senha oculta

Aqui as coisas ficam complicadas:

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

funciona também.

Mas um parâmetro "senha oculta" contém um hífen. Foram necessárias várias tentativas para mascarar um hífen, sem sucesso.

Eu tentei:

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/$"

e provavelmente mais alguns ...

Os erros que recebo são:

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

ou de alguma forma semelhante a uma das mensagens acima.

De acordo comhttps://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-ARGS o nome de um parâmetro pode ser um regex. OK. Tentei vários (veja acima) e falhei.

Você sabe por quê ?

informação relacionada