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:
Boletim de Segurança da Microsoft MS11-100 - Crítico 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