{"id":"CVE-2026-94571","aliases":["DEBIAN-CVE-2026-94571","EUVD-2026-84116","GHSA-33h9-ppgm-5785","UBUNTU-CVE-2026-94571","USN-8814-1"],"status":"published","title":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters...","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","severity":{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00534,"percentile":0.45376,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-94"],"published":"2026-09-21T20:09:16Z","modified":"2026-10-28T02:30:55Z","fixes":[{"ecosystem":"Debian:14","package":"octavia","fixed_in":["18.0.0-4"],"sources":["osv"]},{"ecosystem":"Ubuntu:22.04:LTS","package":"octavia","fixed_in":["1:10.1.1-0ubuntu1.5"],"sources":["osv"]},{"ecosystem":"Ubuntu:24.04:LTS","package":"octavia","fixed_in":["1:14.0.0-0ubuntu1.6"],"sources":["osv"]},{"ecosystem":"Ubuntu:26.04:LTS","package":"octavia","fixed_in":["1:18.0.0-0ubuntu2.1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["11.0.0-2","12.0.0-1","12.0.0-2","12.0.0-3","12.0.0-4","12.0.0~rc1-1","12.0.0~rc2-1","13.0.0-1","13.0.0-2","13.0.0~rc1-1","14.0.0-1","14.0.0-2","14.0.0-3","14.0.0-4","14.0.0~rc1-1","15.0.0-1","15.0.0-2","15.0.0-3","15.0.0~rc1-1","15.0.0~rc1-2","15.0.0~rc1-3","16.0.0-1","16.0.0-2","16.0.0-3","16.0.0~rc1-1","16.0.0~rc1-2","17.0.0-1","17.0.0-2","17.0.0-3","17.0.0-4","17.0.0-5","17.0.0~rc1-1","17.0.0~rc2-1","17.0.0~rc2-2","17.0.0~rc2-3","18.0.0-1","18.0.0-2","18.0.0-3","18.0.0-4","18.0.0~rc1-1","18.0.0~rc1-2","19.0.0~rc1-1","19.0.0~rc1-2"]},{"source":"osv","ecosystem":"Debian:13","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["16.0.0-2","16.0.0-3","17.0.0-1","17.0.0-2","17.0.0-3","17.0.0-4","17.0.0-5","17.0.0~rc1-1","17.0.0~rc2-1","17.0.0~rc2-2","17.0.0~rc2-3","18.0.0-1","18.0.0-2","18.0.0-3","18.0.0-4","18.0.0~rc1-1","18.0.0~rc1-2","19.0.0~rc1-1","19.0.0~rc1-2"]},{"source":"osv","ecosystem":"Debian:14","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"18.0.0-4"}]}],"versions":["16.0.0-2","16.0.0-3","17.0.0-1","17.0.0-2","17.0.0-3","17.0.0-4","17.0.0-5","17.0.0~rc1-1","17.0.0~rc2-1","17.0.0~rc2-2","17.0.0~rc2-3","18.0.0-1","18.0.0-2","18.0.0-3","18.0.0~rc1-1","18.0.0~rc1-2"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.0.0-0ubuntu1","6.0.0~b1~git2019121614.45cb1e4e-0ubuntu1","6.0.0~b2~git2020020614.005cd1e6-0ubuntu1","6.0.0~b2~git2020020614.005cd1e6-0ubuntu2","6.0.0~b3~git2020032609.73fca169-0ubuntu1","6.0.0~b3~git2020041014.771a5d87-0ubuntu1","6.0.0-0ubuntu0.20.04.1","6.0.0-0ubuntu0.20.04.2","6.1.0-0ubuntu1","6.2.0-0ubuntu1","6.2.1-0ubuntu1","6.2.1-0ubuntu2","6.2.2-0ubuntu1","6.2.2-0ubuntu1.1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:10.1.1-0ubuntu1.5"}]}],"versions":["1:9.0.0-0ubuntu1","1:9.0.0+git2021120816.ab3c3ef7-0ubuntu1","1:9.0.1+git2022011217.27e5b27d-0ubuntu1","1:9.0.1+git2022030314.328ffbab-0ubuntu1","1:10.0.0-0ubuntu1","1:10.1.0-0ubuntu1","1:10.1.1-0ubuntu1","1:10.1.1-0ubuntu1.1","1:10.1.1-0ubuntu1.2","1:10.1.1-0ubuntu1.3","1:10.1.1-0ubuntu1.4"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:14.0.0-0ubuntu1.6"}]}],"versions":["1:13.0.0-0ubuntu1","1:13.0.0+git2024011917.5750e451-0ubuntu1","1:14.0.0~rc1-0ubuntu1","1:14.0.0-0ubuntu1","1:14.0.0-0ubuntu1.1","1:14.0.0-0ubuntu1.2","1:14.0.0-0ubuntu1.3","1:14.0.0-0ubuntu1.4","1:14.0.0-0ubuntu1.5"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:18.0.0-0ubuntu2.1"}]}],"versions":["1:17.0.0-0ubuntu1","1:17.0.0+git20260116.e805a93-0ubuntu1","1:18.0.0~rc1-0ubuntu2","1:18.0.0-0ubuntu1","1:18.0.0-0ubuntu2"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:10.1.1-0ubuntu1.5"}]}],"versions":["1:9.0.0-0ubuntu1","1:9.0.0+git2021120816.ab3c3ef7-0ubuntu1","1:9.0.1+git2022011217.27e5b27d-0ubuntu1","1:9.0.1+git2022030314.328ffbab-0ubuntu1","1:10.0.0-0ubuntu1","1:10.1.0-0ubuntu1","1:10.1.1-0ubuntu1","1:10.1.1-0ubuntu1.1","1:10.1.1-0ubuntu1.2","1:10.1.1-0ubuntu1.3","1:10.1.1-0ubuntu1.4"],"bundled":3},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:14.0.0-0ubuntu1.6"}]}],"versions":["1:13.0.0-0ubuntu1","1:13.0.0+git2024011917.5750e451-0ubuntu1","1:14.0.0~rc1-0ubuntu1","1:14.0.0-0ubuntu1","1:14.0.0-0ubuntu1.1","1:14.0.0-0ubuntu1.2","1:14.0.0-0ubuntu1.3","1:14.0.0-0ubuntu1.4","1:14.0.0-0ubuntu1.5"],"bundled":3},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"octavia","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:18.0.0-0ubuntu2.1"}]}],"versions":["1:17.0.0-0ubuntu1","1:17.0.0+git20260116.e805a93-0ubuntu1","1:18.0.0~rc1-0ubuntu2","1:18.0.0-0ubuntu1","1:18.0.0-0ubuntu2"],"bundled":3}],"products":[{"vendor":"openstack","product":"octavia"}],"references":[{"url":"https://bugs.launchpad.net/octavia/+bug/2162103","tags":["issue-tracking","report"]},{"url":"https://bugs.launchpad.net/octavia/+bug/2167565","tags":["issue-tracking","report"]},{"url":"https://bugs.debian.org/1148175","tags":["issue-tracking","report"]},{"url":"https://opendev.org/openstack/octavia/commit/bad7074621562d90a38be4639c1ab3e245f5bf39","tags":["patch","fix","report"]},{"url":"https://security.openstack.org/ossa/OSSA-2026-039.html","tags":["vendor-advisory","advisory","report"]},{"url":"https://openwall.com/lists/oss-security/2026/09/21/6","tags":["mailing-list","article","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-94571","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-33h9-ppgm-5785"},{"url":"https://opendev.org/openstack/octavia","tags":["web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/94xxx/CVE-2026-94571.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-94571","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-94571","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-94571","tags":["report"]},{"url":"https://opendev.org/openstack/octavia/commit/cad62902e4984a46ad80cbfa943e90006d8d599d","tags":["report"]},{"url":"https://ubuntu.com/security/notices/USN-8814-1","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-74248","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-94572","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-94571","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T20:09:16.848Z","modified":"2026-09-22T13:36:39.179Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"critical","assessor":"cna"}],"cwes":["CWE-94"],"updated_at":"2026-11-02T14:19:54.122945Z"}],"euvd":[{"id":"EUVD-2026-84116","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T20:09:16Z","modified":"2026-09-22T13:36:39Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"critical"}],"updated_at":"2026-11-02T17:28:03.363938Z"}],"ghsa":[{"id":"GHSA-33h9-ppgm-5785","title":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters...","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T21:31:57Z","modified":"2026-09-21T21:32:01Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"critical"}],"cwes":["CWE-94"],"updated_at":"2026-11-02T15:12:16.582397Z"}],"nvd":[{"id":"CVE-2026-94571","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T21:17:21.97Z","modified":"2026-09-22T19:56:19.073Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"critical","assessor":"secondary"}],"cwes":["CWE-94"],"updated_at":"2026-11-02T14:12:50.368368Z"}],"osv":[{"id":"CVE-2026-94571","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T20:09:16.848Z","modified":"2026-10-28T02:30:55.669760457Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"critical"}],"cwes":["CWE-94"],"updated_at":"2026-11-02T15:45:20.931171Z"},{"id":"DEBIAN-CVE-2026-94571","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T21:17:21.97Z","modified":"2026-09-23T08:47:25.465589765Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"critical"}],"updated_at":"2026-11-02T15:46:07.324252Z"},{"id":"UBUNTU-CVE-2026-94571","description":"In OpenStack Octavia before 18.0.1, the Amphora provider driver did not reject control characters in the L7 policy redirect_url and redirect_prefix fields. The RFC 3986 URL validator percent-encodes control characters before validating, and thus newlines passed structural checks, but Octavia stored and wrote the raw unencoded value directly into the HAProxy configuration generated on the amphora. An authenticated project member who owns a load balancer can therefore inject arbitrary HAProxy directives through a REDIRECT_TO_URL L7 policy. Only deployments using the Amphora provider are affected.","status":"published","published":"2026-09-21T21:17:00Z","modified":"2026-09-24T18:30:04.237435756Z","cvss":[{"version":"4.0","score":9.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H","level":"critical"}],"updated_at":"2026-11-02T16:57:44.071534Z"},{"id":"USN-8814-1","title":"octavia vulnerabilities","description":"It was discovered that Octavia did not properly validate TLS cipher\nstring fields in the Amphora provider driver. An authenticated\nattacker who owns a TLS-enabled load balancer could possibly use\nthis issue to inject arbitrary HAProxy configuration directives.\n(CVE-2026-94572)\n\nIt was discovered that Octavia did not properly validate L7 policy\nredirect URL fields in the Amphora provider driver. An authenticated\nattacker who owns a load balancer could possibly use this issue to\ninject arbitrary HAProxy configuration directives. (CVE-2026-94571)\n\nIt was discovered that Octavia incorrectly handled quality of service\npolicy authorization. An authenticated attacker could possibly use\nthis issue to prevent deletion of another project's QoS policy.\n(CVE-2026-74248)","status":"published","published":"2026-09-24T12:38:30Z","modified":"2026-09-25T00:43:09.032963047Z","updated_at":"2026-11-02T16:58:26.907654Z"}]}}
