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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-68147-OSPOS-Stored-XSS — CVE-2025-68147용 PoC 저장소: OpenSourcePOS의 저장형 교차 사이트 스크립팅(XSS). 이 취약점은 Store Config 모듈에 악성 JavaScript를 주입하여 권한 상승을 허용합니다. 페이로드 세부 정보 및 패치 검증(v3.4.0) 포함. 보안 연구원: Aditya Singh (Nixon-H). | Kitploit
도구/GitHubGitHub/nixon-h/cve-2025-68147-ospos-stored-xss
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubnixon-h/cve-2025-68147-ospos-stored-xss

CVE-2025-68147-OSPOS-Stored-XSS

CVE-2025-68147용 PoC 저장소: OpenSourcePOS의 저장형 교차 사이트 스크립팅(XSS). 이 취약점은 Store Config 모듈에 악성 JavaScript를 주입하여 권한 상승을 허용합니다. 페이로드 세부 정보 및 패치 검증(v3.4.0) 포함. 보안 연구원: Aditya Singh (Nixon-H).

저장소 보기
2123개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-68147: OpenSourcePOS의 저장형 교차 사이트 스크립팅 (XSS)

메타데이터세부 사항
CVE IDCVE-2025-68147
심각도높음 CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
취약점 유형저장형 교차 사이트 스크립팅 (CWE-79)
영향을 받는 버전OpenSourcePOS v3.4.0, v3.4.1
패치된 버전v3.4.2
취약한 구성 요소매장 구성 모듈 (반품 정책 필드)
보고자Aditya Singh (Nixon-H)

📝 요약

OpenSourcePOS의 매장 구성 모듈에서 저장형 교차 사이트 스크립팅 (XSS) 취약점이 발견되었습니다. 애플리케이션이 "반품 정책" 필드에서 사용자 입력을 ospos_app_config 데이터베이스 테이블에 저장하기 전에 제대로 이스케이프(escape)하지 못했습니다.

이 결함으로 인해 구성 권한이 있는 인증된 공격자(또는 별도의 CSRF 체인을 이용하는 공격자)가 임의의 JavaScript 페이로드를 주입할 수 있었습니다. "반품 정책"은 모든 판매 영수증에서 동적으로 렌더링되므로, 주입된 페이로드는 영수증이 생성되거나 조회될 때 모든 사용자(낮은 권한의 계산원, 다른 관리자, 고객 포함)의 브라우저에서 자동으로 실행됩니다.


🕵️‍♂️ 기술적 근본 원인 분석

1. 취약한 로직

취약점은 영수증 보기 템플릿 app/Views/sales/receipt_default.php에 있습니다.

애플리케이션은 전역 구성 배열($this->config['return_policy'])에서 "반품 정책" 문자열을 가져와 표시를 준비합니다.

  • 실수: 개발자는 네이티브 PHP 함수 nl2br()를 사용하여 새 줄을 HTML 줄 바꿈(<br>)으로 변환했습니다.
  • 문제점: nl2br()는 HTML 특수 문자를 정화(sanitize)하지 않습니다. <script>, ``, onload 속성 같은 태그를 그대로 남겨둡니다.

취약한 코드 (패치 전):

root@kitploit:~
<div id="sale_return_policy">
    <?php echo nl2br($this->config['return_policy']); ?>
</div>

2. 데이터베이스에 저장

관리자가 구성을 저장하면 페이로드가 데이터베이스에 원본 그대로 저장됩니다.

  • 테이블: ospos_app_config
  • 키: return_policy
  • 값: Policy Text... <script>alert('XSS')</script>

컨트롤러 측(Config.php)에서 입력 정화가 없고, 뷰 측(receipt_default.php)에서 출력 이스케이프가 없기 때문에 애플리케이션은 저장형 XSS에 취약합니다.


💥 개념 증명 (PoC)

공격 벡터

공격은 Store Configuration 패널을 대상으로 하지만 Sales/Receipt 모듈에 영향을 미칩니다.

  1. 진입점: http://[TARGET]/config (구성을 저장하는 POST 요청)
  2. 실행점: http://[TARGET]/sales/receipt/[SALE_ID]

단계별 익스플로잇

1단계: 주입 관리자로 로그인한 후 Store Configuration -> General로 이동했습니다. "Return Policy" 텍스트 영역에 다음 특정 페이로드를 주입했습니다:

root@kitploit:~
Standard Return Policy: No Refunds.
<script>alert('XSS_BY_NIXON_SUCCESSFUL')</script>

