O ModSecurity 2.7.1 trabalha com o ASP.NET MVC 3?

2

Estou tentando fazer o ModSecurity 2.7.1 funcionar com um site da ASP.NET MVC 3. A instalação foi executada sem erros e olhando para o log de eventos, o ModSecurity é iniciando com sucesso. Estou usando o arquivo modsecurity.conf-recommended para definir as regras básicas.

O problema que estou tendo é que sempre que eu estou POSTando alguns dados de formulário, ele não passa pela ação do controlador (ou fichário do modelo).

Eu tenho SecRuleEngine definido como DetectionOnly .

Eu tenho SecRequestBodyAccess definido como On .

Com essas configurações, o corpo do POST nunca alcança a ação do controlador. Se eu definir SecRequestBodyAccess para Off , isso é definitivamente algo a ver com como ModSecurity encaminha os dados do corpo. A% debug ModSecurity mostra o seguinte (olha para mim como se todos passassem):

Second phase starting (dcfg 94b750).
Input filter: Reading request body.
Adding request argument (BODY): name "[0].IsSelected", value "on"
Adding request argument (BODY): name "[0].Quantity", value "1"
Adding request argument (BODY): name "[0].VariantSku", value "047861"
Adding request argument (BODY): name "[1].Quantity", value "0"
Adding request argument (BODY): name "[1].VariantSku", value "047862"
Input filter: Completed receiving request body (length 115).
Starting phase REQUEST_BODY.
Recipe: Invoking rule 94c620; [file "*********************"] [line "54"] [id "200001"].
Rule 94c620: SecRule "REQBODY_ERROR" "!@eq 0" "phase:2,auditlog,id:200001,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:%{reqbody_error_msg},severity:2"
Transformation completed in 0 usec.
Executing operator "!eq" with param "0" against REQBODY_ERROR.
Operator completed in 0 usec.
Rule returned 0.
Recipe: Invoking rule 5549c38; [file "*********************"] [line "75"] [id "200002"].
Rule 5549c38: SecRule "MULTIPART_STRICT_ERROR" "!@eq 0" "phase:2,auditlog,id:200002,t:none,log,deny,status:44,msg:'Multipart request body failed strict validation: PE %{REQBODY_PROCESSOR_ERROR}, BQ %{MULTIPART_BOUNDARY_QUOTED}, BW %{MULTIPART_BOUNDARY_WHITESPACE}, DB %{MULTIPART_DATA_BEFORE}, DA %{MULTIPART_DATA_AFTER}, HF %{MULTIPART_HEADER_FOLDING}, LF %{MULTIPART_LF_LINE}, SM %{MULTIPART_MISSING_SEMICOLON}, IQ %{MULTIPART_INVALID_QUOTING}, IP %{MULTIPART_INVALID_PART}, IH %{MULTIPART_INVALID_HEADER_FOLDING}, FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'"
Transformation completed in 0 usec.
Executing operator "!eq" with param "0" against MULTIPART_STRICT_ERROR.
Operator completed in 0 usec.
Rule returned 0.
Recipe: Invoking rule 554bd70; [file "********************"] [line "80"] [id "200003"].
Rule 554bd70: SecRule "MULTIPART_UNMATCHED_BOUNDARY" "!@eq 0" "phase:2,auditlog,id:200003,t:none,log,deny,status:44,msg:'Multipart parser detected a possible unmatched boundary.'"
Transformation completed in 0 usec.
Executing operator "!eq" with param "0" against MULTIPART_UNMATCHED_BOUNDARY.
Operator completed in 0 usec.
Rule returned 0.
Recipe: Invoking rule 554cbe0; [file "*********************************"] [line "94"] [id "200004"].
Rule 554cbe0: SecRule "TX:/^MSC_/" "!@streq 0" "phase:2,log,auditlog,id:200004,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'"
Rule returned 0.
Hook insert_filter: Adding input forwarding filter (r 5541fc0).
Hook insert_filter: Adding output filter (r 5541fc0).
Initialising logging.
Starting phase LOGGING.
Recording persistent data took 0 microseconds.
Audit log: Ignoring a non-relevant request.

Não consigo ver nada de anormal no Fiddler. Estou usando um ViewModel nos parâmetros da minha ação. Nenhum dado será vinculado se SecRequestBodyAccess estiver definido como On . Estou até mesmo registrando todas as Request.Form.Keys e valores via log4net, mas também não estou recebendo nenhum valor.

Estou começando a me perguntar se o ModSecurity realmente funciona com a ASP.NET MVC ou se há algum conflito com o módulo ModSecurity http e com o fichário do modelo que está entrando em ação.

Alguém tem alguma sugestão ou alguém pode confirmar que tem ModSecurity trabalhando com um site da ASP.NET MVC?

    
por autonomatt 11.12.2012 / 00:34

2 respostas

1

Eu enviei um relatório de bug para este problema e ele foi corrigido no modsecurity 2.7.2. link

    
por 26.02.2013 / 05:21
1

Então, estou alguns anos atrasado para a festa, mas estou trabalhando com problemas semelhantes e pensei em compartilhar o que encontrei.

Não é realmente um problema de MVC. pode ser um problema do IIS, embora algo parecido afete o NGINX (baseado nisso: link ) E ainda parece ser um problema na versão do ModSecurity que é instalado através do utilitário Web Platform Installer e a versão automaticamente disponível no AppService do Azure, portanto, se houver um patch disponível, ele provavelmente não será amplamente implantado .

Com base no ( link ), estou configurando:

SecStreamInBodyInspection On

.. que permite que corpos POST completamente, embora eu não encontrei qualquer indicação clara de por quê. Isso é um pouco inquietante, porque eu também não tenho certeza de quais, se houver, desvantagens lá pode ser, mas a magia parece funcionar.

Curiosamente, as regras do OWASP CRS para o ModSecurity definem o SecRequestBodyInspection, mas não o SecStreamInBodyInspection, o que sugere que esse bug não afeta todos os hosts, mas é definitivamente uma armadilha para usuários do IIS.

HTH

    
por 27.06.2016 / 20:00