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

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

Коррекция — использует полный путь

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

# 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
Удар: носитель
ID CWE: 114, 427

Введенный в R2015b