CS.NPS

暗号化またはファイルへのアクセス権を設定せずにファイルのデータにアクセスする

ファイルがセキュアでない方法で作成または使用されると、アプリケーションおよびシステムデータが攻撃にさらされたままになる可能性があります。アプリケーションに危険なデータが挿入されたり、ファイルに保存されたデータへのアクセス、改変、または汚染が発生する可能性があります。CS.NPS チェッカーは、ファイルが暗号化されないまま、またはファイルへのアクセス権を設定せずに作成込まれたり、読み取られる状況にフラグを立てます。

脆弱性とリスク

ファイルが暗号化されていない、または適切なアクセス権の設定により制限されない場合、攻撃者はそれを利用し、重要な情報を操作します。

軽減と防止

この脆弱性を回避するには、次の操作を実行します。
  • .NET FrameworkSystem.IO.File クラス、System.IO.FileInfo クラス 、または System.IO.FileStream クラスの SetAccessControl メソッドを使います。
  • .NET FrameworkSystem.IO.File クラス、および System.IO.FileInfo クラスの Encrypt メソッドを使用します。

脆弱コード例

コピー
  using System.IO;
  
  class FileCreator 
  {
    public void WriteFile(string filePath, byte[] data, int length) 
    {
      FileStream fs = File.Create(filePath);    
      fs.Write(data, 0, length);    
      fs.Close();  
   }
 }

Klocwork はこの例では欠陥を報告します。それは、アクセス権を設定されずにファイルストリーム fs が作成され、メソッド SetAccessControl および Encrypt がファイルストリームにより書き込まれたデータを保護するために呼び出されないためです。

修正コード例

コピー
  using System.IO;

  class FileCreator 
  {
    public void WriteFile(string filePath, byte[] data, int length)
    {
       FileStream fs = File.Create(filePath, 1024, FileOptions.Encrypted); //no CS.NPS
       fs.Write(data, 0, length);
       fs.Close();  
   }
 }

Klocwork はこの例では欠陥を報告しません。コードがファイルを暗号化するためです。