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

CVE-2026-31733 Linux内核sched_ext状态清理漏洞

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

漏洞信息

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

相关标签

Linux Kernelsched_ext逻辑错误DoS本地攻击

漏洞概述

Linux内核的sched_ext(调度扩展)组件中存在一个逻辑漏洞,涉及直接调度状态的管理。由于`ddsp_dsq_id`字段未在所有代码执行路径中正确清除,导致在特定唤醒场景下会触发虚假的内核警告。该问题的根本原因在于`dispatch_enqueue()`函数并未覆盖所有取消或消耗直接调度裁决的场景,这可能被本地攻击者利用来破坏系统调度的稳定性,导致拒绝服务。

技术细节

该漏洞位于`kernel/sched/ext.c`模块中。`p->scx.ddsp_dsq_id`用于存储直接调度的目标DSQ ID。在正常流程中,该值应在任务被调度或取消后重置为`SCX_DSQ_INVALID`。然而,在某些边缘情况(如延迟调度、任务迁移或调度器切换时),该状态未被清理。当本地低权限用户通过`ops.select_cpu()`调用`scx_bpf_dsq_insert()`插入任务时,若此时`ddsp_dsq_id`残留旧值,会触发`mark_direct_dispatch()`中的`WARN_ON_ONCE`警告。这可能导致内核日志泛滥或潜在的调度异常,从而影响系统可用性(A:H)。修复方案是在`direct_dispatch`、`process_ddsp_deferred_locals`、`dequeue_task_scx`等关键函数中增加显式的状态清除逻辑。

攻击链分析

STEP 1
步骤1:本地访问
攻击者获得目标Linux系统的本地低权限用户访问权限。
STEP 2
步骤2:触发调度逻辑
攻击者加载或触发包含sched_ext的BPF调度器程序,执行特定的任务唤醒和调度操作。
STEP 3
步骤3:利用状态残留
通过构造特定的执行路径,使得`ddsp_dsq_id`状态未被正确清理,导致状态残留。
STEP 4
步骤4:触发异常
在后续的`scx_bpf_dsq_insert`调用中触发内核警告,干扰调度器运行,导致系统不稳定或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual PoC for triggering stale ddsp_dsq_id warning * This requires a kernel compiled with CONFIG_SCHED_CLASS_EXT */ #include <scx/common.bpf.h> char _license[] SEC("license") = "GPL"; SEC("struct_ops/select_cpu") BPF_STRUCT_OPS(dummy_select_cpu, struct task_struct *p, s32 prev_cpu, u64 wake_flags) { /* * Attempting to insert task into DSQ. * If ddsp_dsq_id is stale from a previous operation, * this path may trigger the warning in mark_direct_dispatch(). */ scx_bpf_dsq_insert(p, SCX_DSQ_GLOBAL, 0); return prev_cpu; } SEC(".struct_ops.link") struct sched_ext_ops dummy_ops = { .select_cpu = (void *)dummy_select_cpu, .name = "dummy_poc_sched", };

影响范围

Linux Kernel (修复前版本)

防御指南

临时缓解措施
限制非特权用户加载BPF程序或使用sched_ext功能,直到系统完成内核更新。

参考链接

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