Host change using externally controlled elements

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

Описание

Этот дефект возникает, когда стандартные программы, которые изменяют идентификатор хоста, такие как sethostid (Linux®) или SetComputerName (Окна®), используйте аргументы, которые управляются извне. Чтобы считать все входы за пределами периметра анализа тока небезопасными, используйте -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);
}

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

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

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

#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
Влияние: Средний
ИДЕНТИФИКАТОР CWE: 15
Введенный в R2015b