MS16-035 をインストールすると、SignedXml クラスにてデタッチ シグネチャを利用した処理が失敗します

 

Platform SDK (Windows SDK) サポートチームです。

2016 年 3 月 9 日 にリリースしした セキュリティ更新プログラム MS16-035 をインストールすると、SignedXml クラスにてデタッチ シグネチャを利用した処理が失敗するとの報告を多数いただいております。

現在、MS16-035 に起因する問題として弊社にて調査中です。
皆様にはご迷惑をおかけし心苦しい限りではございますが、状況は本ブログにても随時更新していく予定ですので、お待ちいただけますようお願い申し上げます。

<参考技術情報>
----------------------------------------------------------------------------

SignedXml クラスの詳細については以下の技術情報をご参照ください

SignedXml クラス

https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.xml.signedxml(v=vs.110).aspx

----------------------------------------------------------------------------

セキュリティ更新プログラム MS16-035 の詳細については以下の技術情報をご参照ください

マイクロソフト セキュリティ情報 MS16-035 - 重要

セキュリティ機能のバイパスに対処する .NET Framework 用のセキュリティ更新プログラム (3141780)

https://technet.microsoft.com/library/security/MS16-035

----------------------------------------------------------------------------

 

<2016 年 3 月 11 日(金) 18:30 更新>

今回の MS 16-0353 で発生している現象に対して、お客様向けのガイダンスとして以下の KB 3148821 を発行しました事をご報告いたします。

After you apply security update 3141780, .NET Framework applications encounter exception errors or unexpected failures while processing files that contain SignedXml

https://support.microsoft.com/en-us/kb/3148821

上記の KB ではセキュリティ更新プログラムのインストールの後、レジストリ値 SignedXmlAllowDetachedSignature に 1 を設定いただく事で局所的に今回の問題を回避する形式とさせていただいております。(詳細は、Scenario 1 をご参照ください)

なお、64 bit OS上で 32 bit アプリケーションを動作させる場合( WoW64 形式)は、以下のレジストリパスにて SignedXmlAllowDetachedSignature に 1 を設定いただけますようお願い申し上げます。

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\Security

 

<2016 年 3 月 17 日(木 ) 12:30 更新>

参考情報として、以下の KB 3148821 の日本語訳をご案内せていただきます。

After you apply security update 3141780, .NET Framework applications encounter exception errors or unexpected failures while processing files that contain SignedXml

https://support.microsoft.com/en-us/kb/3148821

<日本語訳>
-------------------------------------------------------------------------------------------------------------

Summary

いずれかの 3141780 セキュリティ更新プログラム (マイクロソフト セキュリティ情報MS16-035 に記載されています) をインストールした後で、.NET アプリケーションで SignedXml が含まれるファイルを処理しているときに例外エラーまたは予期しないエラーが発生することがあります。

More Information

重要 このセクション、方法、またはタスクには、レジストリの変更方法が記載されています。レジストリを誤って変更すると、深刻な問題が発生することがあります。レジストリを変更する際には十分に注意してください。万一に備えて、編集の前にレジストリをバックアップしてください。問題が発生した場合でも、レジストリを復元できます。レジストリのバックアップ方法および復元方法の詳細を参照するには、以下のマイクロソフト サポート技術情報番号をクリックしてください。

322756 Windows でレジストリをバックアップおよび復元する方法

シナリオ 1
シナリオ 1 の現象

マネージ アプリケーションが次の署名が含まれる例外エラーを返します。

System.Security.Cryptography.CryptographicException: Uri [FileOrUrl] を解決できません。


System.Security.Cryptography.CryptographicException: Uri testfile.xml を解決できません。

シナリオ 1 の解決方法

このケースでは、お客様が次のレジストリ キーをシステムに適用することができます。

レジストリエントリ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security@SignedXmlAllowDetachedSignature=1

.Reg ファイルがダウンロードできます
この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリの変更を有効にします。
SignedXml-ExternalReferences.reg (32-bit システム上の 32-bit プロセスおよび 64-bit システム上の 64-bit プロセス)
SignedXml-ExternalReferences.Wow6432.reg (64-bit システム上の 32-bit プロセス)

注意事項

· このレジストリ エントリは、DWord エントリにする必要があります。

· このレジストリ エントリは、ダイジェストを計算するために検証されているドキュメントの外部にあるリソースを開く操作またはダウンロードの以前の動作を復元します。

警告 このレジストリ キーを有効にすると、サービスの拒否、分散サービス拒否、情報漏えい、署名のバイパス、リモートでのコードの実行などのセキュリティの脆弱性が発生する可能性があります。

 

シナリオ 2

シナリオ 2 の現象

署名の検証が成功すると予想されるときに失敗します。
シナリオ 2 の解決方法

