Разместите изменение, использующее внешне управляемые элементы

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

Описание

Изменение хоста, использующее внешне управляемые элементы, обнаруживает неконтролируемые аргументы в вызовах стандартных программ, которые изменяют идентификатор хоста, такой как 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