exponenta event banner

Изменение хоста с использованием внешних элементов

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

Описание

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

Риск

Значение lainted host ID может разрешить внешнее управление настройками системы. Этот элемент управления может нарушить работу служб, вызвать непредвиденное поведение приложений или другие вредоносные вторжения.

Зафиксировать

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

Примеры

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

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

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

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

Исправление - предварительно определенный идентификатор хоста

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

#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++
По умолчанию: Откл.
Синтаксис командной строки: TAINTED_HOSTID
Воздействие: среднее
CWE ID: 15
Представлен в R2015b