このシナリオでは、コンテンツの署名ブロックを調べます。次の署名ブロックが含まれている場合は、次のレジストリ エントリの適用を検討してください。

署名ブロックの例
<Document>

<Signature xmlns="https://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="https://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="...">

<Transforms>

                       <Transform Algorithm="https://www.w3.org/TR/1999/REC-xpath-19991116" />

</Transforms>

<DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1" />

<DigestValue>…</DigestValue>

</Reference>

</SignedInfo>

<SignatureValue>…</SignatureValue>

</Signature>


</Document>

レジストリエントリ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXPathTransform=https://www.w3.org/TR/1999/REC-xpath-19991116

.Reg ファイルがダウンロードできます
この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリの変更を有効にします。
XmlDSigXPathTransform.reg (32-bit システム上の 32-bit プロセスおよび 64-bit システム上の 64-bit プロセス)
XmlDSigXPathTransform.Wow6432.reg (64-bit システム上の 32-bit プロセス)
署名ブロックに次のコードが含まれている場合は、次のレジストリ エントリの適用を検討してください。

署名ブロックの例
<Document>

<Signature xmlns="https://www.w3.org/2000/09/xmldsig#">

<SignedInfo>

<CanonicalizationMethod Algorithm="https://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

<SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<Reference URI="...">

<Transforms>

                  <Transform Algorithm="https://www.w3.org/TR/1999/REC-xslt-19991116" />

</Transforms>

<DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1" />

<DigestValue>…</DigestValue>

</Reference>

</SignedInfo>

<SignatureValue>…</SignatureValue>

</Signature>


</Document>

レジストリエントリ

HKEY_LOCAL_MACHINE\\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXsltTransform=https://www.w3.org/TR/1999/REC-xslt-19991116

.Reg ファイルがダウンロードできます
この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリの変更を有効にします。
XmlDSigXsltTransform.reg (32-bit システム上の 32-bit プロセスおよび 64-bit システム上の 64-bit プロセス)
XmlDSigXsltTransform.Wow6432.reg (64-bit システム上の 32-bit プロセス)

:
.NET Framework で提供され、署名済みドキュメントから入力を受け付けない XML 署名変換のみが既定で有効になります。入力を受け付ける変換またはカスタム変換を有効にするには、このレジストリ エントリ内で REG_SZ-typed 値のデータとしてその変換の登録済み URI を指定する必要があります。値の名前は処理されないので、コンピューターの管理者が任意に決めることができます。
警告 XPath および XSLT 変換を使用すると、ドキュメントの送信者がリソースを多く消費するドキュメントを構築できるようになります。これにより、サービス拒否が発生する可能性があります。

-------------------------------------------------------------------------------------------------------------

 

<補足>
上記の内容はあくまで 2016 年 3 月 17 日(木)12時 30 分(日本時間)時点での KB 3148821 の内容の日本語訳となります。
以降は、以下の URL にて日本語訳を随時更新していく予定です。

.NET Framework アプリケーションの例外エラーまたは予期しないエラーが、セキュリティ更新プログラム 3141780 をインストールした後で SignedXml が含まれるファイルを処理しているときに発生する

https://support.microsoft.com/ja-jp/kb/3148821

 

<2016 年 3 月 22 日(火 ) 14:30 更新>

お客様の環境によりましては、後述の KB 3135996 をインストールしようとした際に以下の何れかのエラーが発生し、インストールできない場合があります。

   +「証明書チェーンを、信頼されたルート機関に対して構築できませんでした。」

   +「A certificate chain could not be built to a trusted root authority.」

   +エラーコード 800B010A

 

KB 3135996:[MS16-035] Windows Vista Service Pack 2、Windows Server 2008 Service Pack 2、Windows 7 Service Pack 1、および Windows Server 2008 R2 Service Pack 1 用の .NET Framework 4.5.2 のセキュリティ更新プログラムについて (2016 年 3 月 8 日)

https://support.microsoft.com/ja-jp/kb/3135996

 

原因は、該当の PC がインターネットから切断されている等の理由により、弊社より提供している最新の証明書がお客様の環境でインストールされていないためとなります。

上記でご案内したエラーが発生した際は、以下の KB 3149737 にて最新の証明書のインストール方法をご案内していますので、お試しください。

 

KB 3149737 :Windows Vista SP2、Windows Server 2008 SP2、Windows 7 SP1、および Windows Server 2008 R2 SP1 用の .NET Framework 4.5.2 の更新プログラム 3135996 および 3136000 の既知の問題

https://support.microsoft.com/ja-jp/kb/3149737

 

Platform SDK (Windows SDK) サポートチームです。

2016 年 3 月 9 日 にリリースしした セキュリティ更新プログラム MS16-035 をインストールすると、SignedXml クラスにてデタッチ シグネチャを利用した処理が失敗するとの報告を多数いただいております。

