CVE-2026-99109 in Linuxinformação

Sumário

de VulDB • 28/10/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

smb: cliente: rejeitar solicitações SetEA que não cabem no buffer da solicitação

CIFSSMBSetEA() copia o valor de atributo estendido (extended attribute) do chamador para o buffer da solicitação SMB sem verificar se ele cabe. O requisito está declarado na fonte, mas nunca foi implementado:

/*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);

A única restrição aplicada na entrada está em cifs_xattr_set():

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

CIFSMaxBufSize é a capacidade total de payload do buffer, portanto um valor exatamente desse tamanho não deixa espaço para o cabeçalho SMB, o bloco de parâmetros TRANS2, o cabeçalho fealist e o nome EA que são escritos antes dele no mesmo objeto.

SendReceive() já impõe o limite correto sobre este comprimento exato:

if (in_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE)

mas é chamado após a cópia ter ocorrido. Uma chamada não privilegiada a setxattr(2) em uma montagem SMB1 com um nome de 250 bytes e um valor de 16384 bytes grava 16384 bytes começando 345 bytes dentro de um objeto cifs_request de 16588 bytes, terminando 141 bytes além dele:

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

Aplique o limite de SendReceive' à solicitação montada antes da cópia, em vez de depois dela, e amplie os contadores de byte para que a soma não transborde (wrap) antes de ser testada.

byte_count também é testado contra U16_MAX, pois ele é armazenado no pSMB->ByteCount de 16 bits. Isso se torna acessível quando CIFSMaxBufSize é aumentado na carga do módulo, onde pode ser definido como alto quanto a 1024*127: com um nome EA de 5 bytes e um valor de 65521 bytes, count é exatamente U16_MAX enquanto byte_count é 65556, e cpu_to_le16() o truncaria para 20, transmitindo uma frame cujo ByteCount não corresponde ao seu comprimento. Testar byte_count cobre count também, já que byte_count é o maior dos dois e o único consumidor de 16 bits de count é escrito após este ponto.

check_add_overflow() é avaliado primeiro para que total_len seja atribuído antes de ser relatado.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsável

Linux

Reservar

25/09/2026

Divulgação

28/10/2026

Moderação

aceite

Entrada

VDB-427843

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Interested in the pricing of exploits?

See the underground prices here!