概要
マイクロソフト セキュリティ更新プログラム MS11-100 では、HTTP 要求のフォーム キー、ファイル、および JSON メンバーの最大数が 1000 に制限されています。 この変更により、ASP.NET アプリケーションは、これらの要素が 1,000 を超える要求を拒否します。 これらの種類の要求を行う HTTP クライアントは拒否され、Web ブラウザーにエラー メッセージが表示されます。 エラー メッセージには通常、HTTP 500 状態コードが付いています。 この新しい制限は、アプリケーションごとに構成できます。 構成手順については、「解決方法」セクションを参照してください。
現象
多くのフォーム キー、ファイル、または JSON ペイロードを持つ ASP.NET 要求は、サーバーからエラー応答を受け取ります。 サーバー上のアプリケーション ログに、特定のバージョンの ASP.NET のソースとイベント ID 1309 の警告エントリがあります。 イベント ログには、次のいずれかのメッセージが含まれています。
メッセージ 1:
注
アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/ROOT/<App ドメイン>
信頼レベル: 中
アプリケーション仮想パス: <VDIR パス>
Application Path: <App Path>
マシン名: <Machine Name>
プロセス情報:
プロセス ID: 0001
プロセス名: w3wp.exe
アカウント名: IIS APPPOOL\DefaultAppPool
例外情報:
例外の種類: HttpException
例外メッセージ: URL でエンコードされたフォーム データが無効です。
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_HasForm()
System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) にて
at System.Web.UI.Page.DeterminePostBackMode()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
メッセージ 2:
注
アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/ROOT/<App ドメイン>
信頼レベル: 中
アプリケーション仮想パス: <VDIR パス>
Application Path: <App Path>
マシン名: <Machine Name>
プロセス情報:
プロセス ID: 0001
プロセス名: w3wp.exe
アカウント名: IIS APPPOOL\DefaultAppPool
例外情報:
例外の種類: InvalidOperationException
例外メッセージ: オブジェクトの現在の状態のため、操作は無効です。
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)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint
メッセージ 3:
注
アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/ROOT/<App ドメイン>
信頼レベル: 中
アプリケーション仮想パス: <VDIR パス>
Application Path: <App Path>
マシン名: <Machine Name>
プロセス情報:
プロセス ID: 0001
プロセス名: w3wp.exe
アカウント名: IIS APPPOOL\DefaultAppPool
例外情報:
例外の種類: InvalidOperationException
例外メッセージ: オブジェクトの現在の状態のため、操作は無効です。
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)
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 - 重大 詳細については、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
2638420 MS11-100: .NET Framework の脆弱性により特権の昇格が発生する可能性がある: 2011 年 12 月 29 日