CVE-2026-64320 in Linux
Sumário
de VulDB • 25/07/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
nvmet: corrige leitura fora dos limites (out-of-bounds) na heap pré-autenticação no Discovery Get Log Page
A função `nvmet_execute_disc_get_log_page()` valida apenas o alinhamento de dword do deslocamento da página de log fornecido pelo host (`lpo`). O deslocamento de 64 bits é então adicionado a um pequeno buffer alocado na heap via `kzalloc` que contém a página de log de descoberta, e o resultado é passado diretamente para `nvmet_copy_to_sgl()`, que executa `memcpy()` em `data_len` bytes para o host sem nenhuma verificação dos limites no lado da origem:
u64 offset = nvmet_get_log_page_offset(req->cmd); /* 64-bit host */ size_t data_len = nvmet_get_log_page_len(req->cmd); /* 32-bit host */ ... if (offset & 0x3) { ... } /* única verificação */
... alloc_len = sizeof(*hdr) + entry_size * discovery_log_entries(req); buffer = kzalloc(alloc_len, GFP_KERNEL); ... status = nvmet_copy_to_sgl(req, 0, buffer + offset, data_len);
O controlador de descoberta é não autenticado -- `nvmet_host_allowed()` retorna verdadeiro incondicionalmente para o subsistema de descoberta -- portanto, a chamada é acessível antes da autenticação por qualquer par TCP/RDMA/FC que possa alcançar o alvo nvmet. Com uma página de log de descoberta de ~1 KiB, um atacante solicitando até 4 KiB começando no deslocamento `offset == alloc_len` lê a próxima página do slab e obtém seu conteúdo retornado pela fabric (uma execução empírica em um alvo loopback nvmet-tcp padrão vazou 81 ponteiros canônicos do kernel em uma única resposta Get Log Page). Direcionar o deslocamento para memória de kernel não mapeada causa falha no `memcpy` dentro do kernel e trava (ou entra em panic, se `panic_on_oops=1`) o host alvo.
O padrão de deslocamento controlado pelo atacante "nvmet_copy_to_sgl(req, 0, buffer + ATTACKER_OFFSET, ...)" é exclusivo para `nvmet_execute_disc_get_log_page` em todo o código nvmet: todos os outros manipuladores Get Log Page em admin-cmd.c ou ignoram lpo (e começam silenciosamente cada resposta no deslocamento 0) ou rastreiam um deslocamento de destino local com um ponteiro de origem fixo.
Validar o deslocamento fornecido pelo host contra o tamanho da página de log, limitar o comprimento da cópia ao que está realmente disponível e preencher com zeros qualquer resto do buffer de transferência do host. O preenchimento com zeros corresponde ao padrão existente de resposta curta em `nvmet_execute_get_log_changed_ns()` (admin-cmd.c) e impede o vazamento dos conteúdos SGL de transporte quando o host solicita mais bytes do que a página de log contém.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.