CWE Rule 560
説明
ルールの説明
The product calls umask() with an incorrect argument that is specified as if it is an argument to chmod().
Polyspace 実装
ルール チェッカーは、[umask が chmod 型の引数と共に使用されています] をチェックします。
例
この問題は、chmod
への引数の形式で指定された引数が umask
コマンドに含まれており、想定外の可能性がある権限が付与される場合に発生します。次に例を示します。
umask
コマンドが、現在のユーザーよりも多い権限をグループに付与する。umask
コマンドが、グループよりも多い権限を他のユーザーに付与する。
新規ファイルでは、umask
引数またはマスク値によって、どの権限を設定 "しない" か、つまり、どの権限を削除するかが指定されます。このマスクはビット単位で符号を反転した後、新規ファイルでの権限に適用されます。これに対し、chmod
では指定されたとおりに権限が設定されます。
chmod
形式の引数を使用すると、想定とは正反対の権限が指定されることになります。このミスにより、新規のファイルとフォルダーに対する読み取りや書き込みのアクセス権が、外部ユーザーに対し意図せずに付与される可能性があります。
この欠陥を修正するには、以下のタスクの両方を実行します。
ユーザーの読み取り権限を有効にします。
mask の値の設定で、ユーザー (
u
) のオフにする権限数を、グループ (g
) の権限数以下にし、かつそのグループのオフにする権限数を、他のユーザー (o
) の権限数以下にします。つまり、u <= g <= o
になるようにします。
umask の値は、次を呼び出すことで確認できます。
umask
umask -S
#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
typedef mode_t (*umask_func)(mode_t);
const mode_t default_mode = (
S_IRUSR /* 00400 */
| S_IWUSR /* 00200 */
| S_IRGRP /* 00040 */
| S_IWGRP /* 00020 */
| S_IROTH /* 00004 */
| S_IWOTH /* 00002 */
); /* 00666 (i.e. -rw-rw-rw-) */
static void my_umask(mode_t mode)
{
umask(mode); //Noncompliant
}
int umask_use(mode_t m)
{
my_umask(default_mode);
return 0;
}
この例では、my_umask
という関数を使用して、既定のマスク モードを設定します。しかし、変数 default_mode
は権限 666、つまり -rw-rw-rw
を与え、umask
はこの値を否定します。この否定は、既定のマスク モードにより、ユーザー、グループ ユーザーおよび他の外部ユーザーに対し読み取りと書き込みの権限がオフになることを意味します。
1 つの修正方法として、my_umask
の default_mode
引数の符号を反転します。この修正により、umask
による否定が新規ファイルに対して無効になります。
#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
typedef mode_t (*umask_func)(mode_t);
const mode_t default_mode = (
S_IRUSR /* 00400 */
| S_IWUSR /* 00200 */
| S_IRGRP /* 00040 */
| S_IWGRP /* 00020 */
| S_IROTH /* 00004 */
| S_IWOTH /* 00002 */
); /* 00666 (i.e. -rw-rw-rw-) */
static void my_umask(mode_t mode)
{
umask(mode);
}
int umask_use(mode_t m)
{
my_umask(~default_mode);
return 0;
}
チェック情報
カテゴリ: その他 |
バージョン履歴
R2023a で導入
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)