メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

機密データが出力されました

関数により機密データが出力される

説明

この欠陥は、stdoutstderr などの出力関数が機密情報を出力した場合に発生します。

チェッカーは、次の情報を機密情報と見なします。

  • getpwgetpwnamgetpwuid などのパスワード操作関数の戻り値。

  • Windows® 固有の関数 LogonUser などの関数の入力値。

リスク

パスワードやユーザー情報などの機密情報が出力されると、攻撃者もその情報にアクセスできるようになります。

修正方法

この欠陥の 1 つの修正方法として、機密情報を出力しないようにします。

ログ ファイルを外部ファイルに保存する場合は、ファイルに対する権限を設定して、ログ ファイル情報に攻撃者がアクセスできないようにします。

すべて展開する

#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

extern void verify_null(const char* buf);
void bug_sensitivedataprint(const char * my_user) {
    struct passwd* result, pwd;
    long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
    char buf[1024] = "";
    getpwnam_r(my_user, &pwd, buf, bufsize, &result);
    puts("Name\n");
    puts(pwd.pw_name);
    puts("PassWord\n");
    puts(pwd.pw_passwd);
    memset(buf, 0, sizeof(buf));
    verify_null(buf);
}

この例では、Bug Finder が、パスワード pwd.pw_passwd を出力する puts にフラグを立てます。

修正 — パスワードを難読化

1 つの修正方法として、パスワード情報を難読化して、その情報が見えないようにします。

#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

extern void verify_null(const char* buf);

void sensitivedataprint(const char * my_user) {
    struct passwd* result, pwd;
    long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
    char buf[1024] = "";
    getpwnam_r(my_user, &pwd, buf, bufsize, &result);
    puts("Name\n");
    puts(pwd.pw_name);
    puts("PassWord\n");
    puts("XXXXXXXX\n"); 
    memset(buf, 0, sizeof(buf));
    verify_null(buf);
}

結果情報

グループ: セキュリティ
言語: C | C++
既定値: オフ
コマンド ライン構文: SENSITIVE_DATA_PRINT
影響度: Medium

バージョン履歴

R2015b で導入