
CVE-2024-23692 | HFS 2.3m/2.4-RC07 RCE 취약점 수정
HFS(HTTP File Server)를 사용하여 파일을 보내고 받을 수 있습니다. 클래식한 파일 공유와 다른 점은 웹 기술을 사용한다는 것입니다. 또한 클래식한 웹 서버와도 다른데, 사용하기 매우 쉽고 "설치 직후 바로" 실행되기 때문입니다.
가상 파일 시스템을 사용하면 단일 파일 하나도 쉽게 공유할 수 있습니다.
| 항목 | 내용 |
|---|
| CVE 번호 | CVE-2024-23692 |
| 영향 버전 | HFS 2.3m, HFS 2.4.0 RC07 이하 |
| 취약점 유형 | 인증되지 않은 원격 코드 실행(Unauthenticated RCE) |
| CVSS 점수 | 9.8 Critical |
| 공격 벡터 | 네트워크 도달 가능, 인증 불필요, 사용자 상호작용 불필요 |
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;
호출 위치: 모든 사용자 제어 입력은 템플릿 엔진으로 반환되기 전에 이 함수를 거칩니다.
| 호출 위치 | 보호 범위 |
|---|---|
urlVar() 548행 | 모든 URL 쿼리 매개변수 {.?name.} |
| 698행 | 템플릿 변수 읽기 |
| 1549행 | Cookie 값 |
| 2089행 | URL 디코딩 값 |
| 2165행 | HTTP 요청 헤더 |
| 2173행 | POST 폼 매개변수 |
수정 효과: POC의 search 매개변수가 처리된 후 모든 매크로 마커와 기호 참조가 HTML 엔티티로 변환되어 더 이상 매크로 엔진 실행을 트리거할 수 없습니다.
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.