CS.NPS

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

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

脆弱性とリスク

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

軽減と防止

この脆弱性を回避するには、次の操作を実行します。
  • System.IO.FileSystem.IO.FileInfo , または System.IO.FileStream.Net Framework クラス の 関数 SetAccessControl を使用します。
  • 関数 Encrypt of System.IO.File および System.IO.FileInfo.Net Framework クラスを使用します。

脆弱コード例

コピー
  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 はこの例では欠陥を報告しません。コードがファイルを暗号化するためです。