Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
こんにちは、Platform SDK (Windows SDK) サポートチームです。2018 年 5 月 8 日に公開された CVE-2018-0765 のセキュリティ更新に伴い、 System.Security.Cryptography.Xml.SignedXml.LoadXml メソッドに行われた変更についてご案内します。
現象
2018 年 5 月 8 日に公開された CVE-2018-0765 のセキュリティの更新をインストールいただいた環境にて System.Security.Cryptography.Xml.SignedXml.LoadXml メソッドを利用して署名用の XML ファイルをロードした場合、Reference 要素 および Transform 要素が一定数以上定義されていると、「CryptographicException: 間違った形式の SignedInfo/Reference 要素です。」 例外が発生します。具体的な上限は以下の通りになります。
・Reference 要素内の Transform 要素が 10 以上。
・SignedInfo 要素内の Reference 要素が 100 以上。
原因
この上限はセキュリティ強化のために行われており、例外の発生は想定された動作になります。これまで Reference 要素 および Transform 要素は無制限に定義可能でしたが、セキュリティ攻撃に利用される危険性があると判断し、攻撃を防ぐために上限を設定しました。この情報は下記資料に公開しています。
CVE-2018-0765 | .NET および .NET Core のサービス拒否の脆弱性
https://portal.msrc.microsoft.com/ja-JP/security-guidance/advisory/CVE-2018-0765
新しく設定された上限の実装は、下記 System.Security.Cryptography.Xml 名前空間内にあるクラスのソースコードからも確認できます。
https://referencesource.microsoft.com/#System.Security/system/security/cryptography/xml/utils.cs,309
309行目 (2018 年 6 月 12 日時点)
long maxTransforms = GetNetFxSecurityRegistryValue("SignedXmlMaxTransformsPerReference", 10);
https://referencesource.microsoft.com/#System.Security/system/security/cryptography/xml/utils.cs,331
331行目 (2018 年 6 月 12 日時点)
long maxReferences = GetNetFxSecurityRegistryValue("SignedXmlMaxReferencesPerSignedInfo", 100);
回避策
この上限を変更する SignedXml クラスのプロパティ等は用意されていません。各要素を上限値以内にして回避してください。