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-16540-SimplyScheduleAppointments — CVE-2026-16540 — Simply Schedule Appointments < 1.6.12.6 Divulgation non authentifiée des données de rendez-vous et suppression massive | Kitploit
Outils/GitHubGitHub/huseyn0vs/cve-2026-16540-simplyscheduleappointments
Analyse des VulnérabilitésExploitation d'Applications WebExfiltration de DonnéesCollecte d'InformationsTests d'IntrusionMauvaise Configuration
GitHubhuseyn0vs/cve-2026-16540-simplyscheduleappointments

CVE-2026-16540-SimplyScheduleAppointments

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-16540 — Simply Schedule Appointments < 1.6.12.6 Divulgation non authentifiée des données de rendez-vous et suppression massive

Voir le dépôt
1il y a 29 joursPas encore vérifié

CVE-2026-16540 — Simply Schedule Appointments < 1.6.12.6

Divulgation non authentifiée des données de rendez-vous et suppression massive via l'endpoint purge

ChampDétails
CVECVE-2026-16540
ExtensionSimply Schedule Appointments
Versions concernées< 1.6.12.6
Corrigé dans1.6.12.6
Installations actives~70,000
CVSS 3.16.5 (Moyen) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
CWECWE-863 (Autorisation incorrecte)
OWASPA5 : Contrôle d'accès cassé
WPVDBc3829294-c388-4151-9e25-a3eac7b1f1c6
ChercheurSuleyman Huseynov (@huseyn0vs__)
Divulgué2026-07-22

Résumé

L'endpoint REST GET /wp-json/ssa/v1/appointments/purge de Simply Schedule Appointments applique un contrôle d'autorisation (get_items_permissions_check) qui valide un id_token prouvant la possession d'un seul rendez-vous. Cependant, le gestionnaire (purge_appointments()) ignore complètement à quel rendez-vous le jeton est associé et agit à la place sur tous les rendez-vous du site correspondant aux conditions fournies.

Un attaquant non authentifié qui réserve un seul rendez-vous via le formulaire de réservation public reçoit un id_token. Grâce à ce jeton, l'attaquant peut :

  1. Récupérer les données personnelles de tous les rendez-vous du site (noms, e-mails, numéros de téléphone, détails des rendez-vous)
  2. Supprimer définitivement tous les rendez-vous passés, annulés ou futurs (la suppression n'est possible que sur les éditions premium)

La suppression se propage en cascade sur 6 tables de base de données dépendantes, dans des transactions validées, sans fonctionnalité native d'annulation.


Analyse de la cause racine

Fichier : includes/class-appointment-model.php

Autorisation sur une ressource erronée (CWE-863)

Le contrôle de permissions et le gestionnaire opèrent sur des portées complètement différentes :

root@kitploit:~
// Route registration
register_rest_route( $namespace, '/' . $base . '/purge', array(
    array(
        'methods'             => WP_REST_Server::READABLE,
        'callback'            => array( $this, 'purge_appointments' ),
        'permission_callback' => array( $this, 'get_items_permissions_check' ),
    ),
) );

Vérification des permissions — valide la possession d'UN rendez-vous via id_token :

root@kitploit:~
public function get_items_permissions_check( $request ) {
    // ...
    if ( true === $this->id_token_permissions_check( $request ) ) {
        return true;  // grants access if caller proves ownership of one appointment
    }
    // ...
}

Gestionnaire — ignore le rendez-vous associé au jeton et agit à l'échelle du site :

root@kitploit:~
public function purge_appointments( WP_REST_Request $request ) {
    $params = $request->get_params();

    // No customer_id or appointment_id scoping — deletes ALL matching appointments
    if ( isset( $params['purge_past_appointments'] ) && 'true' === $params['purge_past_appointments'] ) {
        $conditions[] = $wpdb->prepare( 'end_date < %s', $date_modified_max->format( 'Y-m-d' ) );
    }

    $sql = 'SELECT * FROM ' . $this->get_table_name()
         . ' WHERE ' . implode( ' OR ', $conditions )
         . ' ORDER BY id ASC LIMIT 5000';

    $list = $wpdb->get_results( $sql, ARRAY_A );
    // Cascade-deletes across 6 tables in committed transactions
}

L'id_token est un HMAC-MD5 dérivé de l'id et de date_created d'un seul rendez-vous. Posséder ce jeton prouve uniquement que l'appelant a réservé un rendez-vous précis — il ne confère aucun privilège à l'échelle du site, quel qu'il soit.


Chaîne d'attaque

root@kitploit:~
1. Attacker visits the booking page and books any free appointment
   → receives confirmation email containing: appointment_id + id_token

2. GET /wp-json/ssa/v1/appointments/purge
     ?id=<appointment_id>
     &token=<id_token>
     &purge_past_appointments=true

3. Permission check passes (valid token for attacker's own appointment)

4. Handler selects ALL past appointments site-wide → returns PII in response
   → permanently deletes them across 6 tables (on premium editions)

Preuve de concept

Le PoC sera publié le 2026-08-05 après l'embargo de divulgation coordonnée.

Consultez le répertoire poc/ après la date de l'embargo.


Impact

ScénarioRésultat
Divulgation de donnéesNoms, e-mails, numéros de téléphone et détails des rendez-vous de tous les clients
Suppression massive (premium)Tous les rendez-vous passés ou futurs définitivement détruits sur 6 tables
Aucune possibilité de récupérationNécessite la restauration complète d'une sauvegarde de la base de données

Chronologie de la divulgation

DateÉvénement
2026-07-10Vulnérabilité découverte
2026-07-10Soumise à WPScan
2026-07-22CVE-2026-16540 attribuée

Références

  • Avis WPScan
  • Page de l'extension WordPress
  • CWE-863 : Autorisation incorrecte
  • OWASP A5 : Contrôle d'accès cassé
Télécharger l’outil
2026-07-22Divulgation publique sur WPScan
2026-08-05PoC publié