誰でも書き込めるディレクトリでの重要ファイルの使用

誰でも書き込めるディレクトリでの重要ファイルの使用

説明

/tmp、/var/tmp、/dev/shmなど他のユーザーも書き込めるディレクトリに重要なファイルを作ると、他のユーザーに操作を妨害される可能性があります。

想定される影響

  • シンボリックリンク攻撃、ファイルの置き換え、競合状態、データの改ざんが起こるおそれがあります。

対処方法

所有者とアクセス権限を制限したサービス専用ディレクトリか、アトミックに一時ファイルを作成するAPIを使ってください。パス名を変えるだけでは権限は設定されません。

例

変更前

c
FILE *f = fopen("/tmp/app.log", "w");

変更後

c
FILE *f = fopen("/var/lib/app/app.log", "w");

変更前は他のユーザーも書き込める場所にファイルを作ります。変更後の/var/lib/appは、サービスが所有し、アクセスを制限したディレクトリとして事前に設定してください。既存のファイルや親ディレクトリを他のユーザーが置き換えられないことが前提です。ファイルの権限を設定し、オープンの失敗も処理してください。

参考資料