
CVE-2024-23692 | HFS 2.3m/2.4-RC07 RCE भेद्यता सुधार
आप HFS (HTTP फ़ाइल सर्वर) का उपयोग करके फ़ाइलें भेज और प्राप्त कर सकते हैं। यह क्लासिक फ़ाइल साझाकरण से अलग है क्योंकि यह वेब तकनीक का उपयोग करता है। यह क्लासिक वेब सर्वरों से भी भिन्न है क्योंकि इसका उपयोग करना बहुत आसान है और यह "सीधे बॉक्स से बाहर" काम करता है।
वर्चुअल फ़ाइल सिस्टम आपको एक भी फ़ाइल को आसानी से साझा करने की अनुमति देगा।
| आइटम | सामग्री |
|---|---|
| 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;
कॉल स्थान: सभी उपयोगकर्ता-नियंत्रित इनपुट टेम्पलेट इंजन को लौटाए जाने से पहले इस फ़ंक्शन से गुजरते हैं:
सुधार प्रभाव: POC में search पैरामीटर को संसाधित करने के बाद, सभी मैक्रो मार्कर और प्रतीक संदर्भ HTML एंटिटी में बदल दिए जाते हैं, जिससे मैक्रो इंजन निष्पादन को ट्रिगर नहीं किया जा सकता।
प्रारंभ में 2002 में Delphi 6 के साथ विकसित, अब Delphi 10.3.3 (कम्युनिटी एडिशन) के साथ। आइकन http://fontello.com/ पर उत्पन्न होते हैं। आगे के संशोधनों के लिए fontello.json का उपयोग करें।
डिफ़ॉल्ट टेम्पलेट के लिए हम Chrome 49 के साथ संगतता को लक्षित कर रहे हैं क्योंकि यह Windows XP पर चलने वाला नवीनतम संस्करण है।
| कॉल स्थान | सुरक्षा दायरा |
|---|
urlVar() पंक्ति 548 | सभी URL क्वेरी पैरामीटर {.?name.} |
| पंक्ति 698 | टेम्पलेट वेरिएबल रीडिंग |
| पंक्ति 1549 | कुकी मान |
| पंक्ति 2089 | URL डीकोड मान |
| पंक्ति 2165 | HTTP अनुरोध हेडर |
| पंक्ति 2173 | POST फॉर्म पैरामीटर |