exponenta event banner

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

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

Описание

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