現在、MS16-035 に起因する問題として弊社にて調査中です。
皆様にはご迷惑をおかけし心苦しい限りではございますが、状況は本ブログにても随時更新していく予定ですので、お待ちいただけますようお願い申し上げます。

<参考技術情報>
----------------------------------------------------------------------------

SignedXml クラスの詳細については以下の技術情報をご参照ください

SignedXml クラス

https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.xml.signedxml(v=vs.110).aspx

----------------------------------------------------------------------------

セキュリティ更新プログラム MS16-035 の詳細については以下の技術情報をご参照ください

マイクロソフト セキュリティ情報 MS16-035 - 重要

セキュリティ機能のバイパスに対処する .NET Framework 用のセキュリティ更新プログラム (3141780)

https://technet.microsoft.com/library/security/MS16-035

----------------------------------------------------------------------------

 

<2016 年 3 月 11 日(金) 18:30 更新>

今回の MS 16-0353 で発生している現象に対して、お客様向けのガイダンスとして以下の KB 3148821 を発行しました事をご報告いたします。

After you apply security update 3141780, .NET Framework applications encounter exception errors or unexpected failures while processing files that contain SignedXml

https://support.microsoft.com/en-us/kb/3148821

上記の KB ではセキュリティ更新プログラムのインストールの後、レジストリ値 SignedXmlAllowDetachedSignature に 1 を設定いただく事で局所的に今回の問題を回避する形式とさせていただいております。(詳細は、Scenario 1 をご参照ください)

なお、64 bit OS上で 32 bit アプリケーションを動作させる場合( WoW64 形式)は、以下のレジストリパスにて SignedXmlAllowDetachedSignature に 1 を設定いただけますようお願い申し上げます。

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\Security

 

<2016 年 3 月 17 日(木 ) 12:30 更新>

参考情報として、以下の KB 3148821 の日本語訳をご案内せていただきます。

After you apply security update 3141780, .NET Framework applications encounter exception errors or unexpected failures while processing files that contain SignedXml

https://support.microsoft.com/en-us/kb/3148821

<日本語訳>
-------------------------------------------------------------------------------------------------------------

Summary

いずれかの 3141780 セキュリティ更新プログラム (マイクロソフト セキュリティ情報MS16-035 に記載されています) をインストールした後で、.NET アプリケーションで SignedXml が含まれるファイルを処理しているときに例外エラーまたは予期しないエラーが発生することがあります。

More Information

重要 このセクション、方法、またはタスクには、レジストリの変更方法が記載されています。レジストリを誤って変更すると、深刻な問題が発生することがあります。レジストリを変更する際には十分に注意してください。万一に備えて、編集の前にレジストリをバックアップしてください。問題が発生した場合でも、レジストリを復元できます。レジストリのバックアップ方法および復元方法の詳細を参照するには、以下のマイクロソフト サポート技術情報番号をクリックしてください。

322756 Windows でレジストリをバックアップおよび復元する方法

シナリオ 1
シナリオ 1 の現象

マネージ アプリケーションが次の署名が含まれる例外エラーを返します。

System.Security.Cryptography.CryptographicException: Uri [FileOrUrl] を解決できません。


System.Security.Cryptography.CryptographicException: Uri testfile.xml を解決できません。

シナリオ 1 の解決方法

このケースでは、お客様が次のレジストリ キーをシステムに適用することができます。

レジストリエントリ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security@SignedXmlAllowDetachedSignature=1

.Reg ファイルがダウンロードできます
この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリの変更を有効にします。
SignedXml-ExternalReferences.reg (32-bit システム上の 32-bit プロセスおよび 64-bit システム上の 64-bit プロセス)
SignedXml-ExternalReferences.Wow6432.reg (64-bit システム上の 32-bit プロセス)

注意事項

· このレジストリ エントリは、DWord エントリにする必要があります。

· このレジストリ エントリは、ダイジェストを計算するために検証されているドキュメントの外部にあるリソースを開く操作またはダウンロードの以前の動作を復元します。

警告 このレジストリ キーを有効にすると、サービスの拒否、分散サービス拒否、情報漏えい、署名のバイパス、リモートでのコードの実行などのセキュリティの脆弱性が発生する可能性があります。

 

シナリオ 2

シナリオ 2 の現象

署名の検証が成功すると予想されるときに失敗します。
シナリオ 2 の解決方法

このシナリオでは、コンテンツの署名ブロックを調べます。次の署名ブロックが含まれている場合は、次のレジストリ エントリの適用を検討してください。

署名ブロックの例
<Document>

<Signature xmlns="https://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="https://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="...">

