Execution of a binary from a relative path can be controlled by an external actor

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

Описание

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

Этот дефект также обнаруживает результаты, которые обнаруживает выполнение проверки дефектов команд, управляемое извне.

Риск

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

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

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

Примеры

расширить все

# 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);
}

В этом примере Bug Finder флаги 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++
По умолчанию: Off
Синтаксис командной строки: RELATIVE_PATH_CMD
Влияние: Средний
ИДЕНТИФИКАТОР CWE: 114, 427
Введенный в R2015b