2단계: 지속성 "Submit"을 클릭하면 애플리케이션이 /config/save로 POST 요청을 보냈습니다. 페이로드가 데이터베이스에 성공적으로 저장되었습니다.

3단계: 트리거 다른 사용자에 대한 영향을 확인하기 위해:

  1. 로그아웃한 후 계산원(낮은 권한 계정)으로 다시 로그인했습니다.
  2. Sales 모듈로 이동했습니다.
  3. 장바구니에 테스트 항목을 추가하고 "Complete Sale" 을 클릭했습니다.
  4. 결과: 애플리케이션이 영수증 보기(예: http://localhost/sales/receipt/1)로 리디렉션됩니다. 브라우저가 return_policy div를 구문 분석하고 <script> 태그를 만나 즉시 JavaScript를 실행합니다.

관찰된 결과: 메시지가 XSS_BY_NIXON_SUCCESSFUL 인 브라우저 경고 상자가 나타났습니다.

📷 미디어 증거

스크린샷 1: 알림 트리거

스크린샷 2: 구성 내 페이로드

🎥 동영상 데모: PoC 동영상 다운로드 / 보기


⚠️ 영향 시나리오

이는 범위 변경 (S:C) 취약점입니다. 공격이 서버에 저장되지만 피해자의 브라우저 컨텍스트에서 실행되기 때문입니다.

  1. 권한 상승 및 계정 탈취:
  • 시나리오: 공격자가 세션 쿠키를 탈취하도록 설계된 JavaScript 페이로드를 주입합니다.
  • 실행: 슈퍼 관리자가 과거 영수증(예: /sales/receipt/105)을 조회합니다. 스크립트가 조용히 실행되어 document.cookie(ospos_session ID 포함)를 공격자의 서버로 전송합니다.
  • 영향: 공격자가 슈퍼 관리자의 세션을 가로채 비밀번호 없이 시스템을 완전히 제어할 수 있습니다.
  1. 웜 형태의 관리자 계정 생성:
  • 시나리오: 페이로드가 AJAX(XMLHttpRequest)를 사용하여 관리 작업을 수행하는 스크립트입니다.
  • 실행: 로그인한 관리자가 영수증을 볼 때 스크립트가 브라우저를 강제로 /employees/save에 숨겨진 POST 요청을 보냅니다.
  • 영향: 백그라운드에서 즉시 새 관리자 계정(예: hacker / password123)이 생성됩니다. 피해자는 영수증만 볼 뿐이며, 공격자는 영구적인 백도어를 얻습니다.
  1. 변조 및 피싱:
  • 시나리오: 공격자가 DOM을 수정하여 영수증의 재무 정보를 변경합니다.
  • 실행: "반품 정책" 스크립트가 바닥글 또는 지침을 다시 작성합니다.
  • 영향: 영수증에 사기성 은행 정보나 암호화폐 지갑 주소("다음으로 송금해 주세요...")가 표시되어 고객이나 비즈니스에 금전적 사기가 발생합니다.

🛡️ 해결 방법

이 취약점은 OpenSourcePOS v3.4.2에서 수정되었습니다.

관리자는 컨텍스트 인식 출력 인코딩을 구현하는 패치를 적용했습니다. 이제 구성 값이 nl2br()에 전달되기 전에 CodeIgniter의 전역 esc() 헬퍼 함수로 래핑됩니다.

패치 (커밋 22297a):

root@kitploit:~
<div id="sale_return_policy">
    <?php echo nl2br(esc($this->config['return_policy'])); ?>
</div>

확인: v3.4.2로 업그레이드한 후, 동일한 페이로드가 무해한 텍스트로 렌더링됩니다:

Standard Return Policy: No Refunds. &lt;script&gt;alert('XSS_BY_NIXON_SUCCESSFUL')&lt;/script&gt;


📅 공개 일정

  • 2025-12-12: Aditya Singh (Nixon-H) 가 수동 보안 감사 중 취약점 발견.
  • 2025-12-13: 이메일/GitHub를 통해 관리자(Jeroen Peelaerts)에게 책임 있는 공개 보고서 전송.
  • 2025-12-14: 관리자가 취약점 확인. CVE-2025-68147 예약됨.
  • 2025-12-14: 패치 개발(커밋 22297a) 및 연구자가 검증.
  • 2025-12-19: 버전 3.4.2에 패치 릴리스됨.
  • 2025-12-19: GitHub Security Advisory를 통한 공개 공개.

🔗 참고 자료

  • Advisory: GHSA-xgr7-7pvw-fpmh
  • 패치: 커밋 22297a
  • 보고자: Aditya Singh (Nixon-H)
도구 다운로드