libmodsecurity + owasp crs + nginx: expresión regular para guión en el nombre de un parámetro POST en regla de exclusión personalizada

libmodsecurity + owasp crs + nginx: expresión regular para guión en el nombre de un parámetro POST en regla de exclusión personalizada

a paranoia_level = 3 de modsecurity prohíbe que se carguen caracteres no imprimibles con cargas útiles POST (application/x-www-form-urlencoded) en la fase 2 usando la regla 920272 de owasp crs versión 3.3.4

Pero, a veces, también se activa con contraseñas codificadas en UTF-8.

El primer intento de desactivar la regla 920272 funciona:

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

pero desactiva la protección de TODOS los campos cargados con POST.

Objetivo: desactivar 920272 solo para 2 parámetros POST:

  • contraseña
  • contraseña oculta

Aquí la cosa se complica:

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

Funciona también.

Pero un parámetro "contraseña oculta" contiene un guión. Fueron necesarios varios intentos para enmascarar un guión sin éxito.

Yo he tratado:

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

y probablemente algunos más...

Los errores que recibo son:

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

o de alguna manera similar a uno de los mensajes anteriores.

De acuerdo ahttps://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-ARGS El nombre de un parámetro puede ser una expresión regular. De acuerdo. Probé varios (ver arriba) y fallé.

Sabes por qué ?

información relacionada