Umask used with chmod-style arguments

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

Описание

Этот дефект происходит когда umask командам задали аргументы в стиле аргументов к chmod.

Для новых файлов, umask значение задает который полномочия не установить, другими словами, который полномочия удалить. umask аргумент поразрядно отрицается и затем применяется новые полномочия файла. В отличие от этого chmod устанавливает полномочия, когда вы задаете их.

Риск

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

Фиксация

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

Вы видите umask значение путем вызова,

umask
или символьное значение путем вызова,
umask -S

Примеры

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

#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>

typedef mode_t (*umask_func)(mode_t);

const mode_t default_mode = (
    S_IRUSR    /* 00400 */ 
    | S_IWUSR  /* 00200 */ 
    | S_IRGRP  /* 00040 */ 
    | S_IWGRP  /* 00020 */
    | S_IROTH  /* 00004 */
    | S_IWOTH  /* 00002 */
    );         /* 00666 (i.e. -rw-rw-rw-) */

static void my_umask(mode_t mode)
{
    umask(mode);
}

int umask_use(mode_t m)
{
    my_umask(default_mode);
    return 0;
}

Этот пример использует функцию под названием my_umask установить режим маски по умолчанию. Однако default_mode переменная дает полномочия 666 или -rw-rw-rw. umask инвертирует это значение. Однако это отрицание означает, что режим маски по умолчанию выключает полномочия чтения-записи для пользователя, групповых пользователей и других внешних пользователей.

Коррекция — инвертирует предпочтительные полномочия

Одна возможная коррекция должна инвертировать default_mode аргумент к my_umask. Эта коррекция аннулирует отрицание umask для новых файлов.

#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>

typedef mode_t (*umask_func)(mode_t);

const mode_t default_mode = (
    S_IRUSR    /* 00400 */ 
    | S_IWUSR  /* 00200 */ 
    | S_IRGRP  /* 00040 */ 
    | S_IWGRP  /* 00020 */
    | S_IROTH  /* 00004 */
    | S_IWOTH  /* 00002 */
    );         /* 00666 (i.e. -rw-rw-rw-) */

static void my_umask(mode_t mode)
{
    umask(mode);
}

int umask_use(mode_t m)
{
    my_umask(~default_mode);
    return 0;
}

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

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

Введенный в R2015b