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
Удар: Средняя
ID CWE: 114, 427
Введенный в R2015b