Использование внешне переменной управляемой среды

Значение переменной окружения из небезопасного источника

Описание

Использование внешне проверок переменной управляемой среды на функции, которые добавляют или изменяют переменные окружения, такие как putenv и setenv. Если новое значение переменной окружения из небезопасного источника, Polyspace® повышает дефект на указателе функции или указателе функции.

Риск

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

Фиксация

Перед использованием новой переменной окружения проверяйте ее значение, чтобы не давать контроль внешним пользователям.

Примеры

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

#define _XOPEN_SOURCE
#define _GNU_SOURCE
#include "stdlib.h"

void taintedenvvariable(char* path)
{
    putenv(path); 
}

В этом примере putenv изменяет переменную окружения. path пути не проверялся, чтобы убедиться, что это - намеченный путь.

Исправление — санирует путь

Одно возможное исправление должно санировать путь, проверяя, что это совпадает с тем, что вы ожидаете.

#define _XOPEN_SOURCE
#define _GNU_SOURCE
#define SIZE128 128
#include "stdlib.h"
#include "string.h"

/* Function to sanitize a string */
int sanitize_str(char* str, size_t n) {
    int res = 0;

    if (str && n > 0 && n < SIZE128) {
        /* string is not NULL, with size between 1 and max    */
        str[n-1] = '\0';  /* Add a null char at end of string */
        /* Tainted pointer detected above, used as "firewall" */
        res = 1;
    }
    return res;
}

void taintedenvvariable(char* path, size_t n)
{
    if (sanitize_str(path, n)) 
    {
        unsigned int n2 = strlen("PATH=")+strnlen(path, n);
        char *env_path = (char *)malloc(n2+1);
        if (env_path)
        {
            strcpy(env_path, "PATH=");
            strncat(env_path, path, n2);
            putenv(env_path);
        }
    }
}

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

Группа: испорченные данные
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: TAINTED_ENV_VARIABLE
Влияние: носитель
ID CWE: 15

Введенный в R2015b