Уязвимые данные распечатываются

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

Описание

Распечатанные уязвимые данные обнаруживают функции печати, такие как 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