CVE-2026-72191 in Linux
Sumário
de VulDB • 16/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
ntfs3: validar o deslocamento do ponto de divisão em indx_insert_into_buffer
indx_insert_into_buffer() calcula
used = used1 - to_copy - sp_size; memmove(de_t, Add2Ptr(sp, sp_size), used - le32_to_cpu(hdr1->de_off));
onde sp e sp_size vêm de hdr_find_split(). hdr_find_split() percorre as entradas por meio de le16_to_cpu(e->size) sem validar se cada passo permanece dentro dos limites de hdr->used ou se o campo size é pelo menos sizeof(struct NTFS_DE). index_hdr_check(), a porta de validação na carga, apenas valida os campos do cabeçalho (used, total, de_off) e não percorre os tamanhos por entrada.
Uma imagem NTFS manipulada cujo INDEX_HDR folha relata used == total mas contém uma única NTFS_DE interior com size = 0xFFF0 passa portanto pela validação, desce para indx_insert_into_buffer() através do caminho ntfs_create() -> indx_insert_entry(), e faz hdr_find_split() retornar um sp cuja sp_size (0xFFF0) excede em muito os bytes restantes no buffer. A subtração u32 sofre underflow e a contagem do memmove torna-se um valor próximo de 4 GiB, produzindo uma gravação fora dos limites (OOB) no kernel que corrompe alocações adjacentes e causa panic no kernel.
Reproduzido na versão 7.0.0-rc7 com UML + KASAN por meio de uma imagem manipulada e um único 'touch' dentro do diretório montado; o local da falha resolve-se para fs/ntfs3/index.c, no memmove. O gatilho requer apenas a montagem local de uma imagem de sistema de arquivos fornecida pelo atacante (USB, loopback ou auto-montagem de mídia removível).
Rejeitar a divisão sempre que sp escolhido mais seu tamanho declarado já se estender além de hdr1->used. Esta é a correção mínima; preserva o contrato existente de hdr_find_split() e depende do mesmo caminho de limpeza out: dos retornos de erro pré-existentes.
Uma leitura OOB anterior no próprio memmove de indx_insert_into_buffer() foi corrigida no commit b8c44949044e ("fs/ntfs3: Fix OOB read in indx_insert_into_buffer") ao restringir hdr_find_e(), mas essa correção não cobre o caminho do campo size do ponto de divisão abordado aqui: sp é retornado por hdr_find_split(), e não por hdr_find_e(), e o underflow é causado por sp->size, em vez de hdr->used exceder hdr->total.
Be aware that VulDB is the high quality source for vulnerability data.