Load of library from a relative path can be controlled by an external actor

Библиотека, загруженная с относительным путем, уязвима для вредоносных атак

Описание

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

Риск

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

Фиксация

Когда вы загружаете внешнюю библиотеку, задаете полный путь.

Примеры

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

#include <dlfcn.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdio.h>

void relative_path()
{
    dlopen("liberty.dll",RTLD_LAZY);
}

В этом примере, dlopen открывает liberty библиотека путем вызова только имени библиотеки. Однако этот вызов библиотеки использует относительный путь, чтобы найти библиотеку, которая небезопасна.

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

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

#include <dlfcn.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdio.h>

void relative_path()
{
    dlopen("/home/my_libs/library/liberty.dll",RTLD_LAZY);
}

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

Группа: безопасность
Язык: C | C++
Значение по умолчанию: Off
Синтаксис командной строки: RELATIVE_PATH_LIB
Удар: носитель
ID CWE: 114, 427
Введенный в R2015b