Vulnerable permission assignments

Аргумент дает полномочия чтения/записи/поиска внешним пользователям

Описание

Уязвимые присвоения разрешения смотрят на функции, которые могут изменить полномочия файла, такие как chmod, umask, creat, или open. Если заданные полномочия позволяют непреднамеренным агентам изменять или читать ресурс, Средство поиска Ошибки отмечает функции как дефект.

Риск

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

  • Настройки программы

  • Выполнение программы

  • Чувствительные пользовательские данные

Фиксация

Установите свои полномочия так, чтобы пользователь (u) имеет больше полномочий, чем группа (g), и таким образом, у группы есть больше полномочий, чем другие пользователи (o), или u >= g >= o.

Примеры

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

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void bug_dangerouspermissions(const char * log_path) {
    mode_t mode = S_IROTH | S_IXOTH | S_IWOTH;
    int fd = creat(log_path, mode); 

    if (fd) {
        write(fd, "Hello\n", 6);
    }
    close(fd);
    unlink(log_path);
}

В этом примере, log_path файл создается с большим количеством прав для других внешних пользователей, чем текущий пользователь. Полномочиями является ---------rwx.

Коррекция — изменяет полномочия пользователя

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

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void corrected_dangerouspermissions(const char * log_path) {
    mode_t mode = S_IRUSR | S_IXUSR | S_IWUSR;
    int fd = creat(log_path, mode);

    if (fd) {
        write(fd, "Hello\n", 6);
    }
    close(fd);
    unlink(log_path);
}

Информация о результате

Группа: безопасность
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: DANGEROUS_PERMISSIONS
Удар: носитель
ID CWE: 732, 922

Введенный в R2015b