exponenta event banner

Распечатанные конфиденциальные данные

Функция печати конфиденциальных данных

Описание

Этот дефект возникает при выполнении функций печати, таких как stdout или stderr распечатать конфиденциальную информацию.

В качестве конфиденциальной информации средство проверки считает следующее:

  • Возвращаемые значения функций управления паролем, например getpw, getpwnam или getpwuid.

  • Входные значения функций, таких как специфичная для Windows ® функцияLogonUser.

Риск

Печать конфиденциальной информации, такой как пароли или сведения о пользователе, позволяет злоумышленнику получить дополнительный доступ к этой информации.

Зафиксировать

Одно из исправлений этого дефекта заключается в том, чтобы не распечатывать конфиденциальную информацию.

При сохранении файла журнала во внешнем файле установите разрешения на доступ злоумышленников к данным файла журнала.

Примеры

развернуть все

#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);
}

В этом примере флаги поиска ошибок puts для печати пароля pwd.pw_passwd.

Исправление - запутать пароль

Одно из возможных исправлений состоит в том, чтобы запутать информацию о пароле так, чтобы она не была видна.

#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
Воздействие: среднее
CWE ID: 532, 534, 535
Представлен в R2015b