Cómo excluir reglas de fase 1 en mod_security

By | June 27, 2018

Existen diversas casuísticas en la exclusión de reglas de mod_security. Un procedimiento habitual suele ser limitar el ámbito de exclusión a un determinado contexto en el que por diversas razones estamos obteniendo falsos positivos de una serie de reglas problemáticas, ejemplo:

<Location /aplicacion>
    SecRuleRemoveById 920320 942200 942330 942430 980130
</Location>

Suponemos que dicha directiva excluiría las reglas 920320, 942200, 942330, 942430 y 980130 para el contexto /aplicacion. Pues bien, si estas reglas saltan en la fase 1 de procesado de mod_security la exclusión que pretendemos no va a funcionar, ya que dicha información de request aún no habrá llegado a Apache y por tanto no podrá aplicar la directiva Location para el contexto mencionado… ¡mod_security habrá bloqueado antes la request!

Para encontrar una explicación tenemos que recordar que mod_security funciona siguiendo un flujo de procesado de request en 5 fases:

  1. Request headers
  2. Request body
  3. Response headers
  4. Response body
  5. Logging

Podéis comprobar esto en la documentación oficial. Precisamente si vemos la documentación referente a la primera fase:

De esta manera, la forma de excluir correctamente las 5 reglas mencionadas en el ejemplo tendremos que aplicar estas directivas:

SecRule REQUEST_URI "@beginswith /aplicacion" "phase:1,nolog,allow,ctl:ruleRemoveById=920320,id:1"
SecRule REQUEST_URI "@beginswith /aplicacion" "phase:1,nolog,allow,ctl:ruleRemoveById=942200,id:2"
SecRule REQUEST_URI "@beginswith /aplicacion" "phase:1,nolog,allow,ctl:ruleRemoveById=942330,id:3"
SecRule REQUEST_URI "@beginswith /aplicacion" "phase:1,nolog,allow,ctl:ruleRemoveById=942430,id:4"
SecRule REQUEST_URI "@beginswith /aplicacion" "phase:1,nolog,allow,ctl:ruleRemoveById=980130,id:5" 

Indicando de esta manera a mod_security que ignore en fase 1 la regla en cuestión (ej.: ruleRemoveById=920320) para toda request bajo el contexto /aplicacion y evitando de esta manera el falso positivo que nos generaba.