このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
CWE Rule 377
説明
ルールの説明
Creating and using insecure temporary files can leave application and system data vulnerable to attack.
Polyspace 実装
ルール チェッカーは、[セキュリティで保護されていない一時ファイルを使用しています] をチェックします。
例
この問題は、セキュリティで保護されていない一時ファイル ルーチンが使用された場合に発生します。
標準一時ファイル ルーチンで生成されたファイル名を攻撃者が推定すると、その攻撃者には次のことが可能になります。
ファイル名が生成される際に競合状態を発生させる。
同じ名前の、悪意のある内容で埋められたファイルを前もって作成する。プログラムがそのファイルを読み込むと、攻撃者のファイルによって悪意のあるコードが投入される可能性があります。
機密データを格納しているファイルへのシンボリック リンクを作成する。プログラムが一時ファイルに書き込みを行うと、機密データが削除されます。
一時ファイルを作成するために、POSIX.1-2001 の mkstemp
のような、よりセキュリティで保護された標準一時ファイル ルーチンを使用します。
また、フラグが許容されるルーチン (mkostemp
など) で一時ファイルを作成する場合は、排他フラグ O_EXCL
を使用して競合状態を回避します。
#define _BSD_SOURCE
#define _XOPEN_SOURCE
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int test_temp()
{
char tpl[] = "abcXXXXXX";
char suff_tpl[] = "abcXXXXXXsuff";
char *filename = NULL;
int fd;
filename = tempnam("/var/tmp", "foo_");
if (filename != NULL)
{
printf("generated tmp name (%s) in (%s:%s:%s)\n",
filename, getenv("TMPDIR") ? getenv("TMPDIR") : "$TMPDIR",
"/var/tmp", P_tmpdir);
fd = open(filename, O_CREAT, S_IRWXU|S_IRUSR); //Noncompliant
if (fd != -1)
{
close(fd);
unlink(filename);
return 1;
}
}
return 0;
}
この例では、open
がセキュリティで保護されない一時ファイルを使おうとするため、Bug Finder によってフラグが立てられます。ファイルは排他的権限なしで開かれます。攻撃者はこのファイルにアクセスして、さまざまなリスクを引き起こすことができます。
O_EXCL
フラグを追加1 つの修正方法として、一時ファイルを開く際に O_EXCL
フラグを追加します。
#define _BSD_SOURCE
#define _XOPEN_SOURCE
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int test_temp()
{
char tpl[] = "abcXXXXXX";
char suff_tpl[] = "abcXXXXXXsuff";
char *filename = NULL;
int fd;
filename = tempnam("/var/tmp", "foo_");
if (filename != NULL)
{
printf("generated tmp name (%s) in (%s:%s:%s)\n",
filename, getenv("TMPDIR") ? getenv("TMPDIR") : "$TMPDIR",
"/var/tmp", P_tmpdir);
fd = open(filename, O_CREAT|O_EXCL, S_IRWXU|S_IRUSR);
if (fd != -1)
{
close(fd);
unlink(filename);
return 1;
}
}
return 0;
}
チェック情報
カテゴリ: その他 |
バージョン履歴
R2024a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)