CS.NPS
暗号化またはファイルへのアクセス権を設定せずにファイルのデータにアクセスする
ファイルがセキュアでない方法で作成または使用されると、アプリケーションおよびシステムデータが攻撃にさらされたままになる可能性があります。アプリケーションに危険なデータが挿入されたり、ファイルに保存されたデータへのアクセス、改変、または汚染が発生する可能性があります。CS.NPS チェッカーは、ファイルが暗号化されないまま、またはファイルへのアクセス権を設定せずに作成込まれたり、読み取られる状況にフラグを立てます。
脆弱性とリスク
ファイルが暗号化されていない、または適切なアクセス権の設定により制限されない場合、攻撃者はそれを利用し、重要な情報を操作します。
軽減と防止
この脆弱性を回避するには、次の操作を実行します。
- .NET Framework の System.IO.File クラス、System.IO.FileInfo クラス 、または System.IO.FileStream クラスの SetAccessControl メソッドを使います。
- .NET Framework の System.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 はこの例では欠陥を報告しません。コードがファイルを暗号化するためです。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。