EN JP CN

CS.NPS

CS.NPS

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

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

脆弱性とリスク

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

軽減と防止

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

脆弱コード例

1  using System.IO;
2  
3  class FileCreator 
4  {
5    public void WriteFile(string filePath, byte[] data, int length) 
6    {
7      FileStream fs = File.Create(filePath);    
8      fs.Write(data, 0, length);    
9      fs.Close();  
10   }
11 }

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

修正コード例

1  using System.IO;
2
3  class FileCreator 
4  {
5    public void WriteFile(string filePath, byte[] data, int length)
6    {
7       FileStream fs = File.Create(filePath, 1024, FileOptions.Encrypted); //no CS.NPS
8       fs.Write(data, 0, length);
9       fs.Close();  
10   }
11 }  

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