CVE-2026-99109 in LinuxИнформация

Сводка

по VulDB • 28.10.2026

В ядре Linux была устранена следующая уязвимость:

smb: клиент: отклонять запросы SetEA, которые не помещаются в буфер запроса

Функция CIFSSMBSetEA() копирует значение расширенного атрибута (extended attribute) вызывающего процесса в буфер SMB-запроса без проверки того, поместится ли оно. Требование указано в исходном коде, но никогда не было реализовано:

/*BB add length check to see if it would fit in negotiated SMB buffer size BB */ /* if (ea_value_len > buffer_size - 512 (enough for header)) */ if (ea_value_len) memcpy(parm_data->list.name + name_len + 1, ea_value, ea_value_len);

Единственная проверка границ на входе осуществляется в cifs_xattr_set():

#define MAX_EA_VALUE_SIZE CIFSMaxBufSize ... if (size > MAX_EA_VALUE_SIZE)

CIFSMaxBufSize — это полная емкость полезной нагрузки буфера, поэтому значение ровно такого размера не оставляет места для заголовка SMB, блока параметров TRANS2, заголовка fealist и имени EA, которые записываются перед ним в том же объекте.

Функция SendReceive() уже накладывает правильное ограничение на эту длину:

if (in_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE)

но она вызывается после того, как копирование уже произошло. Непривилегированный вызов setxattr(2) для монтирования SMB1 с именем длиной 250 байт и значением размером 16384 байт записывает 16384 байта, начиная со смещения в 345 байтов внутри объекта cifs_request размером 16588 байт, заканчивая на 141 байт дальше его границы:

BUG: KASAN: slab-out-of-bounds in CIFSSMBSetEA+0xabc/0xde0 Write of size 16384 at addr ffff888003aa0159 by task init/68 __asan_memcpy+0x3c/0x60 CIFSSMBSetEA+0xabc/0xde0 cifs_xattr_set+0xd3a/0xff0 __vfs_setxattr+0x13e/0x1a0 The buggy address is located 345 bytes inside of allocated 16588-byte region

Примените ограничение SendReceive() к собранному запросу перед копированием, а не после него, и расширьте счетчики байтов, чтобы их сумма не переполнялась до проверки.

byte_count также проверяется на U16_MAX, поскольку он хранится в 16-битном поле pSMB->ByteCount. Это становится достижимым при увеличении CIFSMaxBufSize во время загрузки модуля, где оно может быть установлено вплоть до 1024*127: с именем EA длиной 5 байт и значением размером 65521 байта count равен точно U16_MAX, в то время как byte_count равен 65556, и функция cpu_to_le16() усечет его до 20, передав кадр, у которого ByteCount не соответствует фактической длине. Проверка byte_count покрывает также count, поскольку byte_count является большим из двух значений, а единственным потребителем count размером 16 бит является код, записываемый после этой точки.

Функция check_add_overflow() оценивается первой, чтобы total_len был присвоен до того, как будет сообщено об ошибке переполнения.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Ответственный

Linux

Резервировать

25.09.2026

Раскрытие

28.10.2026

Модерация

принято

Вход

VDB-427843

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Want to know what is going to be exploited?

We predict KEV entries!