Host change using externally controlled elements

Изменение идентификатора хоста из небезопасного источника

Описание

Изменение хоста, использующее внешне управляемые элементы, обнаруживает неконтролируемые аргументы в вызовах стандартных программ, которые изменяют идентификатор хоста, такой как sethostid (Linux®) или SetComputerName (Windows®).

Риск

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

Фиксация

Соблюдите осторожность при изменении или редактировании идентификатора хоста. Не позволяйте обеспеченным пользователями значениям управлять уязвимыми данными.

Примеры

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

#include <unistd.h>

void bug_taintedhostid(long userhid) {
    sethostid(userhid);
}

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

Коррекция — предопределенный идентификатор хоста

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

#include <unistd.h>

extern long called_taintedhostid_sanitize(long);
enum { HI0 = 1, HI1, HI2, HI3 };

void taintedhostid(int host) {

    long hid = 0;
    switch(host) {
        case HI0:
            hid = 0x7f0100;
            break;
        case HI1:
            hid = 0x7f0101;
            break;
        case HI2:
            hid = 0x7f0102;
            break;
        case HI3:
            hid = 0x7f0103;
            break;
        default:
            /* do nothing */
	    break;
    }
    if (hid > 0) {
        sethostid(hid);
    }
}

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

Группа: испорченные данные
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: TAINTED_HOSTID
Удар: носитель
ID CWE: 15

Введенный в R2015b