Uma solicitação ASP.NET que possui muitas chaves de formulário, arquivos ou membros de carga JSON falha com uma exceção

O suporte para o Windows XP terminou

A Microsoft terminou o suporte para o Windows XP em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

O suporte para o Windows Server 2003 termina em 14 de julho de 2015.

A Microsoft terminou o suporte para o Windows Server 2003 em 14 de julho de 2015. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

Sumário
A atualização de segurança MS11-100 da Microsoft limita o número máximo de chaves de formulário, arquivos e membros JSON para 1000 em uma solicitação HTTP. Por causa desta alteração, os aplicativos ASP.NET rejeitam solicitações que possuem mais do que 1000 destes elementos. Os clientes HTTP que fazem estes tipos de solicitação serão negados e uma mensagem de erro aparecerá no navegador da Web. A mensagem de erro geralmente terá um código de status HTTP 500. Este novo limite pode ser configurado em uma base por aplicativo. Consulte a seção "Resolução" para obter instruções de configuração.


Sintomas
As solicitações ASP.NET que têm várias chaves de formulário, arquivos ou carga JSON recebem uma resposta de erro do servidor. O Aplicativo faz logon no servidor que tem uma entrada Aviso com uma Fonte da versão específica do ASP.NET e um ID de Evento de 1309. O log do evento contém uma das seguintes mensagens: 


Mensagem 1:
Informação do aplicativo:
Domínio do aplicativo: /LM/W3SVC/1/ROOT/<Domínio do Aplicativo>
Nível de confiança: Médio
Caminho Virtual do Aplicativo: <Caminho VDIR>
Caminho do Aplicativo: <Caminho do Aplicativo>
Nome da máquina: <Nome da máquina>
Informação do processo:
ID do Processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

Informações da exceção:
Tipo de exceção: HttpException
Mensagem da exceção: Os dados do formulário codificado URL não são válidos.
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_HasForm()
at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
at System.Web.UI.Page.DeterminePostBackMode()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Mensagem 2:
Informação do aplicativo:
Domínio do aplicativo: /LM/W3SVC/1/ROOT/<Domínio do Aplicativo>
Nível de confiança: Médio
Caminho Virtual do Aplicativo: <Caminho VDIR>
Caminho do Aplicativo: <Caminho do Aplicativo>
Nome da máquina: <Nome da máquina>

Informação do processo:
ID do Processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

Informações da exceção:
Tipo de exceção: InvalidOperationException
Mensagem da exceção: A operação não é válida devido ao estado atual do objeto.
at System.Web.HttpRequest.FillInFilesCollection()
at System.Web.HttpRequest.get_Files()
at FileUpload.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Mensagem 3:
Informação do aplicativo:
Domínio do aplicativo: /LM/W3SVC/1/ROOT/<Domínio do Aplicativo>
Nível de confiança: Médio
Caminho Virtual do Aplicativo: <Caminho VDIR>
Caminho do Aplicativo: <Caminho do Aplicativo>
Nome da máquina: <Nome da máquina>

Informação do processo:
ID do Processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

Informações da exceção:
Tipo de exceção: InvalidOperationException
Mensagem da exceção: A operação não é válida devido ao estado atual do objeto.
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
at System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
at Failing.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


O arquivo de log do IIS mostra uma entrada que se parece com a seguinte:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Causa
A atualização de segurança da Microsoft que o boletim de segurança MS11-100 resolve altera o número máximo padrão de chaves de formulários, arquivos e membros JSON que o ASP.NET irá aceitar em uma solicitação para 1.000. Esta alteração foi feita para resolver a vulnerabilidade da Negação de Serviço que o boletim de segurança MS11-100 da Microsoft documenta.


Resolução
Os aplicativos que atingem este limite para as chaves de formulários ou arquivos podem modificar o appSetting do ASP.NET aspnet:MaxHttpCollectionKeys, como mostrado abaixo no arquivo de configuração do aplicativo ASP.NET. Esta configuração resolve as mensagens de erro 1 e 2 na seção "Sintomas".
<configuration><appSettings><add key="aspnet:MaxHttpCollectionKeys" value="1000" /></appSettings></configuration>


Observação Se você estiver usando o ASP.NET 1.1 em um sistema baseado em x86, a configuração é ajustada com a adição de um valor DWORD à seguinte chave do registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Se você estiver usando o ASP.NET 1.1 em um sistema baseado em x64, a configuração é ajustada com a adição de um valor DWORD à seguinte chave do registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys



Os aplicativos que atingem este limite para cargas JSON podem modificar o appSetting do ASP.NET aspnet:MaxJsonDeserializerMembers, como mostrado abaixo em um arquivo de configuração do aplicativo ASP.NET. Esta configuração resolve a mensagem de erro 3 na seção "Sintomas".
<configuration><appSettings><add key="aspnet:MaxJsonDeserializerMembers" value="1000" /></appSettings></configuration>



Observação Aumentar este valor acima da configuração padrão aumenta a suscetibilidade do seu servidor à vulnerabilidade da Negação de Serviço discutida no boletim de segurança MS11-100.


Referências
Para obter mais informações sobre o boletim de segurança MS11-100, consulte o seguinte artigo da TechNet: Para obter mais informações, clique no número a seguir para ler o artigo na Base de Dados de Conhecimento da Microsoft:
2638420 MS11-100: Vulnerabilidade no .NET Framework pode permitir a elevação de privilégio: 29 de dezembro de 2011
Propriedades

ID do Artigo: 2661403 - Última Revisão: 11/29/2012 14:36:00 - Revisão: 4.0

Microsoft .NET Framework 4.0, Microsoft .NET Framework 3.5 Service Pack 1, Microsoft .NET Framework 3.5, Microsoft .NET Framework 2.0 Service Pack 2, Microsoft .NET Framework 2.0 Service Pack 1 (x86), Microsoft .NET Framework 2.0, Microsoft .NET Framework 1.1 Service Pack 1, Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0 Service Pack 3, Microsoft .NET Framework 1.0, Windows 7 Service Pack 1, Windows 7 Enterprise, Windows 7 Professional, Windows 7 Ultimate, Windows 7 Home Premium, Windows 7 Home Basic, Windows Server 2008 R2 Service Pack 1, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Service Pack 2, Windows Vista Service Pack 2, Microsoft Windows Server 2003 Service Pack 2, Service Pack 3 para Windows XP

  • atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403
Comentários