Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Primary rating from NVD · only source for this CVE.
CVSS VectorNVD
Lifecycle Timeline
2DescriptionNVD
Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, the install blueprint declares only bp.before_request → @jwt_required() (app/routes/install/routes.py:36-39). The individual endpoints install_exporter, install_waf, install_geoip, check_geoip, get_exporter_version, and get_task_status are not wrapped in page_for_admin and do not call roxywi_common.is_user_has_access_to_its_group(server_ip) or check_is_server_in_group(server_ip). Only the GET index page (install_monitoring) gates on roxywi_auth.page_for_admin(level=2). Because the missing decorators omit both role and group checks, any logged-in user - including the default guest role 4 - can install/reconfigure exporters, WAF, and GeoIP databases on every server in the Roxy-WI database, regardless of tenant ownership. The Ansible playbooks run with the per-server SSH credential stored in Roxy-WI, which the credentials' rightful owner (a different tenant) has provisioned with sudo rights for the management workflow. At time of publication, there are no publicly available patches.
Articles & Coverage 4
AnalysisAI
Privilege escalation and cross-tenant compromise in Roxy-WI versions 8.2.6.4 and prior allows any authenticated user - including the default guest role 4 - to install or reconfigure exporters, WAF, and GeoIP databases on every managed server regardless of tenant ownership. Because the affected installer endpoints lack role and group decorators, low-privilege users can pivot through stored SSH credentials with sudo to achieve root-level command execution on HAProxy/Nginx/Apache hosts belonging to other tenants. No public exploit identified at time of analysis, but the issue is unpatched and rated CVSS 9.9.
Technical ContextAI
Roxy-WI is a Python/Flask web UI for managing HAProxy, Nginx, Apache, and Keepalived. The install blueprint at app/routes/install/routes.py:36-39 declares authentication globally with bp.before_request → @jwt_required(), but only the GET index page (install_monitoring) is additionally guarded by roxywi_auth.page_for_admin(level=2). The action endpoints install_exporter, install_waf, install_geoip, check_geoip, get_exporter_version, and get_task_status omit both the page_for_admin decorator and calls to roxywi_common.is_user_has_access_to_its_group(server_ip) / check_is_server_in_group(server_ip). This is a textbook CWE-639 (Authorization Bypass Through User-Controlled Key) - the server_ip parameter is trusted without verifying that the requesting tenant owns it. Once invoked, Roxy-WI dispatches Ansible playbooks using the per-server SSH credential stored in its database, which the legitimate owner has granted sudo rights for management automation.
RemediationAI
No vendor-released patch identified at time of analysis - the GitHub advisory GHSA-v3f8-g2v8-jq5h (https://github.com/roxy-wi/roxy-wi/security/advisories/GHSA-v3f8-g2v8-jq5h) confirms no public fix is available as of publication, so operators should monitor the advisory and the roxy-wi repository for an updated release above 8.2.6.4. Until a patched version ships, restrict the Roxy-WI web interface to trusted administrators only by removing or downgrading any guest (role 4) and non-admin accounts, disabling self-registration, and placing the UI behind a network ACL or VPN so only the platform team can reach it (trade-off: ends self-service for any legitimate low-privilege users). As a code-level workaround, operators comfortable patching locally can edit app/routes/install/routes.py to add @page_for_admin(level=2) and an is_user_has_access_to_its_group(server_ip) / check_is_server_in_group(server_ip) call to install_exporter, install_waf, install_geoip, check_geoip, get_exporter_version, and get_task_status (trade-off: forks the codebase and must be re-applied on upgrade). If the deployment is single-tenant, rotating per-server SSH credentials and reducing sudo scope on managed hosts limits blast radius should an account be compromised.
Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. Rated critical severity (CVSS 9.8
Roxy-WI is a Web interface for managing HAProxy, Nginx and Keepalived servers. Rated critical severity (CVSS 9.8), this
Roxy-wi is an open source web interface for managing Haproxy, Nginx, Apache and Keepalived servers. Rated critical sever
Roxy-wi is an open source web interface for managing Haproxy, Nginx, Apache and Keepalived servers. Rated critical sever
Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. Rated high severity (CVSS 8.8), t
Authenticated command injection in Roxy-WI versions prior to 8.2.8.2 enables attackers to execute arbitrary system comma
Roxy-WI is a Web interface for managing Haproxy, Nginx, Apache, and Keepalived servers. Rated high severity (CVSS 7.5),
Roxy-WI is a Web interface for managing Haproxy, Nginx, Apache, and Keepalived servers. Rated high severity (CVSS 7.5),
hap-wi/roxy-wi is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. Rated medium severity (CVS
Remote code execution in Roxy-WI versions 8.2.6.4 and prior allows authenticated low-privilege users (role ≤ 3) to injec
Remote code execution in Roxy-WI versions 8.2.6.4 and prior allows authenticated users to write attacker-controlled cont
Roxy-WI through 5.2.2.0 allows SQL Injection via check_login. Rated critical severity (CVSS 9.8), this vulnerability is
Same technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-36035