2026年1月的安全补丁日,三星例行发布月度更新,其中一条关于PROCA组件的修复起初并未引起太多关注。直到安全研究机构LucidBit Labs公开技术细节,人们才意识到,这个看似常规的补丁封堵的是一个已经沉睡了八年的内核级漏洞。该漏洞嵌入三星KNOX安全子系统的底层,影响从Galaxy S9到最新S25的几乎全线设备,潜在受影响的终端数量可达数亿台。

漏洞属于“释放后使用”(UAF)类型,藏身于KNOX的核心模块PROCA——进程认证器之中。PROCA的职责是阻止未经授权的进程执行,是三星信任链上的关键一环。此次出问题的是PROCA下属的FIVE(基于文件的完整性验证引擎),这是三星在Linux内核完整性度量架构之上自己打造的一套文件完整性跟踪子系统。每一款运行三星定制内核的手机上,只要PROCA和FIVE在工作,漏洞就存在于内核深处,随时可能被唤醒。

打开网易新闻 查看精彩图片

具体来说,三星给每个进程附加了一个名为task_integrity的结构体对象,用于标记进程的信任状态。该对象的生存周期本应与进程严格绑定,但在/proc/pid/integrity/路径下的procfs处理函数中,内核直接取出原始指针操作,却没有正确持有对该对象的计数引用。在一个支持完全抢占的内核里,这意味着当处理函数尚在访问task_integrity时,目标进程可能已经被终止,对应的内存页面被回收到内核分配器,后续操作将落在已被释放的内存区域上,经典UAF条件就此形成。

LucidBit Labs确认,受影响的设备跨越Exynos和高通两大平台,覆盖Galaxy S9至S25全系列,还包括A系列机型,比如实测的攻击样本就成功运行在A54上。所有经过测试的安卓版本无一幸免,因为漏洞根植于三星从2017年前后引入FIVE那一刻起就自带的设计疏漏。八年时间里,这段代码在安全关键子系统中一直静静等待被触发,而每一次系统更新都在原封不动地搬运着这个隐患。

围绕这样一个UAF原语,LucidBit Labs抽丝剥茧,总结出了三种截然不同的利用路径:

第一种利用原语是利用proc_integrity_value_read()处理函数读取task_integrity->user_value字段。该字段位于对象偏移0处,如果task_integrity所在的内存在读取前已经被释放并被其他内核对象复用,则读取操作将泄漏新占据此处的数据内容。由于整个过程不会触发崩溃,攻击者可以反复执行,从而低风险地完成内核地址空间布局随机化(KASLR)的绕过,为后续精准攻击提供内核基址信息。

第二种利用原语更具野心,试图实现任意调用。proc_integrity_reset_file()处理函数在操作一个被释放的struct file后会触发d_dname()函数指针调用。研究人员设计了一个精巧手法,利用/system/bin/monkey这个纯文本、非ELF格式的系统二进制文件,将reset_file的引用计数强逼至1,成功制造出UAF条件。然而这一步之后,安卓内核中的KCFI(内核控制流完整性)机制挡住了去路:任何函数指针调用都必须符合类型兼容性,无法重定向到任意地址,这导致此原语最终被判定为死胡同。

第三种利用原语通过proc_integrity_label_read()处理函数实现了受限写能力。该函数会在已释放的task_integrity对象上获取一个spinlock_t自旋锁。当该内存区域被另一个内核对象复用后,排队自旋锁的原子操作会在新对象的偏移0x0c处产生一次受限写入。这个位置正好可能覆盖指针、