Уязвимые присвоения разрешения

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

Описание

Уязвимые присвоения разрешения смотрят на функции, которые могут изменить полномочия файла, такие как 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