CVE-2026-23406Linux内核中的AppArmor安全模块存在一个高危漏洞,编号为CVE-2026-23406。该漏洞源于`match_char()`宏在处理差分编码链时会对字符参数进行多次评估。当调用该宏时使用了带有副作用的参数`*str++`,导致字符串指针在循环内部意外递增,使得DFA跳过输入字符并引发越界读取。这种情况可能导致内核崩溃或敏感信息泄露,CVSS v3.1评分为7.8。
该漏洞位于Linux内核AppArmor的DFA(确定性有限自动机)匹配逻辑中。问题的根源在于`match_char()`宏的实现方式。该宏内部使用了do-while循环来遍历状态表,并在循环体中多次引用传入的字符参数。由于C语言宏只是文本替换,当开发者传入`*str++`作为参数时,该表达式会在每次宏引用时都被求值。这意味着指针`str`会在单次匹配过程中多次递增,导致遍历逻辑跳过输入字符串中的字符。这种错误的指针移动最终导致读指针越过输入缓冲区的边界,触发KASAN(内核地址消毒剂)检测到的slab-out-of-bounds错误。虽然这主要是一个越界读取问题,但在内核模式下可能导致系统崩溃或信息泄露。修复方案是在调用宏之前将字符提取到临时变量中,确保参数只被求值一次。