概要
Microsoft セキュリティ更新プログラム MS11-100 は、HTTP 要求内のフォーム キー、ファイル、および JSON メンバーの最大数を 1000 に制限します。この変更のために、ASP.NET アプリケーションは、1000 を超えるこれらの要素を含む要求を拒否します。このような種類の要求を実行する HTTP クライアントは拒否され、Web ブラウザーにエラー メッセージが表示されます。このエラー メッセージには通常 HTTP 500 ステータス コードが含まれています。この新しい制限は、アプリケーションごとに構成できます。構成手順については、「解決方法」を参照してください。
現象
数多くのフォーム キー、ファイル、または JSON ペイロードを含む ASP.NET 要求を実行すると、サーバーからエラー応答を受け取ります。サーバーのアプリケーション ログには、ASP.NET の特定のバージョンであるソース、およびイベント ID 1309 を含む警告エントリが記録されます。イベント ログには、次のいずれかのメッセージが含まれています。
メッセージ 1:
アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/ROOT/<アプリケーション ドメイン>
信頼レベル: 中
アプリケーションの仮想パス: <VDIR パス>
アプリケーションのパス: <アプリケーションのパス>
コンピューター名:<コンピューター名>
プロセス情報:
プロセス ID: 0001
プロセス名: w3wp.exe
アカウント名: IIS APPPOOL\DefaultAppPool
例外情報:
例外の種類: HttpException
例外メッセージ: URL にエンコードされたフォーム データが有効ではありません。
System.Web.HttpRequest.FillInFormCollection()
System.Web.HttpRequest.get_Form()
System.Web.HttpRequest.get_HasForm()
System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
System.Web.UI.Page.DeterminePostBackMode()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
メッセージ 2:
アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/ROOT/<アプリケーション ドメイン>
信頼レベル: 中
アプリケーションの仮想パス: <VDIR パス>
アプリケーションのパス: <アプリケーションのパス>
コンピューター名:<コンピューター名>
プロセス情報:
プロセス ID: 0001
プロセス名: w3wp.exe
アカウント名: IIS APPPOOL\DefaultAppPool
例外情報:
例外の種類: InvalidOperationException
例外メッセージ: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。
System.Web.HttpRequest.FillInFilesCollection()
System.Web.HttpRequest.get_Files()
FileUpload.Page_Load(Object sender, EventArgs e)
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint
メッセージ 3:
アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/ROOT/<アプリケーション ドメイン>
信頼レベル: 中
アプリケーションの仮想パス: <VDIR パス>
アプリケーションのパス: <アプリケーションのパス>
コンピューター名:<コンピューター名>
プロセス情報:
プロセス ID: 0001
プロセス名: w3wp.exe
アカウント名: IIS APPPOOL\DefaultAppPool
例外情報:
例外の種類: InvalidOperationException
例外メッセージ: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
Failing.Page_Load(Object sender, EventArgs e)
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
IIS のログ ファイルに次のようなエントリが表示されます。
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187
原因
セキュリティ情報 MS11-100 が提供するマイクロソフトセキュリティ更新プログラムは、ASP.NET が要求で受け入れるフォーム キー、ファイル、および JSON メンバーの既定の最大数を 1,000 に変更します。この変更は、マイクロソフトセキュリティ情報 MS11-100 に記載されているサービス拒否攻撃に関する脆弱性を解決するために行われました。
解決方法
フォーム キーまたはファイルのこの制限に達するアプリケーションの場合は、ASP.NET アプリケーションの構成ファイル内で ASP.NET appSetting aspnet:MaxHttpCollectionKeys を下に示すように変更できます。この設定により、「現象」に記載されているエラー メッセージ 1 およびエラー メッセージ 2 が解決します。
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>
注: x86 ベースのシステムで ASP.NET 1.1 を使用している場合は、DWORD 値を次のレジストリ キーに追加することによって設定が調整されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
x64 ベースのシステムで ASP.NET 1.1 を使用している場合は、DWORD 値を次のレジストリ キーに追加することによって設定が調整されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
JSON ペイロードのこの制限に達するアプリケーションの場合は、ASP.NET アプリケーションの構成ファイル内で ASP.NET appSetting aspnet:MaxJsonDeserializerMembers を下に示すように変更できます。この設定により、「現象」に記載されているエラー メッセージ 3 が解決します。
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>
注: この値を既定の設定から増やすと、セキュリティ情報 MS11-100 に記載されているサービス拒否に関するサーバーの脆弱性が悪化します。
関連情報
セキュリティ情報 MS11-100 の詳細については、次の TechNet の資料を参照してください。
マイクロソフト セキュリティ情報 MS11-100 - 緊急詳細については、以下のサポート技術情報番号をクリックしてください。
2638420 [MS11-100] .NET Framework の脆弱性により、特権が昇格される (2011 年 12 月 29 日)