説明
予測可能な一時ファイル名を生成するAPIは、競合状態やシンボリックリンク攻撃につながる可能性があります。
想定される影響
- 意図しないファイルの上書き、情報漏えい、権限昇格のおそれがあります。
対処方法
名前だけを生成するAPIではなく、mkstempなどファイルの作成とオープンをアトミックに行うAPIを使ってください。返されたファイル記述子を使い、失敗を処理し、利用後はファイルを閉じて削除してください。
例
変更前
c
char name[] = "/tmp/app.XXXXXX";
mktemp(name);
FILE *f = fopen(name, "w");
変更後
c
char name[] = "/tmp/app.XXXXXX";
int fd = mkstemp(name);
変更前はmktempで名前を作ってから別の操作で開くため、その間に競合が起こり得ます。変更後は一時ファイルをアトミックに作成します。