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