Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/rootdirective-sec/cve-2026-27541-analysis-lab
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubrootdirective-sec/cve-2026-27541-analysis-lab

CVE-2026-27541-Analysis-Lab

# Lab Docker pour reproduire la CVE-2026-27541, une élévation de privilèges authentifiée dans WooCommerce Wholesale Prices. Compare les versions vulnérable et corrigée, inclut un script PoC et une analyse de la cause racine.

Voir le dépôt
19il y a 6 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-27541 — Laboratoire d'élévation de privilèges authentifiée WooCommerce Wholesale Prices

vulnx

Présentation

Ce projet est un laboratoire Docker local permettant d'analyser et de reproduire le comportement de CVE-2026-27541 dans le plugin WooCommerce Wholesale Prices / Wholesale Suite en comparant les versions vulnérable et corrigée côte à côte sur la même machine.

Le problème principal est un Contrôle d'accès cassé dans le point de terminaison d'API REST suivant :

/wp-json/wwp/v1/admin/save

D'après le code source utilisé dans ce laboratoire, cette route possède déjà un permission_callback dans les versions vulnérable et corrigée. Cependant, la version affectée utilise un contrôle de capacité trop large pour une action d'écriture des paramètres administrateur :

  • vulnérable (2.2.6) → current_user_can( 'manage_woocommerce' )
  • corrigée (2.2.7) → current_user_can( 'manage_options' )

Dans ce laboratoire, l'utilisateur shopmgr, qui possède le rôle shop_manager, a manage_woocommerce=true mais pas manage_options. Par conséquent, cet utilisateur à faibles privilèges peut utiliser une session connectée valide ainsi qu'un X-WP-Nonce valide pour invoquer le point de terminaison d'enregistrement des paramètres administrateur sur la version vulnérable, tandis que la version corrigée renvoie 403 rest_forbidden pour la même requête.


Ce que prouve ce laboratoire

  • Nœud vulnérable (2.2.6) : l'utilisateur shopmgr peut appeler avec succès POST /wp-json/wwp/v1/admin/save et modifier les paramètres du plugin.
  • Nœud corrigé (2.2.7) : la même requête de shopmgr est rejetée avec 403.
  • Requête non authentifiée : si le point de terminaison est appelé directement sans authentification, les deux versions renvoient 403, ce qui est cohérent avec un problème d'élévation de privilèges post-authentification.
  • Preuve de persistance : après une exécution réussie du PoC, la version vulnérable stocke l'option WordPress wwp_see_wholesale_prices_replacement_text=PWNED_BY_POC, tandis que la version corrigée renvoie toujours See wholesale prices.

Topologie du laboratoire

Services

  • vuln → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.6
  • patched → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.7
  • db-vuln / db-patched → bases de données MariaDB distinctes
  • seed-vuln / seed-patched → tâches d'initialisation wp-cli qui installent WordPress, installent le plugin, créent les utilisateurs et créent un produit pour les tests

Ports publiés

  • http://localhost:8081 → vulnérable
  • http://localhost:8082 → corrigé

Images de base

  • WordPress : wordpress:6.8.1-php8.2-apache
  • MariaDB : mariadb:11.4.5
  • Seed : wordpress:cli-php8.2

Structure du dépôt

.
├── docker-compose.yml
├── README.md
├── patched/
│   └── Dockerfile
├── vuln/
│   └── Dockerfile
├── scripts/
│   └── seed-wp.sh
└── poc.py

Fichiers importants

  • docker-compose.yml — définit les piles vulnérable et corrigée avec des bases de données distinctes
  • scripts/seed-wp.sh — installe WordPress, WooCommerce, le plugin cible, et crée les utilisateurs de test et les données produit
  • poc.py — PoC à impact minimal pour la connexion, l'extraction du nonce et l'invocation du point de terminaison REST

Environnement initialisé

Une fois la pile prête, le script d'initialisation crée les éléments suivants :

Utilisateurs

  • admin / AdminPass!234
  • shopmgr / ShopMgrPass!234

Produit

  • slug : lab-product
  • prix normal : 100
  • prix de gros : 50

