Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-66917 — JoomGallery의 깨진 객체 수준 권한 부여를 통한 IDOR + Stored XSS | Kitploit
도구/GitHubGitHub/toanln-cov/cve-2026-66917
Authentication & AuthorizationVulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationWeb Security
GitHubtoanln-cov/cve-2026-66917

CVE-2026-66917

JoomGallery의 깨진 객체 수준 권한 부여를 통한 IDOR + Stored XSS

저장소 보기
1일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

JoomGallery의 객체 수준 권한 부여 결함을 통한 IDOR + 저장형 XSS

JoomGallery ≤ 4.3.0 — 편집자(Editor) 역할 사용자가 모든 갤러리 이미지를 탈취하고 XSS 페이로드를 저장하여 관리자 세션 탈취 가능

CVE CVSS v4.0 CWE-639 CWE-79 Affected Researcher


요약

JoomGallery의 UserimageController::save()는 checkACL('edit.own', ...) 대신 checkACL('edit', ...)를 확인합니다. 편집자(Editor) 역할 사용자는 소유권과 관계없이 모든 이미지에 대해 task=userimage.save&id=N으로 POST할 수 있습니다(IDOR — CWE-639). 편집자 역할은 전역적으로 core.edit 권한을 보유하므로, 관리자가 소유한 이미지를 포함한 사이트의 모든 이미지 ID에 대해 권한 부여 검사가 통과됩니다.

프론트엔드 이미지 템플릿에서 $this->escape() 호출이 누락된 것과 결합되어, 편집자는 관리자 소유 이미지를 포함한 모든 이미지 제목에 XSS 페이로드를 저장할 수 있으며, 이로 인해 모든 방문자의 브라우저에서 JavaScript가 실행됩니다. 이를 통해 완전한 관리자 세션 탈취와 사이트 전체 장악이 가능합니다.


영향받는 버전

구성 요소취약 버전테스트 환경수정 버전
JoomGallery (com_joomgallery)4.0.0 – 4.3.0Joomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.2 / Apache)4.4.0

취약점 세부 정보

유형: 저장형 크로스 사이트 스크립팅(CWE-79)과 연계된 객체 수준 권한 부여 결함 / IDOR (CWE-639) 필요한 인증: 낮은 권한의 편집자(Editor) 계정

근본 원인 1 — IDOR (CWE-639)

파일: components/com_joomgallery/src/Controller/UserimageController.php

save() 작업은 edit.own 대신 edit 권한을 사용하여 ACL 검사를 수행합니다. edit 권한은 모든 편집자 역할 사용자에게 전역적으로 부여되므로, 작성자가 누구인지와 관계없이 모든 이미지 ID에 대해 검사가 통과됩니다.

USERIMAGECONTROLLER.PHP — 취약 코드 (145행)

root@kitploit:~
// Vulnerable
if (!$this->checkACL('edit', 'image', $recordId, $parent_id, true)) { ... }

core.edit 권한은 편집자 그룹이 전역적으로 보유하므로 조건은 모든 이미지 ID에 대해 false로 평가되어 제한 없는 쓰기 액세스를 부여합니다. 저장에 성공하면 모델은 추가로 created_by를 공격자의 사용자 ID로 업데이트하여 이미지의 소유권을 공격자에게 조용히 이전합니다.

근본 원인 2 — 저장형 XSS (CWE-79)

파일: components/com_joomgallery/tmpl/image/default.php

프론트엔드 이미지 템플릿은 $this->item->title을 alt 속성 컨텍스트로 HTML 인코딩하지 않고 출력합니다. Joomla의 JInput STRING 필터는 큰따옴표 문자를 제거하지 않으므로 "를 포함한 페이로드가 속성을 빠져나와 임의의 이벤트 핸들러를 주입할 수 있습니다.

DEFAULT.PHP — 취약 코드 (64행, 78행)

root@kitploit:~
// Vulnerable
item->title; ?>" ...>

페이로드 abc" onmouseover="alert(document.domain);" x="는 jos_joomgallery.title에 저장되며, 페이지가 렌더링될 때마다 HTML 속성에 원시 상태로 주입됩니다. 저장 계층이나 표시 계층에서 어떠한 삭제(sanitization)도 수행되지 않습니다.


개념 증명 (PoC)

공격 체인 개요

  1. 관리자가 갤러리 이미지(ID=3)를 생성합니다. 소유자 = 관리자(Administrator). 게시 및 승인 상태.
  2. 공격자가 편집자(Editor)로 로그인합니다. 로그인 페이지에서 세션 쿠키와 CSRF 토큰을 추출합니다.
  3. 공격자가 JoomGallery 구성 요소에서 새 CSRF 토큰을 가져옵니다.
  4. IDOR: 편집자가 jform[title]에 XSS 페이로드를 담아 task=userimage.save&id=3으로 POST합니다. ACL 검사가 통과됩니다(edit.own이 아닌 core.edit). 서버는 HTTP 403이 아닌 303을 반환합니다.
  5. 제목이 이스케이프되지 않은 페이로드로 업데이트됩니다. created_by가 공격자의 사용자 ID로 이전됩니다.
  6. XSS 페이로드가 이스케이프되지 않은 상태로 jos_joomgallery.title에 저장됩니다.
  7. 아무 방문자(또는 관리자)가 갤러리 프론트엔드를 탐색합니다. 템플릿이 alt="abc" onmouseover="alert(document.domain);"를 렌더링합니다. XSS가 실행됩니다. 관리자 세션이 탈취되어 → 사이트 전체가 장악됩니다.

