説明
/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は、サービスが所有し、アクセスを制限したディレクトリとして事前に設定してください。既存のファイルや親ディレクトリを他のユーザーが置き換えられないことが前提です。ファイルの権限を設定し、オープンの失敗も処理してください。