tmpnamの危険な使用

tmpnamの危険な使用

説明

tmpnam 系のAPIは、予測可能な一時ファイル名を生成する場合があります。名前の生成とファイルの作成が分かれているため、その間に競合状態が生じます。

想定される影響

  • シンボリックリンクを使った攻撃、任意のファイルの上書き、情報漏えい

対処方法

mkstemp のように、ファイルをアトミックに作成するAPIを使ってください。

例

変更前

c
char name[L_tmpnam];
tmpnam(name);

変更後

c
char name[] = "/tmp/app.XXXXXX";
int fd = mkstemp(name);

説明:

  • 変更前: 一時ファイル名だけを生成するため、その後のファイル作成までの間に競合が生じます。
  • 変更後: 名前の選択とファイルの作成をアトミックに行います。

参考資料