exponenta event banner

Выполнение двоичного файла из относительного пути может управляться внешним субъектом

Команда с относительным путем уязвима для вредоносной атаки

Описание

Этот дефект возникает при вызове внешней команды с относительным путем или без пути.

Этот дефект также находит результаты, которые обнаруживает средство проверки дефектов команды Execution of externally controllled.

Риск

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

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

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

Примеры

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

# define _GNU_SOURCE
# include <sys/types.h>
# include <sys/socket.h>
# include <unistd.h>
# include <stdio.h>
# include <stdlib.h>
# include <wchar.h>
# include <string.h>
# define MAX_BUFFER 100

void rel_path()
{
    char * data;
    char data_buf[MAX_BUFFER] = "";
    data = data_buf;

    strcpy(data, "ls -la");
    FILE *pipe;
    pipe = popen(data, "wb"); 
    if (pipe != NULL) pclose(pipe);
}

В этом примере флаги поиска ошибок popen потому что он пытается позвонить ls -la с использованием относительного пути к ls команда. Злоумышленник может манипулировать командой, чтобы использовать вредоносную версию.

Исправление - использовать полный путь

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

# define _GNU_SOURCE
# include <sys/types.h>
# include <sys/socket.h>
# include <unistd.h>
# include <stdio.h>
# include <stdlib.h>
# include <wchar.h>
# include <string.h>
# define MAX_BUFFER 100

void rel_path()
{
    char * data;
    char data_buf[MAX_BUFFER] = "";
    data = data_buf;

    strcpy(data, "/usr/bin/ls -la");
    FILE *pipe;
    pipe = popen(data, "wb");  
    if (pipe != NULL) pclose(pipe);
}

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

Группа: Безопасность
Язык: C | C++
По умолчанию: Откл.
Синтаксис командной строки: RELATIVE_PATH_CMD
Воздействие: среднее
CWE ID: 114, 427
Представлен в R2015b