CS.SV.TRANSP.ASSEMBLY_LOAD
透過的なコードはバイト配列からアセンブリをロードしてはなりません。
透過的なコードはセキュリティが機密のアクションを実行できないため、透過的なコードに対するセキュリティレビューは、クリティカルなコードに対するセキュリティレビューほど徹底していません。バイト配列からロードされたアセンブリは、透過的なコードでは気付かれない場合があり、そのバイト配列には、クリティカルなコード、または監査が必要になる、より重要性の高いセーフクリティカルなコードが含まれている場合があります。このため、透過的なコードはバイト配列からアセンブリをロードしてはなりません。
軽減と防止
この規則の違反を修正するには、アセンブリをロードしているメソッドを SecurityCriticalAttribute または SecuritySafeCriticalAttribute 属性でマークします。
脆弱コード例
コピー
using System;
using System.IO;
using System.Reflection;
namespace TransparencyWarningsDemo
{
public class TransparentMethodsLoadAssembliesFromByteArraysClass
{
public void TransparentMethod()
{
byte[] assemblyBytes = File.ReadAllBytes("DependentAssembly.dll");
// CA2144 violation - transparent code loading an assembly via byte array. The fix here is to
// either make TransparentMethod critical or safe-critical.
Assembly dependent = Assembly.Load(assemblyBytes);
}
}
}
透過的なメソッドがバイト配列からアセンブリをロードしているため、規則はそのコードで発動します。