Umask used with chmod-style arguments

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

Описание

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

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

Риск

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

Зафиксировать

Установите 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
Влияние: Низкое
ИДЕНТИФИКАТОР CWE: 560, 922
Введенный в R2015b