安全でない一時ファイルの作成

安全でない一時ファイルの作成

説明

予測可能な一時ファイル名を生成する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で名前を作ってから別の操作で開くため、その間に競合が起こり得ます。変更後は一時ファイルをアトミックに作成します。

参考資料