Monday, September 25, 2023

Eine ASP.NET-Anfrage, die viele Formularschlüssel, Dateien oder JSON-Nutzlastmitglieder enthält, schlägt mit einer Ausnahme fehl – ​​Microsoft-Support

Zusammenfassung

Das Microsoft-Sicherheitsupdate MS11-100 begrenzt die maximale Anzahl von Formularschlüsseln, Dateien und JSON-Mitgliedern in einer HTTP-Anfrage auf 1000. Aufgrund dieser Änderung lehnen ASP.NET-Anwendungen Anforderungen ab, die mehr als 1000 dieser Elemente enthalten. HTTP-Clients, die solche Anfragen stellen, werden abgelehnt und im Webbrowser wird eine Fehlermeldung angezeigt. Die Fehlermeldung enthält normalerweise einen HTTP 500-Statuscode. Dieses neue Limit kann für jede einzelne Anwendung konfiguriert werden. Konfigurationsanweisungen finden Sie im Abschnitt „Lösung".


Symptome

ASP.NET-Anfragen mit vielen Formularschlüsseln, Dateien oder JSON-Nutzdaten erhalten eine Fehlerantwort vom Server. Das Anwendungsprotokoll auf dem Server enthält einen Warnungseintrag mit einer Quelle, bei der es sich um eine bestimmte Version von ASP.NET handelt, und der Ereignis-ID 1309. Das Ereignisprotokoll enthält eine der folgenden Meldungen:


Nachricht 1:

Bewerbungs informationen:
Anwendungsdomäne: /LM/W3SVC/1/ROOT/<App-Domäne>
Vertrauensstufe: Mittel
Virtueller Anwendungspfad: <VDIR-Pfad>
Anwendungspfad: <App-Pfad>
Maschinenname: <Maschinenname>
Prozessinformationen:
Prozess-ID: 0001
Prozessname: w3wp.exe
Kontoname: IIS APPPOOL\DefaultAppPool

Ausnahmeinformationen:
Ausnahmetyp: HttpException
Ausnahmemeldung: Die URL-codierten Formulardaten sind ungültig.
bei System.Web.HttpRequest.FillInFormCollection()
bei System.Web.HttpRequest.get_Form()
bei System.Web.HttpRequest.get_HasForm()
bei System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
bei System.Web.UI.Page.DeterminePostBackMode()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Nachricht 2:

Bewerbungs informationen:
Anwendungsdomäne: /LM/W3SVC/1/ROOT/<App-Domäne>
Vertrauensstufe: Mittel
Virtueller Anwendungspfad: <VDIR-Pfad>
Anwendungspfad: <App-Pfad>
Maschinenname: <Maschinenname>

Prozessinformationen:
Prozess-ID: 0001
Prozessname: w3wp.exe
Kontoname: IIS APPPOOL\DefaultAppPool

Ausnahmeinformationen:
Ausnahmetyp: InvalidOperationException
Ausnahmemeldung: Der Vorgang ist aufgrund des aktuellen Status des Objekts ungültig.
bei System.Web.HttpRequest.FillInFilesCollection()
bei System.Web.HttpRequest.get_Files()
at FileUpload.Page_Load(Object sender, EventArgs e)
bei System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
bei System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
bei System.Web.UI.Control.OnLoad(EventArgs e)
bei System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint


Nachricht 3:

Bewerbungs informationen:
Anwendungsdomäne: /LM/W3SVC/1/ROOT/<App-Domäne>
Vertrauensstufe: Mittel
Virtueller Anwendungspfad: <VDIR-Pfad>
Anwendungspfad: <App-Pfad>
Maschinenname: <Maschinenname>

Prozessinformationen:
Prozess-ID: 0001
Prozessname: w3wp.exe
Kontoname: IIS APPPOOL\DefaultAppPool

Ausnahmeinformationen:
Ausnahmetyp: InvalidOperationException
Ausnahmemeldung: Der Vorgang ist aufgrund des aktuellen Status des Objekts ungültig.
bei System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32-Tiefe)
bei System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32-Tiefe)
bei System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 DepthLimit, JavaScriptSerializer Serializer)
bei System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer Serializer, String-Eingabe, Typtyp, Int32 DepthLimit)
bei System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String-Eingabe)
bei Failing.Page_Load(Object sender, EventArgs e)
bei System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
bei System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
bei System.Web.UI.Control.OnLoad(EventArgs e)
bei System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



Die IIS-Protokolldatei zeigt einen Eintrag, der dem folgenden ähnelt:

2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Ursache

Das Microsoft-Sicherheitsupdate, auf das sich das Sicherheitsbulletin MS11-100 bezieht, ändert die standardmäßige maximale Anzahl von Formularschlüsseln, Dateien und JSON-Mitgliedern, die ASP.NET in einer Anfrage akzeptiert, auf 1.000. Diese Änderung wurde vorgenommen, um die Sicherheitslücke „Denial of Service" zu schließen, die im Microsoft-Sicherheitsbulletin MS11-100 dokumentiert ist.


Auflösung

Anwendungen, die diesen Grenzwert für Formularschlüssel oder Dateien erreichen, können das ASP.NET appSetting aspnet:MaxHttpCollectionKeys ändern, wie unten in der Konfigurationsdatei einer ASP.NET-Anwendung gezeigt. Diese Einstellung behebt Fehlermeldung 1 und Fehlermeldung 2 aus dem Abschnitt „Symptome".

<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>



Notiz
Wenn Sie ASP.NET 1.1 auf einem x86-basierten System verwenden, wird die Einstellung angepasst, indem dem folgenden Registrierungsschlüssel ein DWORD-Wert hinzugefügt wird:

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

Wenn Sie ASP.NET 1.1 auf einem x64-basierten System verwenden, wird die Einstellung angepasst, indem dem folgenden Registrierungsschlüssel ein DWORD-Wert hinzugefügt wird:

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




Anwendungen, die diesen Grenzwert für JSON-Nutzlasten erreichen, können das ASP.NET appSetting aspnet:MaxJsonDeserializerMembers ändern, wie unten in der Konfigurationsdatei einer ASP.NET-Anwendung gezeigt. Diese Einstellung behebt Fehlermeldung 3 aus dem Abschnitt „Symptome".

<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>




Hinweis Wenn Sie diesen Wert über die Standardeinstellung hinaus erhöhen, erhöht sich die Anfälligkeit Ihres Servers für die Denial-of-Service-Schwachstelle, die im Sicherheitsbulletin MS11-100 beschrieben wird.


Verweise

Weitere Informationen zum Sicherheitsbulletin MS11-100 finden Sie im folgenden TechNet-Artikel:

Microsoft Security Bulletin MS11-100 – Kritisch Für weitere Informationen klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

2638420 MS11-100: Sicherheitslücke im .NET Framework könnte eine Rechteerweiterung ermöglichen: 29. Dezember 2011

No comments:

Post a Comment