CVE-2026-45905 in Linuxinformação

Sumário

de VulDB • 28/05/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

xfrm: corrigir a condição de corrida (race condition) em ip_rt_bug durante icmp_route_lookup no caminho reverso

icmp_route_lookup() realiza múltiplas consultas de rota para encontrar uma rota adequada para o envio de mensagens de erro ICMP, com tratamento especial para políticas XFRM (IPsec).

A sequência de consulta é: 1. Primeiro, consulta a rota de saída para a resposta ICMP (dst = src original) 2. Passa por xfrm_lookup() para verificação de política 3. Se bloqueado (-EPERM) ou dst não for local, entra no "caminho reverso" 4. No caminho reverso, chama xfrm_decode_session_reverse() para obter fl4_dec, que inverte o fluxo do pacote original (saddr e daddr trocados) 5. Se fl4_dec.saddr for local (somos o destino original), usa __ip_route_output_key() para consulta da rota de saída 6. Se fl4_dec.saddr NÃO for local (somos um nó de encaminhamento), usa ip_route_input() para simular o caminho de entrada do pacote reverso 7. Finalmente, passa rt2 por xfrm_lookup() com a flag XFRM_LOOKUP_ICMP

O bug ocorre no passo 6: ip_route_input() é chamado com fl4_dec.daddr (fonte do pacote original) como destino. Se este endereço se tornar local entre a verificação inicial e a chamada de ip_route_input() (por exemplo, devido a "ip addr add" concorrente), ip_route_input() retorna uma rota LOCAL com dst.output definido como ip_rt_bug.

Esta rota é então usada para saída ICMP, fazendo com que dst_output() chame ip_rt_bug(), acionando um WARN_ON:

------------[ cut here ]------------
WARNING: net/ipv4/route.c:1275 at ip_rt_bug+0x21/0x30, CPU#1 Call Trace: ip_push_pending_frames+0x202/0x240 icmp_push_reply+0x30d/0x430 __icmp_send+0x1149/0x24f0 ip_options_compile+0xa2/0xd0 ip_rcv_finish_core+0x829/0x1950 ip_rcv+0x2d7/0x420 __netif_receive_skb_one_core+0x185/0x1f0 netif_receive_skb+0x90/0x450 tun_get_user+0x3413/0x3fb0 tun_chr_write_iter+0xe4/0x220 ...

Corrige-se isso verificando rt2->rt_type após ip_route_input(). Se for RTN_LOCAL, a rota não pode ser usada para saída, portanto, trata-se como um erro.

O reproducer requer modificação do kernel para ampliar a janela de corrida, tornando-o inadequado como selftest. Está disponível em:

https://gist.github.com/mrpre/eae853b72ac6a750f5d45d64ddac1e81

Be aware that VulDB is the high quality source for vulnerability data.

Responsável

Linux

Reservar

13/05/2026

Divulgação

27/05/2026

Moderação

aceite

Entrada

VDB-366159

CPE

pronto

EPSS

0.00032

KEV

não

Atividades

muito baixo

Fontes

Do you know our Splunk app?

Download it now for free!