CVE-2025-71074CVE-2025-71074是Linux内核functionfs子系统中的一个高危竞态条件漏洞。该漏洞存在于ffs_epfile_open()函数中,当文件打开操作与文件移除操作同时发生时,会产生竞争条件,导致file->private_data指向已释放的内存对象,从而引发Use-After-Free(UAF)漏洞。攻击者可通过精心设计的时间窗口,在文件计数降至零时触发动态文件移除,而此时另一个线程正在执行打开操作但尚未增加计数,最终导致打开成功但持有已释放对象的引用。后续对该文件的read()或write()操作将访问已释放内存,可能造成系统崩溃或潜在的权限提升。
漏洞根本原因在于ffs->opened计数器的误用:atomic_dec_and_test()与atomic_add_return()不是原子配对操作,而文件对象在移除过程中始终保持可见状态。具体攻击条件如下:1) 当functionfs上打开的文件总数降至零时,动态文件会被移除;2) 移除操作可能在另一线程执行ffs_epfile_open()但尚未增加计数时发生;3) 此时打开操作仍会成功,导致UAF。修复方案包括:在ffs->mutex上序列化所有打开操作(针对ep0和动态文件);动态文件使用atomic_inc_not_zero(),若opened计数为零则打开失败并标记文件为注定删除;移除时通过simple_recursive_removal()回调标记inode并清除i_private指针;打开时验证文件状态为FFS_ACTIVE且未被移除。攻击者需在本地环境通过多线程并发操作触发竞争条件,成功利用可导致内核崩溃或代码执行。