IPBUF安全漏洞报告
English
CVE-2025-71079 CVSS 5.5 中危

CVE-2025-71079: Linux内核NFC子系统设备注销死锁漏洞

披露日期: 2026-01-13
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2025-71079
漏洞类型
死锁
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel NFC Subsystem

相关标签

CVE-2025-71079死锁Linux内核NFC子系统rfkill锁顺序反转本地提权设备注销并发控制ABBA死锁

漏洞概述

CVE-2025-71079是Linux内核中NFC(近场通信)子系统的一个本地死锁漏洞,CVSS评分为5.5(中危)。该漏洞源于nfc_unregister_device()函数与rfkill_fop_write()之间存在的锁顺序反转问题,形成经典的ABBA死锁场景。具体而言,当一个线程执行设备注销操作时持有device_lock,而尝试获取rfkill_global_mutex;同时另一个线程持有rfkill_global_mutex并通过回调尝试获取device_lock,导致两个线程相互等待永久阻塞。此漏洞影响系统的可用性,可能导致内核恐慌或系统冻结。由于攻击向量为本地且需要低权限,主要威胁场景为本地恶意程序或特权提升后的攻击行为。

技术细节

该漏洞是典型的内核并发控制死锁问题。在Linux内核的NFC子系统中,存在两个关键的同步机制:device_lock(设备锁)和rfkill_global_mutex(射频kill全局互斥锁)。

死锁形成路径如下:

线程A(rfkill操作路径):rfkill_fop_write() -> mutex_lock(&rfkill_global_mutex) -> rfkill_set_block() -> nfc_rfkill_set_block() -> nfc_dev_down() -> device_lock(&dev->dev),此时线程A等待获取device_lock。

线程B(设备注销路径):nfc_unregister_device() -> device_lock(&dev->dev) -> rfkill_unregister() -> mutex_lock(&rfkill_global_mutex),此时线程B等待获取rfkill_global_mutex。

修复方案将rfkill_unregister()和rfkill_destroy()调用移出device_lock临界区。具体做法是:在持有device_lock期间先将rfkill指针保存到局部变量,释放device_lock后再调用rfkill_unregister()。这种做法是安全的,因为rfkill_fop_write()在持有rfkill_global_mutex期间调用回调函数,而rfkill_unregister()也会获取rfkill_global_mutex进行清理,因此可以确保任何进行中的回调都会在rfkill_unregister()继续之前完成,避免了use-after-free问题。

攻击链分析

STEP 1
1
攻击者获取本地低权限访问权限,在目标系统上运行恶意代码
STEP 2
2
触发NFC设备注销操作(nfc_unregister_device),获取device_lock
STEP 3
3
在持有device_lock期间,代码尝试调用rfkill_unregister()获取rfkill_global_mutex
STEP 4
4
同时另一个执行路径(rfkill_fop_write)持有rfkill_global_mutex并尝试获取device_lock
STEP 5
5
两个线程形成ABBA死锁,互相等待对方释放锁,导致系统冻结或内核恐慌

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-71079 - Linux Kernel NFC Deadlock PoC // This is a conceptual PoC demonstrating the deadlock condition // Note: This requires local access and kernel development knowledge #include <stdio.h> #include <pthread.h> #include <unistd.h> // Simulated lock structures typedef struct { pthread_mutex_t mutex; } lock_t; lock_t device_lock = {PTHREAD_MUTEX_INITIALIZER}; lock_t rfkill_global_mutex = {PTHREAD_MUTEX_INITIALIZER}; // Thread A: Simulates rfkill_fop_write path void* thread_rfkill_write(void* arg) { printf("[Thread A] Attempting to acquire rfkill_global_mutex\n"); pthread_mutex_lock(&rfkill_global_mutex.mutex); printf("[Thread A] Acquired rfkill_global_mutex, now trying device_lock\n"); // This simulates: nfc_rfkill_set_block -> nfc_dev_down -> device_lock pthread_mutex_lock(&device_lock.mutex); printf("[Thread A] Acquired device_lock\n"); pthread_mutex_unlock(&device_lock.mutex); pthread_mutex_unlock(&rfkill_global_mutex.mutex); return NULL; } // Thread B: Simulates nfc_unregister_device path void* thread_unregister_device(void* arg) { sleep(1); // Ensure Thread A starts first printf("[Thread B] Attempting to acquire device_lock\n"); pthread_mutex_lock(&device_lock.mutex); printf("[Thread B] Acquired device_lock, now trying rfkill_global_mutex\n"); // This simulates: rfkill_unregister -> mutex_lock(&rfkill_global_mutex) pthread_mutex_lock(&rfkill_global_mutex.mutex); printf("[Thread B] Acquired rfkill_global_mutex\n"); pthread_mutex_unlock(&rfkill_global_mutex.mutex); pthread_mutex_unlock(&device_lock.mutex); return NULL; } int main() { pthread_t t1, t2; printf("CVE-2025-71079 Deadlock PoC\n"); printf("Starting two threads that will deadlock...\n"); pthread_create(&t1, NULL, thread_rfkill_write, NULL); pthread_create(&t2, NULL, thread_unregister_device, NULL); sleep(5); printf("DEADLOCK DETECTED: System appears to be frozen\n"); return 0; }

影响范围

Linux Kernel < 1ab526d97a57e44d26fadcc0e9adeb9c0c0182f5
Linux Kernel < 2e0831e9fc46a06daa6d4d8d57a2738e343130c3
Linux Kernel < 6b93c8ab6f6cda8818983a4ae3fcf84b023037b4
Linux Kernel < 8fc4632fb508432895430cd02b38086bdd649083
Linux Kernel < e02a1c33f10a0ed3aba855ab8ae2b6c4c5be8012

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过限制本地用户的NFC设备访问权限来降低风险。使用Linux命名空间和cgroups隔离不信任的进程,限制其对NFC子系统和其他敏感内核接口的访问。同时监控系统日志中的死锁相关警告信息,但需注意一旦死锁发生,系统可能已经冻结难以进行日志分析。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表