Sensitive data printed out

Функция распечатывает уязвимые данные

Описание

Распечатанные уязвимые данные обнаруживают функции печати, такие как stdout или stderr, та уязвимая информация печати.

Средство проверки рассматривает следующее как уязвимую информацию:

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

  • Входные значения функций, такие как Windows®-specific функционируют 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++
Значение по умолчанию: 'off'
Синтаксис командной строки: SENSITIVE_DATA_PRINT
Удар: носитель
ID CWE: 532, 534, 535

Введенный в R2015b