{"id":"CVE-2026-45564","aliases":["EUVD-2026-36044","GHSA-w42x-3v8j-cmg2"],"status":"published","title":"Roxy-WI: Authenticated RCE via 'configver' URL parameter (os.system sink in /config/versions/.../save)","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, POST /config/versions/\u003cservice\u003e/\u003cserver_ip\u003e/\u003cconfigver\u003e/save interpolates the URL-path configver parameter directly into a config-version path that ends up at os.system(f\"dos2unix -q {cfg}\"). configver is not run through EscapedString (Pydantic doesn't validate path segments declared as str) and the surrounding .. block is the broken tuple-membership patch from GHSA-vapt-004. An authenticated user with role \u003c= 3 (\"user\") therefore reaches a bin/sh -c command-injection sink. At time of publication, there are no publicly available patches.","severity":{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00304,"percentile":0.23534,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-78"],"published":"2026-06-10T14:04:05Z","modified":"2026-10-28T02:30:56Z","products":[{"vendor":"roxy-wi","product":"roxy-wi"}],"references":[{"url":"https://github.com/roxy-wi/roxy-wi/security/advisories/GHSA-w42x-3v8j-cmg2","tags":["x_refsource_CONFIRM","exploit","advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45564.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-45564","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-45564","title":"Roxy-WI: Authenticated RCE via 'configver' URL parameter (os.system sink in /config/versions/.../save)","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, POST /config/versions/\u003cservice\u003e/\u003cserver_ip\u003e/\u003cconfigver\u003e/save interpolates the URL-path configver parameter directly into a config-version path that ends up at os.system(f\"dos2unix -q {cfg}\"). configver is not run through EscapedString (Pydantic doesn't validate path segments declared as str) and the surrounding .. block is the broken tuple-membership patch from GHSA-vapt-004. An authenticated user with role \u003c= 3 (\"user\") therefore reaches a bin/sh -c command-injection sink. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T14:04:05.08Z","modified":"2026-06-10T14:41:27.646Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T13:46:32.755125Z"}],"euvd":[{"id":"EUVD-2026-36044","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, POST /config/versions/\u003cservice\u003e/\u003cserver_ip\u003e/\u003cconfigver\u003e/save interpolates the URL-path configver parameter directly into a config-version path that ends up at os.system(f\"dos2unix -q {cfg}\"). configver is not run through EscapedString (Pydantic doesn't validate path segments declared as str) and the surrounding .. block is the broken tuple-membership patch from GHSA-vapt-004. An authenticated user with role \u003c= 3 (\"user\") therefore reaches a bin/sh -c command-injection sink. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T14:04:05Z","modified":"2026-06-10T14:41:27Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T18:20:45.405546Z"}],"nvd":[{"id":"CVE-2026-45564","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, POST /config/versions/\u003cservice\u003e/\u003cserver_ip\u003e/\u003cconfigver\u003e/save interpolates the URL-path configver parameter directly into a config-version path that ends up at os.system(f\"dos2unix -q {cfg}\"). configver is not run through EscapedString (Pydantic doesn't validate path segments declared as str) and the surrounding .. block is the broken tuple-membership patch from GHSA-vapt-004. An authenticated user with role \u003c= 3 (\"user\") therefore reaches a bin/sh -c command-injection sink. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T15:16:37.307Z","modified":"2026-06-17T10:52:12.687Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T14:12:23.485267Z"}],"osv":[{"id":"CVE-2026-45564","title":"Roxy-WI: Authenticated RCE via 'configver' URL parameter (os.system sink in /config/versions/.../save)","description":"Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, POST /config/versions/\u003cservice\u003e/\u003cserver_ip\u003e/\u003cconfigver\u003e/save interpolates the URL-path configver parameter directly into a config-version path that ends up at os.system(f\"dos2unix -q {cfg}\"). configver is not run through EscapedString (Pydantic doesn't validate path segments declared as str) and the surrounding .. block is the broken tuple-membership patch from GHSA-vapt-004. An authenticated user with role \u003c= 3 (\"user\") therefore reaches a bin/sh -c command-injection sink. At time of publication, there are no publicly available patches.","status":"published","published":"2026-06-10T14:04:05.08Z","modified":"2026-10-28T02:30:56.953633924Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T15:45:05.525666Z"}]}}
