
CVE-2024-23692 | Corrección de la vulnerabilidad RCE en HFS 2.3m/2.4-RC07
Puedes usar HFS (servidor de archivos HTTP) para enviar y recibir archivos. Se diferencia del intercambio de archivos clásico porque usa tecnología web. También se diferencia de los servidores web clásicos porque es muy fácil de usar y funciona "listo para usar".
El sistema de archivos virtual te permitirá compartir fácilmente incluso un solo archivo.
| Campo | Detalle |
|---|---|
| ID de CVE | CVE-2024-23692 |
| Versiones afectadas | HFS 2.3m, HFS 2.4.0 RC07 y anteriores |
| Tipo de vulnerabilidad | Ejecución remota de código no autenticada (Unauthenticated RCE) |
| Puntuación CVSS | 9.8 Critical |
| Vector de ataque | Accesible en red, sin autenticación, sin interacción del usuario |
El motor de plantillas de HFS, al procesar la macro {.?search.} (que lee los parámetros de consulta de la URL), invoca recursivamente applyMacrosAndSymbols2() sobre el valor devuelto, lo que provoca que una cadena controlada por el usuario se ejecute como código de plantilla.
La cadena de ataque consta de cuatro pasos:
1. 构造包含 %url% 的 search 参数
↓
2. %url% 展开为 macroQuote(完整URL) = {:url_including_payload:}
↓
3. %password% 展开为空字符串,导致 {:...:} 引用块提前关闭
↓
4. 引用块外的 {.exec|cmd.} 被宏引擎执行 → RCE
Ejemplo de POC (solo para investigación de seguridad):
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
Archivo corregido: scriptLib.pas
Función principal: noMacrosAllowed() (líneas 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;
Puntos de llamada: Todas las entradas controlables por el usuario se procesan con esta función antes de devolverse al motor de plantillas:
Efecto de la corrección: Después del procesamiento del parámetro search del POC, todas las marcas de macro y referencias a símbolos se convierten en entidades HTML, por lo que ya no se puede activar la ejecución del motor de macros.
Desarrollado inicialmente en 2002 con Delphi 6, ahora con Delphi 10.3.3 (Community Edition). Los iconos se generan en http://fontello.com/ . Usa fontello.json para modificaciones posteriores.
Para la plantilla predeterminada, apuntamos a la compatibilidad con Chrome 49, ya que es la última versión que se ejecuta en Windows XP.
| Ubicación de la llamada | Alcance de la protección |
|---|
urlVar() línea 548 | Todos los parámetros de consulta de URL {.?name.} |
| Línea 698 | Lectura de variables de plantilla |
| Línea 1549 | Valores de cookies |
| Línea 2089 | Valores decodificados de URL |
| Línea 2165 | Cabeceras de solicitud HTTP |
| Línea 2173 | Parámetros de formulario POST |