{"id":"CVE-2026-45569","aliases":["EUVD-2026-36065","GHSA-j6p4-8532-h9hv"],"status":"published","title":"Roxy-WI: Path-traversal patch in commit d4d10006 is a no-op (tuple-membership bug)","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, ommit d4d10006 (\"Expand validation to block .. in config_file_name and configver for improved security\") added a line in app/modules/config/config.py:462. This is tuple-membership, not substring containment — '..' in (a, b, c) evaluates to True only if any of a, b, c is equal to the literal string '..'. For any realistic path-traversal payload (../../etc/passwd, ..\\\\..\\\\etc\\\\passwd, etc.) the check returns False and the patch silently lets the payload through. At time of publication, there are no publicly available patches.","severity":{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00316,"percentile":0.24706,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-22","CWE-697"],"published":"2026-06-10T15:38:17Z","modified":"2026-10-28T02:31:04Z","products":[{"vendor":"roxy-wi","product":"roxy-wi"}],"references":[{"url":"https://github.com/roxy-wi/roxy-wi/security/advisories/GHSA-j6p4-8532-h9hv","tags":["x_refsource_CONFIRM","exploit","advisory"]},{"url":"https://github.com/roxy-wi/roxy-wi/commit/d4d10006","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45569.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-45569","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-45569","title":"Roxy-WI: Path-traversal patch in commit d4d10006 is a no-op (tuple-membership bug)","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, ommit d4d10006 (\"Expand validation to block .. in config_file_name and configver for improved security\") added a line in app/modules/config/config.py:462. This is tuple-membership, not substring containment — '..' in (a, b, c) evaluates to True only if any of a, b, c is equal to the literal string '..'. For any realistic path-traversal payload (../../etc/passwd, ..\\\\..\\\\etc\\\\passwd, etc.) the check returns False and the patch silently lets the payload through. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T15:38:17.385Z","modified":"2026-06-11T13:51:46.593Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna"}],"cwes":["CWE-22","CWE-697"],"updated_at":"2026-11-02T13:46:32.755125Z"}],"euvd":[{"id":"EUVD-2026-36065","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, ommit d4d10006 (\"Expand validation to block .. in config_file_name and configver for improved security\") added a line in app/modules/config/config.py:462. This is tuple-membership, not substring containment — '..' in (a, b, c) evaluates to True only if any of a, b, c is equal to the literal string '..'. For any realistic path-traversal payload (../../etc/passwd, ..\\\\..\\\\etc\\\\passwd, etc.) the check returns False and the patch silently lets the payload through. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T15:38:17Z","modified":"2026-06-11T13:51:46Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"updated_at":"2026-11-02T18:20:44.570445Z"}],"nvd":[{"id":"CVE-2026-45569","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, ommit d4d10006 (\"Expand validation to block .. in config_file_name and configver for improved security\") added a line in app/modules/config/config.py:462. This is tuple-membership, not substring containment — '..' in (a, b, c) evaluates to True only if any of a, b, c is equal to the literal string '..'. For any realistic path-traversal payload (../../etc/passwd, ..\\\\..\\\\etc\\\\passwd, etc.) the check returns False and the patch silently lets the payload through. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T16:17:08.433Z","modified":"2026-06-17T10:52:13.077Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"secondary"}],"cwes":["CWE-22","CWE-697"],"updated_at":"2026-11-02T14:12:23.485267Z"}],"osv":[{"id":"CVE-2026-45569","title":"Roxy-WI: Path-traversal patch in commit d4d10006 is a no-op (tuple-membership bug)","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, ommit d4d10006 (\"Expand validation to block .. in config_file_name and configver for improved security\") added a line in app/modules/config/config.py:462. This is tuple-membership, not substring containment — '..' in (a, b, c) evaluates to True only if any of a, b, c is equal to the literal string '..'. For any realistic path-traversal payload (../../etc/passwd, ..\\\\..\\\\etc\\\\passwd, etc.) the check returns False and the patch silently lets the payload through. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T15:38:17.385Z","modified":"2026-10-28T02:31:04.436791319Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-22","CWE-697"],"updated_at":"2026-11-02T15:45:05.525666Z"}]}}