<Transforms>

                       <Transform Algorithm="https://www.w3.org/TR/1999/REC-xpath-19991116" />

</Transforms>

<DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1" />

<DigestValue>…</DigestValue>

</Reference>

</SignedInfo>

<SignatureValue>…</SignatureValue>

</Signature>


</Document>

レジストリエントリ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXPathTransform=https://www.w3.org/TR/1999/REC-xpath-19991116

.Reg ファイルがダウンロードできます
この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリの変更を有効にします。
XmlDSigXPathTransform.reg (32-bit システム上の 32-bit プロセスおよび 64-bit システム上の 64-bit プロセス)
XmlDSigXPathTransform.Wow6432.reg (64-bit システム上の 32-bit プロセス)
署名ブロックに次のコードが含まれている場合は、次のレジストリ エントリの適用を検討してください。

署名ブロックの例
<Document>

<Signature xmlns="https://www.w3.org/2000/09/xmldsig#">

<SignedInfo>

<CanonicalizationMethod Algorithm="https://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

<SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<Reference URI="...">

<Transforms>

                  <Transform Algorithm="https://www.w3.org/TR/1999/REC-xslt-19991116" />

</Transforms>

<DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1" />

<DigestValue>…</DigestValue>

</Reference>

</SignedInfo>

<SignatureValue>…</SignatureValue>

</Signature>


</Document>

レジストリエントリ

HKEY_LOCAL_MACHINE\\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXsltTransform=https://www.w3.org/TR/1999/REC-xslt-19991116

.Reg ファイルがダウンロードできます
この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリの変更を有効にします。
XmlDSigXsltTransform.reg (32-bit システム上の 32-bit プロセスおよび 64-bit システム上の 64-bit プロセス)
XmlDSigXsltTransform.Wow6432.reg (64-bit システム上の 32-bit プロセス)

:
.NET Framework で提供され、署名済みドキュメントから入力を受け付けない XML 署名変換のみが既定で有効になります。入力を受け付ける変換またはカスタム変換を有効にするには、このレジストリ エントリ内で REG_SZ-typed 値のデータとしてその変換の登録済み URI を指定する必要があります。値の名前は処理されないので、コンピューターの管理者が任意に決めることができます。
警告 XPath および XSLT 変換を使用すると、ドキュメントの送信者がリソースを多く消費するドキュメントを構築できるようになります。これにより、サービス拒否が発生する可能性があります。

-------------------------------------------------------------------------------------------------------------

 

<補足>
上記の内容はあくまで 2016 年 3 月 17 日(木)12時 30 分(日本時間)時点での KB 3148821 の内容の日本語訳となります。
以降は、以下の URL にて日本語訳を随時更新していく予定です。

.NET Framework アプリケーションの例外エラーまたは予期しないエラーが、セキュリティ更新プログラム 3141780 をインストールした後で SignedXml が含まれるファイルを処理しているときに発生する

https://support.microsoft.com/ja-jp/kb/3148821

 

<2016 年 3 月 22 日(火 ) 14:30 更新>

お客様の環境によりましては、後述の KB 3135996 をインストールしようとした際に以下の何れかのエラーが発生し、インストールできない場合があります。

   +「証明書チェーンを、信頼されたルート機関に対して構築できませんでした。」

   +「A certificate chain could not be built to a trusted root authority.」

   +エラーコード 800B010A

 

KB 3135996:[MS16-035] Windows Vista Service Pack 2、Windows Server 2008 Service Pack 2、Windows 7 Service Pack 1、および Windows Server 2008 R2 Service Pack 1 用の .NET Framework 4.5.2 のセキュリティ更新プログラムについて (2016 年 3 月 8 日)

https://support.microsoft.com/ja-jp/kb/3135996

 

原因は、該当の PC がインターネットから切断されている等の理由により、弊社より提供している最新の証明書がお客様の環境でインストールされていないためとなります。

上記でご案内したエラーが発生した際は、以下の KB 3149737 にて最新の証明書のインストール方法をご案内していますので、お試しください。

 

KB 3149737 :Windows Vista SP2、Windows Server 2008 SP2、Windows 7 SP1、および Windows Server 2008 R2 SP1 用の .NET Framework 4.5.2 の更新プログラム 3135996 および 3136000 の既知の問題

https://support.microsoft.com/ja-jp/kb/3149737

 

<2016 年 4 月 7 日(木 ) 14:30 更新>

本件の MS16-035 に関連して、SignedXml Class の英語版リファレンスを更新いたしました。
SignedXml クラスにおけるデタッチ シグネチャの利用制限等の詳細をご案内していますので、是非ご参照ください。

SignedXml Class

https://msdn.microsoft.com/en-us/library/system.security.cryptography.xml.signedxml

*「Remarks」欄以降の内容を変更させていただいております。