
CVE-2024-23692 | إصلاح ثغرة RCE في HFS 2.3m/2.4-RC07
يمكنك استخدام HFS (HTTP File Server) لإرسال الملفات واستلامها. إنه يختلف عن مشاركة الملفات التقليدية لأنه يستخدم تقنية الويب. كما يختلف عن خوادم الويب التقليدية لأنه سهل الاستخدام للغاية ويعمل مباشرةً "خارج الصندوق".
سيتيح لك نظام الملفات الافتراضي مشاركة حتى ملف واحد بسهولة.
| البند | القيمة |
|---|
| رقم CVE | CVE-2024-23692 |
| الإصدارات المتأثرة | HFS 2.3m وHFS 2.4.0 RC07 فما دون |
| نوع الثغرة | تنفيذ التعليمات البرمجية عن بُعد دون مصادقة (Unauthenticated RCE) |
| درجة CVSS | 9.8 حرجة |
| متجه الهجوم | قابل للوصول عبر الشبكة، دون مصادقة، ودون تفاعل المستخدم |
عند معالجة محرك القوالب في HFS لماكرو {.?search.} (الذي يقرأ معاملات الاستعلام من URL)، يقوم باستدعاء applyMacrosAndSymbols2() بشكل متكرر على القيمة المُعادة، مما يؤدي إلى تنفيذ سلسلة يتحكم فيها المستخدم ككود قالب.
تتكون سلسلة الهجوم من أربع خطوات:
1. 构造包含 %url% 的 search 参数
↓
2. %url% 展开为 macroQuote(完整URL) = {:url_including_payload:}
↓
3. %password% 展开为空字符串,导致 {:...:} 引用块提前关闭
↓
4. 引用块外的 {.exec|cmd.} 被宏引擎执行 → RCE
مثال POC (لأغراض البحث الأمني فقط):
GET /?n=%0A&cmd=whoami&search=%25xxx%25url%25:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.} HTTP/1.1
ملف الإصلاح: scriptLib.pas
الدالة الأساسية: noMacrosAllowed() (الأسطر 109–123)
function noMacrosAllowed(s:string):string;
// prevent hack attempts
begin
// 步骤 1:将所有宏标记的首字符替换为 HTML 实体
// {. → {. .} → .}
// {: → {: :} → :}
// | → |
repeat
i := findMacroMarker(s, i);
if i = 0 then break;
replace(s, '&#' + intToStr(charToUnicode(s[i])) + ';', i, i);
until false;
// 步骤 2:将 %symbol% 形式的符号引用替换为 HTML 实体
// %url% → %url%
// %password% → %password%
s := reReplace(s, '%([-a-z0-9]+)%', '%$1%', 'mi');
result := s;
end;
مواضع الاستدعاء: يتم تمرير جميع المدخلات التي يتحكم فيها المستخدم عبر هذه الدالة قبل إعادتها إلى محرك القوالب:
| موضع الاستدعاء | نطاق الحماية |
|---|---|
السطر 548 في urlVar() | جميع معاملات استعلام URL {.?name.} |
| السطر 698 | قراءة متغيرات القالب |
| السطر 1549 | قيم الكوكيز |
| السطر 2089 | القيم المفكوكة من URL |
| السطر 2165 | ترويسات طلبات HTTP |
| السطر 2173 | معاملات نماذج POST |
نتيجة الإصلاح: بعد معالجة معامل search في POC، يتم تحويل جميع علامات الماكرو ومراجع الرموز إلى كيانات HTML، ولا يمكنها بعد الآن تشغيل محرك الماكرو.
طُوّر في البداية عام 2002 باستخدام Delphi 6، والآن باستخدام Delphi 10.3.3 (الإصدار المجتمعي). يتم توليد الأيقونات من http://fontello.com/ . استخدم fontello.json لإجراء تعديلات إضافية.
بالنسبة للقالب الافتراضي، نستهدف التوافق مع Chrome 49 لأنه أحدث إصدار يعمل على Windows XP.