CERT C: Rec. POS05-C

Ограничьте доступ к файлам путем создания тюрьмы

Описание

Управляйте определением

Ограничьте доступ к файлам путем создания тюрьмы. [1]

Примеры

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

Описание

Манипуляция с файлами после chroot() без chdir("/") обнаруживает доступ к файловой системе за пределами тюрьмы, созданной chroot. Путем вызова chroot, вы создаете тюрьму файловой системы, которая ограничивает доступ к определенной подсистеме файла. Однако эта тюрьма неэффективна, если вы не вызываете chdir("/").

Риск

Если вы не вызываете chdir("/") после создания chroot тюрьма, функции манипуляции с файлами, который берет путь в качестве аргумента, может получить доступ к файлам за пределами тюрьмы. Атакующий может все еще управлять файлами вне подсистемы, которую вы задали, делая chroot тюрьму неэффективной.

Фиксация

После вызова chroot, вызовите chdir("/") сделать ваш chroot более безопасная тюрьма.

Пример - открытый файл в chroot- тюрьма

#include <unistd.h>
#include <stdio.h>

const char root_path[] = "/var/ftproot";
const char log_path[] = "file.log";
FILE* chrootmisuse() {
    FILE* res;
    chroot(root_path);
    chdir("base"); 
    res = fopen(log_path, "r"); 
    return res;
}

Этот пример использует chroot создать chroot-тюрьму. Однако использовать chroot заключите в тюрьму надежно, необходимо вызвать chdir("\") позже. Этот пример вызывает chdir("base"), который не эквивалентен. Средство поиска ошибки также отмечает fopen потому что fopen открывает файл в уязвимом chroot- тюрьма.

Коррекция — вызывает chdir("/")

Перед вводными файлами вызовите chdir("/").

#include <unistd.h>
#include <stdio.h>

const char root_path[] = "/var/ftproot";
const char log_path[] = "file.log";
FILE* chrootmisuse() {
    FILE* res;
    chroot(root_path);
    chdir("/");    
    res = fopen(log_path, "r");
    return res;
}

Проверяйте информацию

Группа: Rec. 50. POSIX (POS)

Введенный в R2019a


[1]  Это программное обеспечение было создано MathWorks, включающим фрагменты: “Веб-сайт SEI CERT-C”, © 2017 Carnegie Mellon University, веб-сайт SEI CERT-C © 2017 Carnegie Mellon University”, CERT SEI C Кодирование Стандарта – Правил для Разработки безопасных, Надежных и Защищенных систем – 2 016 Выпусков”, © 2016 Carnegie Mellon University, and “CERT SEI Стандарт Кодирования C++ – Правил для Разработки безопасных, Надежных и Защищенных систем на C++ – 2 016 Выпусков” © 2016 Carnegie Mellon University, со специальным разрешением от его Института программной инженерии.

ЛЮБОЙ МАТЕРИАЛ УНИВЕРСИТЕТА КАРНЕГИ-МЕЛЛОН И/ИЛИ ЕГО ИНСТИТУТА ПРОГРАММНОЙ ИНЖЕНЕРИИ СОДЕРЖАЛ, ЗДЕСЬ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ "ASIS". УНИВЕРСИТЕТ КАРНЕГИ-МЕЛЛОН НЕ ДАЕТ ГАРАНТИЙ НИКАКОГО ВИДА, ИЛИ ВЫРАЗИЛ ИЛИ ПОДРАЗУМЕВАЛ, ОТНОСИТЕЛЬНО ЛЮБОГО ВОПРОСА ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИЛ, ГАРАНТИЯ ПРИГОДНОСТИ ДЛЯ ЦЕЛИ ИЛИ ВЫСОКОГО СПРОСА, ИСКЛЮЧИТЕЛЬНОСТИ, ИЛИ ЗАКАНЧИВАЕТСЯ ПОЛУЧЕННЫЙ ИЗ ИСПОЛЬЗОВАНИЯ МАТЕРИАЛА. УНИВЕРСИТЕТ КАРНЕГИ-МЕЛЛОН НЕ ДАЕТ ГАРАНТИИ НИКАКОГО ВИДА ОТНОСИТЕЛЬНО СВОБОДЫ ОТ ПАТЕНТА, ТОВАРНОГО ЗНАКА ИЛИ НАРУШЕНИЯ АВТОРСКОГО ПРАВА.

Это программное обеспечение и сопоставленная документация не были рассмотрены, ни являются подтвержденным Университетом Карнеги-Меллон или его Институтом программной инженерии.