Host change using externally controlled elements

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

Описание

Этот дефект происходит, когда стандартные программы, которые изменяют идентификатор хоста, такой как sethostid (Linux®) или SetComputerName (Windows®), используйте аргументы, которыми внешне управляют. Чтобы рассмотреть весь вход снаружи текущего аналитического периметра как небезопасный, используйте -consider-analysis-perimeter-as-trust-boundary.

Риск

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

Фиксация

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

Примеры

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

#include <unistd.h>
#include <stdlib.h>

void bug_taintedhostid(void) {
    long userhid = strtol(getenv("HID"),NULL,10);
    sethostid(userhid);
}

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

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

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

#include <unistd.h>
#include <stdlib.h>

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

void taintedhostid(void) {
    long host = strtol(getenv("HID"),NULL,10);
    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