exponenta event banner

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

Значение переменной среды получено из небезопасного источника

Описание

Этот дефект возникает, когда функции, которые добавляют или изменяют переменные среды, такие как putenv и setenv, получить новые значения переменных среды из небезопасных источников. Чтобы считать все входные данные вне текущего периметра анализа небезопасными, используйте -consider-analysis-perimeter-as-trust-boundary.

Риск

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

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

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

Примеры

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

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

void taintedenvvariable(void)
{
    char* path = getenv("APP_PATH");
    putenv(path); 
}

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

Коррекция - санирование пути

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

#define _POSIX_C_SOURCE
#include <stdlib.h>
#include <string.h>

/* Function to sanitize a path */
const char * sanitize_path(const char* str) {
	/* secure white list of paths */
	static const char *const authorized_paths[] = {
		"/bin",
		"/usr/bin"
	};
	if (str != NULL) {
		for (int i = 0; i < sizeof(authorized_paths) / sizeof(authorized_paths[0]); i++)
		if (strcmp(authorized_paths[i], str) == 0) {
			return authorized_paths[i];
		}
	}
	return NULL;
}

void taintedenvvariable(void)
{
	const char* path = getenv("APP_PATH");
	path = sanitize_path(path);
	if (path != NULL) {
		if (setenv("PATH", path, /* overwrite = */1) != 0) {
			/* fatal error */
			exit(1);
		}
	}
} 

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

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