CVE-2026-23417Linux内核BPF子系统在处理JIT编译时存在安全绕过漏洞。当启用JIT硬化(bpf_jit_harden >= 1)时,bpf_jit_blind_insn函数未能正确处理BPF_ST | BPF_PROBE_MEM32类型的指令。由于验证阶段的convert_ctx_accesses会将内存存储指令重写为探测模式,而混淆逻辑未涵盖该模式,导致用户控制的32位立即数未被混淆直接进入本地代码。这可能绕过内核的安全防护机制,影响系统可用性。
该漏洞源于Linux内核BPF JIT编译器中的常量混淆逻辑不完整。在BPF验证阶段,convert_ctx_accesses函数会将针对arena指针的BPF_ST | BPF_MEM指令重写为BPF_ST | BPF_PROBE_MEM32(模式0xa0)。然而,后续的bpf_jit_blind_constants函数在执行常量混淆时,其switch语句仅匹配BPF_ST | BPF_MEM(模式0x60),导致重写后的指令直接穿透检查。这允许攻击者将精心构造的32位立即数注入JIT编译后的native code中,可能用于绕过KASLR或其他依赖代码混淆的防御措施。修复方案是在bpf_jit_blind_insn中增加对BPF_ST | BPF_PROBE_MEM32的处理,将其转换为寄存器存储(BPF_STX)并使用BPF_REG_AX加载混淆后的立即数。