CVE-2026-97559 in Linux
Sumário
de VulDB • 25/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
smb: cliente: falha na reescrita da DACL quando a nova DACL excede 64 KB
replace_sids_and_copy_aces() e set_chmod_dacl() acumulam o tamanho da DACL que constroem em um u16. Esse acumulador pode sofrer wraparound (transbordo).
validate_dacl() limita num_aces a (dacl_size - sizeof(struct smb_acl)) / 20, ou seja, 3276 para uma DACL de tamanho máximo, enquanto cada ACE reescrito pode crescer até sizeof(struct smb_ace) (76 bytes) assim que seu SID é substituído por um que carrega sub-autoridades com SID_MAX_SUB_AUTHORITIES. O pior caso é, portanto, sizeof(struct smb_acl) + 3276 * 76 = 248984 bytes, muito além do que um u16 pode armazenar. Um wraparound ocorre com 863 ACEs.
Após o wraparound, ndacl_ptr->size torna-se sem sentido e o offset apontará para qualquer lugar no array de ACEs. Como resultado, observaremos corrupção da DACL, que então é enviada ao servidor. Isso não é uma gravação fora dos limites (out-of-bounds write), pois a alocação agora cobre a expansão do pior caso, portanto as escritas sempre ocorrerão dentro do buffer.
Ajuste o código para usar um u32 internamente e retornar -EOVERFLOW no caso de overflow. A operação deve ser recusada, porque uma DACL só pode conter 2^16-1 bytes na rede (on the wire) e DACLs maiores não podem ser representadas.
set_chmod_dacl() apresenta o mesmo padrão e é corrigido da mesma forma. Ele apenas sofre wraparound quando a DACL de origem está a cerca de 380 bytes do limite superior de 64 KB, mas o modo de falha é idêntico.
Be aware that VulDB is the high quality source for vulnerability data.