CVE-2024-26837 in Linuxinformação

Sumário

de VulDB • 27/05/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

net: bridge: switchdev: Ignorar retransmissões (replays) de eventos adiados no offload

Antes desta alteração, a geração da lista de eventos MDB a serem retransmitidos poderia sofrer uma condição de corrida (race condition) contra a criação de novas associações de grupo, seja pela lógica de snooping IGMP/MLD ou por configuração do usuário.

Enquanto as novas associações são imediatamente visíveis para os iteradores de `br->mdb_list`, a notificação de sua existência aos assinantes de eventos switchdev é adiada para um momento posterior. Portanto, se uma lista de retransmissão fosse gerada durante um período que se sobrepusesse a essa janela, ela também conteria a retransmissão do evento que ainda não havia sido entregue.

O driver receberia assim duas cópias do que a bridge internamente considerava ser um único evento. Na destruição da bridge, apenas um único evento de exclusão de associação era enviado. Como consequência disso, drivers que contam referências nas associações (pelo menos DSA) ficariam com grupos órfãos em seu banco de dados de hardware quando a bridge fosse destruída.

Este é apenas um problema ao retransmitir adições. Embora os eventos de exclusão ainda possam estar pendentes na fila adiada, eles já terão sido removidos de `br->mdb_list`, portanto, nenhum duplicado pode ser gerado nesse cenário.

Para um usuário, isso significava que associações de grupo antigas, de uma bridge na qual uma porta estava anteriormente conectada, poderiam ser reativadas (no hardware) quando a porta se juntasse a uma nova bridge, sem o conhecimento da nova bridge.

Por exemplo, em um sistema mv88e6xxx, crie uma bridge com snooping e adicione imediatamente uma porta a ela:

root@infix-06-0b-00:~$ ip link add dev br0 up type bridge mcast_snooping 1 && \ > ip link set dev x3 up master br0

E então destrua a bridge:

root@infix-06-0b-00:~$ ip link del dev br0 root@infix-06-0b-00:~$ mvls atu ADDRESS FID STATE Q F 0 1 2 3 4 5 6 7 8 9 a DEV:0 Marvell 88E6393X 33:33:00:00:00:6a 1 static - - 0 . . . . . . . . . . 33:33:ff:87:e4:3f 1 static - - 0 . . . . . . . . . . ff:ff:ff:ff:ff:ff 1 static - - 0 1 2 3 4 5 6 7 8 9 a

Aqui, a bridge recebeu duas associações de grupo multicast IPv6.

Agora, destrua a bridge e adicione a mesma porta (ou outra porta pertencente ao mesmo domínio de hardware) a uma nova bridge, desta vez com snooping desabilitado:

root@infix-06-0b-00:~$ ip link add dev br1 up type bridge mcast_snooping 0 && \ > ip link set dev x3 up master br1

Todo o multicast, incluindo os dois grupos IPv6 de br0, deveria agora ser inundado (flooded), de acordo com a política de br1. Mas, em vez disso, as associações antigas ainda estão ativas no banco de dados de hardware, fazendo com que o switch encaminhe o tráfego apenas para esses grupos em direção à CPU (porta 0).

Elimine a condição de corrida em duas etapas:

1. Adquira o bloqueio de escrita do MDB enquanto gera a lista de retransmissão.

Isso impede que novas associações apareçam enquanto a lista de retransmissão está sendo gerada. Mas deixa o cenário em que um evento diferido já foi gerado, mas não entregue, antes de adquirir o bloqueio. Portanto:

2. Certifique-se de que nenhuma versão diferida de um evento de retransmissão já esteja enfileirada na fila adiada do switchdev, antes de adicioná-la à lista de retransmissão, ao retransmitir adições.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Fontes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!