CVE-2026-72404 in Linuxinformação

Sumário

de VulDB • 15/08/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

tipc: corrige UAF em cleanup_bearer() devido à dst_cache_destroy() prematura

O teardown (encerramento) da mídia UDP bearer TIPC chama dst_cache_destroy() nos caches replicast antes de chamar synchronize_net() para aguardar que os leitores RCU concorrentes (transmissores) terminem:

```c static void cleanup_bearer(struct work_struct *work) {
... list_for_each_entry_safe(rcast, tmp, &ub->rcast.list, list) {
dst_cache_destroy(&rcast->dst_cache); list_del_rcu(&rcast->list); kfree_rcu(rcast, rcu); } ... dst_cache_destroy(&ub->rcast.dst_cache); udp_tunnel_sock_release(ub->sk); synchronize_net(); ... } ```

Isso é altamente problemático porque dst_cache_destroy() libera imediatamente a memória do cache por CPU (free_percpu()) e liberta as entradas dst em cache sem qualquer sincronização.

Se um transmissor concorrente (por exemplo, tipc_udp_xmit()) estiver sendo executado em outra CPU sob proteção RCU, ele pode chamar dst_cache_get() de forma concorrente, levando a: 1. Use-After-Free no próprio ponteiro do cache por CPU (falha/crash). 2. Aviso "rcuref - imbalanced put()" se tentar liberar um dst que foi simultaneamente liberado pela dst_cache_destroy().

Além disso, chamar kfree(ub) imediatamente após synchronize_net() sem fechar o soquete primeiro (ou aguardar depois de fechá-lo) deixa uma janela onde um receptor concorrente (tipc_udp_recv()) poderia iniciar após synchronize_net(), acessar ub e sofrer um UAF quando kfree(ub) for executado.

Para corrigir isso, devemos adiar dst_cache_destroy() e kfree(ub) até que tenhamos garantido que nenhum outro leitor possa ver o bearer/soquete e todos os leitores existentes tenham terminado:

1. Adiar a destruição das entradas rcast (tanto dst_cache_destroy() quanto kfree()) para um callback RCU usando call_rcu_hurry(). O uso de call_rcu_hurry() garante que as entradas dst sejam liberadas rapidamente.

2. Liberar o soquete do bearer usando udp_tunnel_sock_release() (interrompe novos leitores de recebimento).

3. Chamar synchronize_net() para aguardar todos os leitores RCU pendentes (tanto transmissão quanto recepção) terminarem.

4. Agora que é seguro, chamar dst_cache_destroy() no cache principal do bearer e liberar ub.

Nota: 3) e 4) podem ser alterados posteriormente em net-next para também usar call_rcu_hurry() e eliminar a latência de synchronize_net().

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsável

Linux

Reservar

09/08/2026

Divulgação

15/08/2026

Moderação

aceite

Entrada

VDB-390759

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Might our Artificial Intelligence support you?

Check our Alexa App!