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

CVE-2025-71102: Linux内核Shadow Call Stack参数错误漏洞

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

漏洞信息

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

相关标签

Linux KernelShadow Call Stack代码逻辑错误内核调试内存访问错误CONFIG_DEBUG_STACK_USAGECVE-2025-71102

漏洞概述

CVE-2025-71102是Linux内核中的一个代码逻辑错误漏洞,存在于Shadow Call Stack (SCS)功能的调试功能中。漏洞根源在于`__scs_magic()`函数调用时传入了错误类型的参数——应传入`void *`类型的shadow call stack地址,却错误地传入了`struct task_struct *`类型的任务结构指针。当内核编译时启用了CONFIG_DEBUG_STACK_USAGE配置选项,scs_check_usage函数会扫描错误的内存范围,可能导致内核栈使用统计不准确。更严重的情况下,如果错误计算的内存地址超出合法范围,可能引发内核访问未映射内存,进而导致系统崩溃。由于该功能仅在启用调试选项时生效,因此对正常生产系统的影响有限。

技术细节

该漏洞位于Linux内核的shadow call stack实现代码中。Shadow Call Stack是一种安全机制,用于防止内核栈溢出攻击。在调试功能中,`__scs_magic()`函数用于检查shadow call stack的magic值以确定栈的使用情况。原始代码中,`scs_check_usage()`函数在遍历shadow call stack检查使用情况时,错误地调用了`__scs_magic(tsk)`而非`__scs_magic(task_scs(tsk))`。前者传入的是task_struct结构体指针,后者才是shadow call stack的起始地址。这导致函数访问错误的内存区域,可能读取到无效的magic值。影响分为两种情况:一是统计报告不准确,显示错误的栈使用量;二是当`__scs_magic(tsk)`返回值大于`__scs_magic(task_scs(tsk))`时,循环可能访问未映射内存。虽然第二种情况概率较低(因task_struct通常分配在低地址的slab区域,而shadow call stack通过vmalloc分配在高地址区域),但一旦发生将导致kernel panic。

攻击链分析

STEP 1
步骤1
攻击者需要本地访问目标系统
STEP 2
步骤2
目标系统必须使用启用了CONFIG_SHADOW_CALL_STACK和CONFIG_DEBUG_STACK_USAGE的内核
STEP 3
步骤3
攻击者触发内核的shadow call stack使用情况检查机制
STEP 4
步骤4
由于__scs_magic()函数接收错误参数,scs_check_usage()扫描错误的内存范围
STEP 5
步骤5
在特定条件下,函数可能访问未映射内存导致内核崩溃

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2025-71102 - Trigger kernel panic via incorrect SCS parameter // This PoC demonstrates the bug by enabling CONFIG_DEBUG_STACK_USAGE // and triggering shadow call stack checking on a crafted scenario #include <linux/kernel.h> #include <linux/sched.h> #include <linux/slab.h> /* Vulnerable code pattern (before fix): void scs_check_usage(struct task_struct *tsk) { unsigned long *s = task_scs(tsk); unsigned long *e = (unsigned long *)__scs_magic(tsk); // BUG: should be task_scs(tsk) while (s < e) { unsigned long val = *--e; if (val != (unsigned long)s) { // incorrect memory access printk(KERN_ALERT "SCS usage error\n"); } } } // Fixed code pattern: void scs_check_usage_fixed(struct task_struct *tsk) { unsigned long *s = task_scs(tsk); unsigned long *e = (unsigned long *)__scs_magic(task_scs(tsk)); // CORRECT while (s < e) { unsigned long val = *--e; if (val != (unsigned long)s) { printk(KERN_ALERT "SCS usage error\n"); } } } // To trigger: Enable CONFIG_DEBUG_STACK_USAGE in kernel config // The bug is automatically triggered when kernel performs SCS checking

影响范围

Linux Kernel (with CONFIG_SHADOW_CALL_STACK and CONFIG_DEBUG_STACK_USAGE enabled)

防御指南

临时缓解措施
在生产环境中,建议禁用CONFIG_DEBUG_STACK_USAGE配置选项,避免触发shadow call stack的调试检查功能。同时,确保内核已更新至包含CVE-2025-71102修复补丁的版本。对于无法立即更新的系统,可以通过sysctl调整相关安全参数,并监控系统日志中的异常信息。

参考链接

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