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

CVE-2023-53568 Linux内核s390/zcrypt内存泄漏漏洞

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

漏洞信息

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

相关标签

内存泄漏Linux Kernels390zcrypt内核漏洞本地提权拒绝服务资源泄漏IBM System/390加密驱动

漏洞概述

CVE-2023-53568是Linux内核中s390/zcrypt子系统存在的一个内存泄漏漏洞。该漏洞位于zcdn_create()函数中,当dev_set_name()函数调用失败时,新分配的内存资源未被正确释放,导致内存泄漏问题。s390/zcrypt是IBM System/390架构下的加密设备驱动子系统,负责管理与加密硬件设备的交互。该漏洞由内核开发者发现并修复,影响多个稳定版本的内核代码。

从CVSS 3.1评分向量来看,该漏洞的CVSS评分为5.5分,属于中等严重等级。攻击者需要具有本地访问权限和低权限身份才能触发此漏洞,不需要用户交互。漏洞的主要影响在于可用性方面(高影响),因为持续的内存泄漏可能导致系统内存耗尽,影响系统稳定性和服务可用性。机密性影响较低,完整性则不受影响。

该漏洞已在多个Linux内核稳定版本中得到修复,包括通过补丁0878052579cb、131cd74a8e38、147d8da33a2c、174f11ef1615和6252f47b7803等多个commit进行修复。建议使用受影响内核版本的用户及时更新到已修复的版本。

技术细节

该漏洞的技术原理如下:在Linux内核的s390/zcrypt驱动中,zcdn_create()函数负责创建加密设备节点。在创建过程中,会先分配内存资源,然后调用dev_set_name()函数为设备设置名称。

正常情况下,dev_set_name()应当成功执行并完成设备初始化流程。然而,当dev_set_name()调用失败时(例如由于名称冲突或其他内核内部错误),zcdn_create()函数没有正确处理错误路径,直接返回而没有释放之前分配的内存资源。

这种内存泄漏的影响在长时间运行的系统中会逐渐累积。每次zcdn_create()失败时都会泄漏一定量的内存,如果攻击者能够反复触发设备创建流程(例如通过加载/卸载zcrypt相关模块),就可能导致内核内存持续增长,最终造成系统内存耗尽,触发OOM(Out of Memory)情况,影响系统稳定性。

修复方案是在dev_set_name()失败时,正确释放之前通过alloc等方式分配的内存资源,确保错误处理路径的完整性。修复后的代码会在dev_set_name()返回错误时,跳转到适当的清理标签,释放所有已分配的资源。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要获得目标系统的本地访问权限,并具备低权限用户身份(PR:L)。在Linux系统中,这意味着需要有一个普通的用户账户。
STEP 2
步骤2:触发zcrypt设备创建流程
攻击者通过加载zcrypt相关内核模块或触发设备热插拔事件,使内核调用zcdn_create()函数创建加密设备节点。
STEP 3
步骤3:制造dev_set_name()失败条件
通过特定手段(如设备名称冲突、内核资源限制等)使dev_set_name()函数调用失败,进入错误处理路径。
STEP 4
步骤4:触发内存泄漏
在dev_set_name()失败时,zcdn_create()函数未释放已分配的内存资源,导致每次失败都泄漏一定量的内核内存。
STEP 5
步骤5:持续利用导致系统不稳定
攻击者反复触发上述流程,导致内核内存持续泄漏,最终可能耗尽系统内存资源,影响系统可用性(A:H)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2023-53568 Proof of Concept // Trigger memory leak by forcing dev_set_name() failure in zcdn_create() #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/device.h> // Simulate the vulnerable zcdn_create() function static struct device *zcdn_create_test(void) { struct device *dev; int ret; // Allocate device structure (simulating the vulnerable allocation) dev = kzalloc(sizeof(struct device), GFP_KERNEL); if (!dev) return NULL; // Attempt to set device name - if this fails, memory is leaked // in the vulnerable version ret = dev_set_name(dev, "zcrypt_test_device"); if (ret) { // VULNERABILITY: In the original vulnerable code, this path // does not free the allocated 'dev' structure, causing memory leak printk(KERN_ERR "dev_set_name failed: %d\n", ret); return NULL; // Memory leak occurs here in vulnerable version } return dev; } static int __init poc_init(void) { int i; // Repeatedly trigger the vulnerable code path to accumulate memory leak for (i = 0; i < 1000; i++) { zcdn_create_test(); } printk(KERN_INFO "PoC: Triggered potential memory leak\n"); return 0; } static void __exit poc_exit(void) { printk(KERN_INFO "PoC: Module unloaded\n"); } module_init(poc_init); module_exit(poc_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("CVE-2023-53568 PoC - s390/zcrypt memory leak"); // Fix verification - the patched version should include: // After dev_set_name() failure, add kfree(dev) or proper cleanup // Example fix: // ret = dev_set_name(dev, "zcrypt_%d", ...); // if (ret) { // kfree(dev); // Fix: free allocated memory on failure // return ERR_PTR(ret); // }

影响范围

Linux Kernel (s390架构相关稳定版本)
受影响的commit范围需通过git log核查0878052579cb之前的版本

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制普通用户对/dev/zcrypt相关设备的访问权限;2)通过内核模块加载控制(如禁用自动加载)减少zcrypt模块被异常触发的机会;3)监控内核内存使用情况,设置内存使用告警阈值;4)使用cgroups或其他资源控制机制限制单个进程的内存使用上限,防止因内存泄漏导致整个系统不可用;5)关注内核日志中zcrypt相关的错误信息,及时发现异常情况。

参考链接

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