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

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

修正コード例

1  using System;
2  using System.IO;
3  using System.Security.AccessControl;
4
5  class FileCreator {
6    public void WriteFile(string filePath, byte[] data, int length) {
7      FileStream fs = File.Create(filePath);
8      fs.SetAccessControl(@"Domain\Account", FileSystemRights.ReadData, AccessControlType.Allow);
9      fs.Write(data, 0, length);
10     fs.Close();  
11    }
12  }  

Klocwork はこの例では欠陥を報告しません。それは、ファイルにデータを書き込む前に、ファイルストリームへのアクセス権が設定されるためです。