Versions

  • WooCommerce : 10.6.0

  • WooCommerce Wholesale Prices :

    • vulnérable : 2.2.6
    • corrigé : 2.2.7

Le script écrit également lab-secrets.json dans chaque conteneur WordPress afin que les données initialisées et les informations de version puissent être vérifiées.


Pourquoi le PoC est à impact minimal

Ce PoC ne tente pas de prendre le contrôle du site, de modifier les rôles, d'installer des plugins ou d'exécuter un shell.

Il fait uniquement ce qui suit :

  1. se connecte en tant que shopmgr
  2. visite la page d'administration concernée pour extraire wpApiSettings.nonce
  3. envoie une requête au point de terminaison cible
  4. modifie une valeur de paramètre facilement observable :
wwp_see_wholesale_prices_replacement_text = PWNED_BY_POC

Ce paramètre est utilisé comme marqueur observable pour démontrer qu'un utilisateur à faibles privilèges peut modifier une configuration réservée à l'administrateur.


Résumé de la vulnérabilité

Composant affecté

  • Plugin : WooCommerce Wholesale Prices / Wholesale Suite
  • Route : POST /wp-json/wwp/v1/admin/save

Classe de vulnérabilité

  • Contrôle d'accès cassé
  • Élévation de privilèges authentifiée

Signification pratique

Bien que le point de terminaison exige une session et un nonce valides, la version vulnérable permet toujours à un utilisateur à faibles privilèges tel que shopmgr avec le rôle shop_manager d'invoquer un point de terminaison qui devrait être réservé à l'administrateur.

Nuance importante

Il ne s'agit pas d'une vulnérabilité non authentifiée.

Si le point de terminaison est appelé directement sans session connectée, les versions vulnérable et corrigée rejettent toutes deux la requête. Le bug réside dans l'autorisation après authentification, pas dans l'authentification elle-même.


Analyse de la cause racine

La version vulnérable ne manque pas de permission_callback. Le défaut est qu'elle utilise un contrôle de capacité trop large (manage_woocommerce) pour une action REST qui écrit des paramètres côté administrateur.

D'après le code source dans includes/class-wwp-admin-settings.php :

  • les versions vulnérable et corrigée enregistrent toutes deux la même route : POST /wp-json/wwp/v1/admin/save
  • les deux versions la dirigent vers save_registered_settings()
  • les deux versions utilisent permission_admin_check() comme permission_callback
  • la véritable différence réside dans la capacité vérifiée

Vulnérable (2.2.6)

if ( ! current_user_can( 'manage_woocommerce' ) ) {
    return new WP_Error( 'rest_forbidden', ... );
}

Corrigé (2.2.7)

if ( ! current_user_can( 'manage_options' ) ) {
    return new WP_Error( 'rest_forbidden', ... );
}

Dans ce laboratoire, l'utilisateur shopmgr, qui possède le rôle shop_manager, a manage_woocommerce=true mais pas manage_options, il réussit donc le contrôle vulnérable mais échoue au contrôle corrigé.

Ce qui a changé dans le comportement corrigé

La version corrigée fait plus que changer la réponse de 200 à 403. Elle modifie la logique de contrôle d'accès en resserrant l'exigence de capacité de manage_woocommerce à manage_options.

De plus, le chemin d'enregistrement dans la version corrigée est davantage renforcé en passant d'un filtrage basé sur les préfixes à des listes blanches explicites et une sanitisation plus forte.

Pourquoi le PoC réussit sur la version vulnérable

Le PoC suit le même flux qu'un contexte de navigateur réel :

  • se connecter en tant que shopmgr
  • ouvrir la page des paramètres du plugin
  • extraire wpApiSettings.nonce
  • appeler POST /wp-json/wwp/v1/admin/save

Étant donné que la version vulnérable permet aux utilisateurs disposant de manage_woocommerce d'invoquer cette action d'écriture des paramètres, la requête réussit et entraîne une modification persistante d'option.

Leçon de sécurité

Un nonce aide à protéger contre le CSRF, mais ce n'est pas un contrôle d'autorisation.

Télécharger l’outil