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);
         }
     }
 }

透過的なメソッドがバイト配列からアセンブリをロードしているため、規則はそのコードで発動します。