1. 관리자가 갤러리 이미지 생성 — 소유자: 관리자, ID = 3

관리자가 JoomGallery 백엔드(Joomla 5.4.7)를 통해 admin_image를 생성합니다. 이미지는 게시 및 승인 상태이며 관리자가 소유합니다.

단계 1


2. 편집자가 로그인 페이지에서 CSRF 토큰 추출

GET /index.php/component/users/login — 응답 JSON에 "csrf.token":"a68c2b3a..."가 포함되어 있습니다. 후속 로그인 POST를 위해 토큰을 캡처합니다.

단계 2


3. 편집자 로그인 — HTTP 303, joomla_user_state=logged_in

CSRF 토큰과 편집자 자격 증명으로 POST /index.php/component/users/login을 수행합니다. 응답: HTTP 303 및 Set-Cookie: joomla_user_state=logged_in. 세션 쿠키를 캡처합니다.

단계 3


4. 편집자가 새 JoomGallery CSRF 토큰 추출

세션 쿠키로 GET /index.php?option=com_joomgallery를 수행합니다. 응답에는 저장 요청에 사용할 새 "csrf.token":"2d96934b..."가 포함되어 있습니다.

단계 4


5. IDOR + XSS 주입 — 서버가 HTTP 303으로 수락

편집자가 jform[title]을 다음과 같이 설정하여 option=com_joomgallery&task=userimage.save&id=3으로 POST합니다:

root@kitploit:~
abc" onmouseover="alert(document.domain);" x="

서버가 HTTP 403이 아닌 303을 반환하여 IDOR을 확인합니다. Location 헤더의 리디렉션 URL에 XSS 페이로드가 표시되어 제목이 수락 및 저장되었음을 확인합니다.

단계 5


6. 소유권 이전 — 소유자가 편집자 사용자로 변경됨

JoomGallery 백엔드에 이미지 ID=3의 소유자가 이제 Editor User로 표시됩니다. 승인되지 않은 저장 중에 데이터베이스의 created_by 필드가 조용히 업데이트되었습니다.

단계 6


7. 데이터베이스가 이스케이프되지 않은 페이로드 저장을 확인

jos_joomgallery에 대한 SQL 쿼리는 XSS 페이로드가 저장되었음을 확인합니다 — "가 "가 아닌 원시 큰따옴표로 저장됩니다. 저장 계층에서 어떠한 삭제(sanitization)도 수행되지 않았습니다.

단계 7


8. 갤러리 프론트엔드에서 XSS 실행

/index.php/component/joomgallery/gallery를 방문하는 모든 사용자가 페이로드를 트리거합니다. 브라우저의 alert() 대화상자가 피해자 오리진(document.domain)에서 JavaScript 실행을 확인합니다.

단계 8


영향

  1. 승인되지 않은 이미지 수정 (IDOR): 편집자 역할 사용자는 소유권 검증 없이 관리자가 소유한 이미지를 포함한 사이트의 모든 갤러리 이미지를 수정할 수 있습니다.
  2. 조용한 소유권 이전: 승인되지 않은 모든 저장은 created_by를 공격자에게 조용히 재할당하여 감사 추적(audit trail)을 영구적으로 변경합니다.
  3. 저장형 XSS — 지속적 실행: 주입된 JavaScript 페이로드는 갤러리 페이지가 로드될 때마다 모든 방문자의 브라우저에서 실행되며, 인증되지 않은 방문자와 관리자 모두에게 영향을 미칩니다.
  4. 관리자 세션 탈취 → 사이트 전체 장악: alt 속성의 악성 스크립트가 관리자의 세션 쿠키를 유출하여 공격자에게 전체 백엔드 액세스와 Joomla 설치 전체에 대한 제어 권한을 부여할 수 있습니다.
  5. 범위 변경: XSS는 피해자의 브라우저 오리진(CVSS S:C)에서 실행되며, 공격자의 낮은 권한 세션과 피해자의 높은 권한 세션 사이의 신뢰 경계를 넘어섭니다.

참조

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66917
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66917
  • GitHub 권고: https://github.com/advisories/GHSA-8vxv-gf52-gm5h
  • 공급업체 저장소: https://github.com/JoomGalleryfriends/JoomGallery
  • 공급업체 새 릴리스 노트: https://www.joomgalleryfriends.net/en/blog/joomgallery-4-en/joomgallery-4-4-0.html
도구 다운로드