
CVE-2024-23692 | HFS 2.3m/2.4-RC07 RCE-Sicherheitslückenbehebung
You can use HFS (HTTP File Server) to send and receive files. It's different from classic file sharing because it uses web technology. It also differs from classic web servers because it's very easy to use and runs "right out-of-the box".
The virtual file system will allow you to easily share even one single file.
| Element | Inhalt |
|---|---|
| CVE-ID | CVE-2024-23692 |
| Betroffene Versionen | HFS 2.3m, HFS 2.4.0 RC07 und niedriger |
| Schwachstellentyp | Nicht authentifizierte Remote-Code-Ausführung (Unauthenticated RCE) |
| CVSS-Score | 9.8 Critical |
| Angriffsvektor | Netzwerkerreichbar, keine Authentifizierung, keine Benutzerinteraktion |
Die Vorlagen-Engine von HFS ruft beim Verarbeiten des Makros {.?search.} (das URL-Abfrageparameter liest) rekursiv applyMacrosAndSymbols2() auf den Rückgabewert auf, was dazu führt, dass vom Benutzer kontrollierte Zeichenfolgen als Vorlagencode ausgeführt werden.
Die Angriffskette besteht aus vier Schritten:
1. 构造包含 %url% 的 search 参数
↓
2. %url% 展开为 macroQuote(完整URL) = {:url_including_payload:}
↓
3. %password% 展开为空字符串,导致 {:...:} 引用块提前关闭
↓
4. 引用块外的 {.exec|cmd.} 被宏引擎执行 → RCE
POC-Beispiel (nur für Sicherheitsforschung):
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
Betroffene Datei: scriptLib.pas
Kernfunktion: noMacrosAllowed() (Zeilen 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;
Aufrufpositionen: Alle vom Benutzer kontrollierten Eingaben werden vor der Rückgabe an die Vorlagen-Engine durch diese Funktion verarbeitet:
Wirkung der Behebung: Nach der Verarbeitung des search-Parameters im POC werden alle Makromarkierungen und Symbolreferenzen in HTML-Entities umgewandelt, sodass sie die Makro-Engine nicht mehr auslösen können.
Initially developed in 2002 with Delphi 6, now with Delphi 10.3.3 (Community Edition). Icons are generated at http://fontello.com/ . Use fontello.json for further modifications.
For the default template we are targeting compatibility with Chrome 49 as it's the latest version running on Windows XP.
| Aufrufposition | Schutzbereich |
|---|
urlVar() Zeile 548 | Alle URL-Abfrageparameter {.?name.} |
| Zeile 698 | Vorlagenvariablen lesen |
| Zeile 1549 | Cookie-Werte |
| Zeile 2089 | URL-dekodierte Werte |
| Zeile 2165 | HTTP-Header |
| Zeile 2173 | POST-Formularparameter |