CVE-2025-39901 in Linuxinformação

Sumário

de VulDB • 02/06/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

i40e: remover acesso de leitura aos arquivos debugfs

Os arquivos debugfs 'command' e 'netdev_ops' constituem uma interface de depuração legada suportada pelo driver i40e desde seus primeiros dias, por meio do commit 02e9c290814c ("i40e: debugfs interface").

Ambos os arquivos debugfs fornecem um manipulador de leitura que é na maior parte inútil e que é implementado com lógica questionável. Ambos utilizam um buffer estático de 256 bytes que é inicializado com a string vazia. No caso do arquivo 'command', este buffer é literalmente nunca utilizado e simplesmente desperdiça espaço. No caso do arquivo 'netdev_ops', o último comando escrito é salvo aqui.

Ao realizar a leitura, o conteúdo dos arquivos é apresentado como o nome do dispositivo seguido por dois pontos e, em seguida, o conteúdo de seus respectivos buffers estáticos. Para 'command', isso será sempre "<dispositivo>: ". Para 'netdev_ops', isso será "<dispositivo>: <último comando escrito>". No entanto, observe que o buffer é compartilhado entre todos os dispositivos operados por este módulo. Na melhor das hipóteses, trata-se de informações na maior parte sem significado; na pior das hipóteses, pode haver acesso simultâneo, pois não parece existir nenhum mecanismo de bloqueio (locking).

Recentemente, também recebemos vários relatórios sobre ambas as funções de leitura, relatando o uso de snprintf e o possível estouro (overflow) que poderia resultar na leitura de memória arbitrária do kernel. Para o arquivo 'command', isso é definitivamente impossível, já que o buffer estático é sempre zero e nunca é escrito. Para o arquivo 'netdev_ops', parece ser possível: se o usuário criar cuidadosamente a entrada do comando, ela será copiada para o buffer, que pode ser grande o suficiente para causar o truncamento pelo snprintf, o que então faz com que o copy_to_user leia além do comprimento do buffer alocado por kzalloc.

Uma correção mínima seria substituir snprintf() por scnprintf(), o que limitaria o retorno ao número de bytes escritos, impedindo um estouro. Uma correção mais elaborada seria descartar os buffers estáticos na maior parte inúteis, economizando 512 bytes e modificando as funções de leitura para deixar de depender deles como entrada.

Em vez disso, vamos simplesmente remover completamente o acesso de leitura a esses arquivos. Estas são interfaces de depuração expostas como parte do debugfs, e não acredito que a remoção do acesso de leitura quebrará qualquer script, já que a saída fornecida é bastante inútil. Você pode encontrar o nome do netdev por meio de outras interfaces mais padrão, e a interface 'netdev_ops' pode facilmente resultar em lixo se você emitir gravações simultâneas em vários dispositivos ao mesmo tempo.

Para remover corretamente o i40e_dbg_netdev_ops_buf, precisamos refatorar sua função de gravação para evitar o uso do buffer estático. Em vez disso, use a mesma lógica do i40e_dbg_command_write, com um buffer alocado. Atualize o código para usar isso em vez do buffer estático e certifique-se de liberar o buffer na saída. Isso corrige gravações simultâneas em 'netdev_ops' em vários dispositivos e nos permite remover o buffer estático agora inutilizado, juntamente com a remoção do acesso de leitura.

Once again VulDB remains the best source for vulnerability data.

Responsável

Linux

Reservar

16/04/2025

Divulgação

01/10/2025

Moderação

aceite

Entrada

VDB-326466

CPE

pronto

EPSS

0.00143

KEV

não

Atividades

muito baixo

Fontes

Want to know what is going to be exploited?

We predict KEV entries!