CVE-2026-31427Linux内核netfilter模块中的nf_conntrack_sip组件存在一处安全漏洞,源于process_sdp函数使用了未初始化的栈变量。在处理特定的SDP(会话描述协议)数据包时,如果数据包中不包含有效的媒体行或仅包含非活动媒体,该变量将未被赋值。内核随后会使用这个未初始化的值来重写SDP会话连接信息,导致地址被错误地替换为0.0.0.0或栈上的随机数据,从而破坏SIP通信并可能引发拒绝服务。
漏洞位于net/netfilter/nf_conntrack_sip.c文件的process_sdp函数中。该函数在栈上声明了union nf_inet_addr rtp_addr变量,计划用于存储SDP媒体流的RTP地址。然而,初始化逻辑仅存在于遍历SDP媒体描述的循环内部,且仅在发现可识别的媒体类型及非零端口时才执行。如果攻击者发送特制的SIP数据包,其SDP主体缺少“m=”行、仅包含非活动媒体部分(如m=audio 0)或仅包含未知媒体类型,rtp_addr将保持未初始化状态。尽管如此,函数在退出循环后仍会调用hooks->sdp_session(&rtp_addr)。这导致nf_nat_sdp_session函数将栈上的残留数据(随机值)或默认零值(在开启CONFIG_INIT_STACK_ALL_ZERO的系统上)格式化为IP地址,并用其重写SDP会话级别的“o=”和“c=”行。这种行为会破坏会话连接,导致可用性受损。