CVE-2026-45552

Source
https://cve.org/CVERecord?id=CVE-2026-45552
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-45552.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-45552
Aliases
  • GHSA-v3f8-g2v8-jq5h
Published
2026-06-10T13:59:24.337Z
Modified
2026-07-08T08:12:35.498459648Z
Severity
  • 9.9 (Critical) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H CVSS Calculator
Summary
Roxy-WI: Cross-tenant authorization bypass on /install/* — guest can run Ansible / SSH on every registered server
Details

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.beforerequest → @jwtrequired() (app/routes/install/routes.py:36-39). The individual endpoints installexporter, installwaf, installgeoip, checkgeoip, getexporterversion, and gettaskstatus are not wrapped in pageforadmin and do not call roxywicommon.isuserhasaccesstoitsgroup(serverip) or checkisserveringroup(serverip). Only the GET index page (installmonitoring) gates on roxywiauth.pagefor_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.

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45552.json",
    "cna_assigner": "GitHub_M",
    "cwe_ids": [
        "CWE-639",
        "CWE-862",
        "CWE-863"
    ]
}
References

Affected packages

Git / github.com/roxy-wi/roxy-wi

Affected ranges

Type
GIT
Repo
https://github.com/roxy-wi/roxy-wi
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Last affected
Database specific
{
    "source": "AFFECTED_FIELD",
    "extracted_events": [
        {
            "introduced": "0"
        },
        {
            "last_affected": "8.2.6.4"
        }
    ]
}

Affected versions

3.*
3.4.4.6
3.4.4.7
3.4.5
3.4.5.1
v.*
v.5.3.5.0
v1.*
v1.0
v1.1
v1.10
v1.10.1
v1.10.2
v1.10.2.1
v1.3
v1.4
v1.4.1
v1.6
v1.9.1
v2.*
v2.0.2
v3.*
v3.2.13
v3.3
v4.*
v4.4.1.0
v5.*
v5.1.1.0
v5.1.4.0
v5.2.0
v5.2.1
v5.2.2.0
v5.2.3.0
v5.2.4.0
v5.2.5.0
v5.2.6.0
v5.3.0.0
v5.3.1.0
v5.3.2.0
v5.3.3.0
v5.3.4.0
v5.3.6.0
v5.4.0.0
v5.4.1.0
v5.4.2.0
v5.4.3.0
v5.5.0.0
v5.5.1.0
v6.*
v6.0.0.0
v6.0.1.0
v6.0.2.0
v6.0.3.0
v6.1.0.0
v6.1.1.0
v6.1.2.0
v6.1.3.0
v6.1.4.0
v6.1.5.0
v6.2.0.0
v6.2.1.0
v6.2.2.0
v6.2.3.0
v6.3.0.0
v6.3.1.0
v6.3.10.0
v6.3.11.0
v6.3.12.0
v6.3.13.0
v6.3.14.0
v6.3.15.0
v6.3.16.0
v6.3.17.0
v6.3.18.0
v6.3.19.0
v6.3.2.0
v6.3.3.0
v6.3.4.0
v6.3.5.0
v6.3.6.0
v6.3.7.0
v6.3.8.0
v6.3.9.0
v7.*
v7.0.0.0
v7.0.1.0
v7.0.2.0
v7.0.3.0
v7.0.4.0
v7.1.0.0
v7.1.1.0
v7.1.2.0
v7.2.0.0
v7.2.1.0
v7.2.2.0
v7.2.3.0
v7.2.4.0
v7.2.5.0
v7.2.6.0
v7.3.0.0
v7.3.1.0
v7.3.2.0
v8.*
v8.0
v8.0.1
v8.0.2
v8.1
v8.1.0.1
v8.1.1
v8.1.2
v8.1.3
v8.1.4
v8.1.5
v8.1.6
v8.1.7
v8.1.8
v8.2.0
v8.2.1
v8.2.2
v8.2.3
v8.2.4
v8.2.5
v8.2.6
v8.2.6.3
v8.2.6.4
v8.2.8.1
v8.2.8.2

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-45552.json"