IPBUF安全漏洞报告
English
CVE-2026-43337 CVSS 5.5 中危

CVE-2026-43337 Linux内核AMD显卡驱动空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2026-43337
漏洞类型
空指针解引用
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelDoSNULL Pointer DereferenceAMD GPULocal

漏洞概述

Linux内核drm/amd/display组件存在空指针解引用漏洞。该漏洞源于dcn401_init_hw()函数中的逻辑错误,未正确检查update_bw_bounding_box回调指针的有效性。当freq_changed条件满足时,即使该指针为NULL,代码仍会尝试调用它,导致内核崩溃。本地低权限攻击者可利用此漏洞造成系统拒绝服务。

技术细节

该漏洞位于Linux内核的drm/amd/display驱动程序中,具体涉及dcn401_hwseq.c文件的dcn401_init_hw()函数。函数中包含一个关键的条件判断逻辑:`((!fams2_enable && update_bw_bounding_box) || freq_changed)`。该逻辑设计存在严重缺陷,它错误地假设只要freq_changed标志为真,update_bw_bounding_box回调函数指针必然是有效的。然而,在实际运行环境中,freq_changed标志可能独立于指针状态被置位。如果此时update_bw_bounding_box指针恰好为NULL,且freq_changed为真,代码流程将绕过原本旨在保护指针的检查机制,直接尝试执行`dc->res_pool->funcs->update_bw_bounding_box(...)`调用。这将导致内核立即发生空指针解引用异常。攻击者需要具备本地低权限访问权限,通过执行特定的图形渲染操作或触发硬件状态变更来利用此漏洞,最终导致系统崩溃或拒绝服务。

攻击链分析

STEP 1
访问获取
攻击者需要获得本地系统的低权限用户访问权限。
STEP 2
触发条件
攻击者执行特定的图形操作或代码,使得内核中dcn401_init_hw()函数被调用,并满足freq_changed为真且update_bw_bounding_box指针为NULL的条件。
STEP 3
执行崩溃
内核执行空指针解引用,导致系统崩溃或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> // Mock structures to simulate the kernel environment struct dc { void *res_pool; }; struct res_pool_funcs { void (*update_bw_bounding_box)(struct dc *dc); }; struct res_pool { struct res_pool_funcs *funcs; }; // Vulnerable function logic extracted from dcn401_init_hw void vulnerable_logic(struct dc *dc, int fams2_enable, int freq_changed) { struct res_pool *pool = (struct res_pool *)dc->res_pool; void *update_bb = pool->funcs->update_bw_bounding_box; // The vulnerable condition if ((!fams2_enable && update_bb) || freq_changed) { printf("Condition met. Calling callback...\n"); // This line causes NULL pointer dereference if update_bb is NULL but freq_changed is true ((void (*)(struct dc *))update_bb)(dc); } } int main() { struct dc dev_ctx = {0}; struct res_pool pool_ctx = {0}; struct res_pool_funcs funcs_ctx = {0}; // Setup mock environment with NULL callback funcs_ctx.update_bw_bounding_box = NULL; pool_ctx.funcs = &funcs_ctx; dev_ctx.res_pool = &pool_ctx; printf("Triggering vulnerability with freq_changed=1 and callback=NULL\n"); // Scenario: fams2_enable=0, freq_changed=1, callback=NULL // Logic: (!0 && NULL) || 1 -> (1 && 0) || 1 -> 0 || 1 -> 1 (True) // Result: NULL pointer dereference crash vulnerable_logic(&dev_ctx, 0, 1); return 0; }

影响范围

Linux Kernel (具体受影响版本请参考Git内核提交记录10c13c1, 2d4a6f0等)

防御指南

临时缓解措施
由于该漏洞需要本地低权限即可触发,主要缓解措施是尽快应用官方内核补丁。在无法立即更新内核的情况下,严格控制系统本地访问权限可降低风险。

参考链接

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