{"id":"CVE-2024-45614","aliases":["DEBIAN-CVE-2024-45614","DLA-3947-1","EUVD-2024-2761","GHSA-9hf4-67fc-4vf4","OESA-2024-2249","OESA-2024-2250","OESA-2024-2251","OESA-2024-2252","OESA-2024-2259","SUSE-SU-2024:3644-1","SUSE-SU-2025:03466-1","SUSE-SU-2025:03467-1","UBUNTU-CVE-2024-45614","USN-7031-1","USN-7031-2","openSUSE-SU-2024:14474-1","openSUSE-SU-2025:15123-1","openSUSE-SU-2026:10357-1"],"status":"published","title":"Header normalization allows for client to clobber proxy set headers in Puma","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","severity":{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.0064,"percentile":0.51177,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-444","CWE-639"],"published":"2024-09-19T22:42:33Z","modified":"2026-11-02T12:02:49Z","exploits":[{"source":"pocgithub","id":"ooooooo-q/puma_header_normalization-CVE-2024-45614","title":"ooooooo-q/puma_header_normalization-CVE-2024-45614","date":"2024-09-28","url":"https://github.com/ooooooo-q/puma_header_normalization-CVE-2024-45614"}],"fixes":[{"ecosystem":"RubyGems","package":"puma","fixed_in":["5.6.9","6.4.3"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:12","package":"puma","fixed_in":["5.6.5-3+deb12u1"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"puma","fixed_in":["6.4.3-1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"puma","fixed_in":["6.4.3-1"],"sources":["osv"]},{"ecosystem":"openEuler:20.03-LTS-SP4","package":"rubygem-puma","fixed_in":["3.12.6-4.oe2003sp4"],"sources":["osv"]},{"ecosystem":"openEuler:24.03-LTS","package":"rubygem-puma","fixed_in":["5.6.5-3.oe2403"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:20.04:LTS","package":"puma","fixed_in":["3.12.4-1ubuntu2+esm2"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:22.04:LTS","package":"puma","fixed_in":["5.5.2-2ubuntu2+esm2"],"sources":["osv"]},{"ecosystem":"Ubuntu:24.04:LTS","package":"puma","fixed_in":["6.4.2-4ubuntu4.3"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"rubygem-puma","fixed_in":["6.4.3-1.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"RubyGems","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9"}]}]},{"source":"ghsa","ecosystem":"RubyGems","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.0.0"},{"fixed":"6.4.3"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.5-3+deb12u1"}]}],"versions":["5.6.5-3"]},{"source":"osv","ecosystem":"Debian:13","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.3-1"}]}]},{"source":"osv","ecosystem":"Debian:14","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.3-1"}]}]},{"source":"osv","ecosystem":"Debian:11","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.3.8-1+deb11u3"}]}],"versions":["4.3.8-1","4.3.8-1+deb11u1","4.3.8-1+deb11u2"],"bundled":2},{"source":"osv","ecosystem":"RubyGems","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9"}]}],"versions":["0.8.0","0.8.1","0.8.2","0.9.0","0.9.1","0.9.2","0.9.3","0.9.4","0.9.5","1.0.0","1.1.0","1.1.1","1.2.0","1.2.1","1.2.2","1.3.0","1.3.1","1.4.0","1.5.0","1.6.0","1.6.1","1.6.2","1.6.3","2.0.0","2.0.0.b1","2.0.0.b2","2.0.0.b3","2.0.0.b4","2.0.0.b5","2.0.0.b6","2.0.0.b7","2.0.1","2.1.0","2.1.1","2.10.0","2.10.1","2.10.2","2.11.0","2.11.1","2.11.2","2.11.3","2.12.0","2.12.1","2.12.2","2.12.3","2.13.0","2.13.1","2.13.2","2.13.3","2.13.4","2.14.0","2.15.0","2.15.1","2.15.2","2.15.3","2.16.0","2.2.0","2.2.1","2.2.2","2.3.0","2.3.1","2.3.2","2.4.0","2.4.1","2.5.0","2.5.1","2.6.0","2.7.0","2.7.1","2.8.0","2.8.1","2.8.2","2.9.0","2.9.1","2.9.2","3.0.0","3.0.0.rc1","3.0.1","3.0.2","3.1.0","3.1.1","3.10.0","3.11.0","3.11.1","3.11.2","3.11.3","3.11.4","3.12.0","3.12.1","3.12.2","3.12.4","3.12.5","3.12.6","3.2.0","3.3.0","3.4.0","3.5.0","3.5.1","3.5.2","3.6.0","3.6.1","3.6.2","3.7.0","3.7.1","3.8.0","3.8.1","3.8.2","3.9.0","3.9.1","4.0.0","4.0.1","4.1.0","4.1.1","4.2.0","4.2.1","4.3.0","4.3.1","4.3.10","4.3.11","4.3.12","4.3.3","4.3.4","4.3.5","4.3.6","4.3.7","4.3.8","4.3.9","5.0.0","5.0.0.beta1","5.0.0.beta2","5.0.1","5.0.2","5.0.3","5.0.4","5.1.0","5.1.1","5.2.0","5.2.1","5.2.2","5.3.0","5.3.1","5.3.2","5.4.0","5.5.0","5.5.1","5.5.2","5.6.0","5.6.1","5.6.2","5.6.4","5.6.5","5.6.6","5.6.7","5.6.8"]},{"source":"osv","ecosystem":"RubyGems","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.0.0"},{"fixed":"6.4.3"}]}],"versions":["6.0.0","6.0.1","6.0.2","6.1.0","6.1.1","6.2.0","6.2.1","6.2.2","6.3.0","6.3.1","6.4.0","6.4.1","6.4.2"]},{"source":"osv","ecosystem":"openEuler:20.03-LTS-SP4","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.12.6-4.oe2003sp4"}]}]},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP1","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.5-3.oe2203sp1"}]}],"bundled":4},{"source":"osv","ecosystem":"openEuler:24.03-LTS","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.5-3.oe2403"}]}]},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP4","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.5-3.oe2203sp4"}]}],"bundled":4},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP3","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.5-3.oe2203sp3"}]}],"bundled":4},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP2","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.3.12-150000.3.15.1"}]}],"bundled":2},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP3","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.3.12-150000.3.15.1"}]}],"bundled":2},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP4","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.3.12-150000.3.15.1"}]}],"bundled":2},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP5","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.3.12-150000.3.15.1"}]}],"bundled":2},{"source":"osv","ecosystem":"openSUSE:Leap 15.5","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.3.12-150000.3.15.1"}]}],"bundled":2},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP3","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9-150000.3.18.1"}]}],"bundled":3},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP4","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9-150000.3.18.1"}]}],"bundled":3},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP5","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9-150000.3.18.1"}]}],"bundled":3},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP6","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9-150600.18.3.1"}]}],"bundled":3},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Availability Extension 15 SP7","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9-150600.18.3.1"}]}],"bundled":3},{"source":"osv","ecosystem":"openSUSE:Leap 15.6","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.6.9-150600.18.3.1"}]}],"bundled":3},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.12.4-1ubuntu2+esm2"}]}],"versions":["3.12.0-2ubuntu1","3.12.0-4ubuntu1","3.12.4-1ubuntu2","3.12.4-1ubuntu2+esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.2-2ubuntu2+esm2"}]}],"versions":["4.3.6-1ubuntu4","5.5.2-2ubuntu2","5.5.2-2ubuntu2+esm1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.2-4ubuntu4.3"}]}],"versions":["5.6.5-4ubuntu2","5.6.5-4ubuntu3","6.4.2-4ubuntu1","6.4.2-4ubuntu3","6.4.2-4ubuntu4"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.2-4ubuntu4.3"}]}],"versions":["5.6.5-4ubuntu2","5.6.5-4ubuntu3","6.4.2-4ubuntu1","6.4.2-4ubuntu3","6.4.2-4ubuntu4"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.12.4-1ubuntu2+esm2"}]}],"versions":["3.12.0-2ubuntu1","3.12.0-4ubuntu1","3.12.4-1ubuntu2","3.12.4-1ubuntu2+esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.2-2ubuntu2+esm2"}]}],"versions":["4.3.6-1ubuntu4","5.5.2-2ubuntu2","5.5.2-2ubuntu2+esm1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.3-1.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.3-1.3"}]}],"bundled":4},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"rubygem-puma","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.4.3-1.5"}]}],"bundled":4}],"products":[{"vendor":"puma","product":"puma"}],"references":[{"url":"https://github.com/puma/puma/security/advisories/GHSA-9hf4-67fc-4vf4","tags":["x_refsource_CONFIRM","Vendor Advisory","advisory","web","report"]},{"url":"https://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers","tags":["x_refsource_MISC","Product","web","report"]},{"url":"https://lists.debian.org/debian-lts-announce/2024/11/msg00004.html","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2024-45614","tags":["advisory"]},{"url":"https://github.com/puma/puma/commit/cac3fd18cf29ed43719ff5d52d9cfec215f0a043","tags":["web"]},{"url":"https://github.com/puma/puma/commit/f196b23be24712fb8fb16051cc124798cc84f70e","tags":["web"]},{"url":"https://github.com/rubysec/ruby-advisory-db/blob/master/gems/puma/CVE-2024-45614.yml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-9hf4-67fc-4vf4"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/45xxx/CVE-2024-45614.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2024-45614","tags":["advisory"]},{"url":"https://github.com/puma/puma","tags":["package"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2024-2249","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2024-2250","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2022-24790","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2023-40175","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2024-21647","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2024-2251","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2024-2252","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2024-2259","tags":["advisory"]},{"url":"https://www.suse.com/support/update/announcement/2024/suse-su-20243644-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1218638","tags":["report"]},{"url":"https://bugzilla.suse.com/1230848","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2024-21647","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-45614","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2025/suse-su-202503466-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1214425","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2023-40175","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2025/suse-su-202503467-1/","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2024-45614","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2024-45614","tags":["report"]},{"url":"https://ubuntu.com/security/notices/USN-7031-1","tags":["advisory"]},{"url":"https://ubuntu.com/security/notices/USN-7031-2","tags":["advisory"]},{"url":"https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/thread/KEQC6VXDRLKMORIMGPTEWYXJTS5FJNNK/","tags":["advisory"]},{"url":"https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/thread/4HTCFDLUCKJZXX35RHXSTQHMCPIT5GOW/","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2019-16770","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-11076","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2022-23634","tags":["web"]},{"url":"","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2024-45614","title":"Header normalization allows for client to clobber proxy set headers in Puma","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-19T22:42:33.974Z","modified":"2025-11-03T22:15:51.621Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-639"],"updated_at":"2026-11-02T14:34:07.831255Z"}],"euvd":[{"id":"EUVD-2024-2761","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-19T22:42:33Z","modified":"2025-11-03T22:15:51Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T19:49:29.890052Z"}],"ghsa":[{"id":"GHSA-9hf4-67fc-4vf4","title":"Puma's header normalization allows for client to clobber proxy set headers","description":"### Impact\n\nClients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users trusting headers set by their proxy may be affected. Attackers may be able to downgrade connections to HTTP (non-SSL) or redirect responses, which could cause confidentiality leaks if combined with a separate MITM attack. \n\n### Patches\nv6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win.\n\n### Workarounds\nNginx has a [underscores_in_headers](https://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers) configuration variable to discard these headers at the proxy level.\n\nAny users that are implicitly trusting the proxy defined headers for security or availability should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-20T14:40:16Z","modified":"2025-11-04T16:53:07Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","level":"medium"},{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-444","CWE-639"],"updated_at":"2026-11-02T14:39:06.376137Z"}],"nvd":[{"id":"CVE-2024-45614","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-19T23:15:11.703Z","modified":"2026-06-17T07:54:34.12Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"secondary"},{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-639","CWE-444"],"updated_at":"2026-11-02T14:10:27.456509Z"}],"osv":[{"id":"CVE-2024-45614","title":"Header normalization allows for client to clobber proxy set headers in Puma","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-19T22:42:33.974Z","modified":"2026-10-28T10:58:17.290886832Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-639"],"updated_at":"2026-11-02T15:44:42.790566Z"},{"id":"DEBIAN-CVE-2024-45614","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-19T23:15:11.703Z","modified":"2026-11-02T12:02:49.019529454Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:45:43.473331Z"},{"id":"GHSA-9hf4-67fc-4vf4","title":"Puma's header normalization allows for client to clobber proxy set headers","description":"### Impact\n\nClients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users trusting headers set by their proxy may be affected. Attackers may be able to downgrade connections to HTTP (non-SSL) or redirect responses, which could cause confidentiality leaks if combined with a separate MITM attack. \n\n### Patches\nv6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win.\n\n### Workarounds\nNginx has a [underscores_in_headers](https://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers) configuration variable to discard these headers at the proxy level.\n\nAny users that are implicitly trusting the proxy defined headers for security or availability should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-20T14:40:16Z","modified":"2026-09-10T03:50:56.027397803Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"},{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","level":"medium"}],"cwes":["CWE-444","CWE-639"],"updated_at":"2026-11-02T15:46:43.875515Z"},{"id":"OESA-2024-2249","title":"rubygem-puma security update","description":"A simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications.\r\n\r\nSecurity Fix(es):\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.(CVE-2024-45614)","status":"published","published":"2024-10-12T11:07:43Z","modified":"2026-08-18T01:17:35.287445397Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:41.595342Z"},{"id":"OESA-2024-2250","title":"rubygem-puma security update","description":"A simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications.\r\n\r\nSecurity Fix(es):\r\n\r\nPuma is a simple, fast, multi-threaded, parallel HTTP 1.1 server for Ruby/Rack applications. When using Puma behind a proxy that does not properly validate that the incoming HTTP request matches the RFC7230 standard, Puma and the frontend proxy may disagree on where a request starts and ends. This would allow requests to be smuggled via the front-end proxy to Puma. The vulnerability has been fixed in 5.6.4 and 4.3.12. Users are advised to upgrade as soon as possible. Workaround: when deploying a proxy in front of Puma, turning on any and all functionality to make sure that the request matches the RFC7230 standard.(CVE-2022-24790)\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. Prior to versions 6.3.1 and 5.6.7, puma exhibited incorrect behavior when parsing chunked transfer encoding bodies and zero-length Content-Length headers in a way that allowed HTTP request smuggling. Severity of this issue is highly dependent on the nature of the web site using puma is. This could be caused by either incorrect parsing of trailing fields in chunked transfer encoding bodies or by parsing of blank/zero-length Content-Length headers. Both issues have been addressed and this vulnerability has been fixed in versions 6.3.1 and 5.6.7. Users are advised to upgrade. There are no known workarounds for this vulnerability.(CVE-2023-40175)\r\n\r\nPuma is a web server for Ruby/Rack applications built for parallelism. Prior to version 6.4.2, puma exhibited incorrect behavior when parsing chunked transfer encoding bodies in a way that allowed HTTP request smuggling. Fixed versions limits the size of chunk extensions. Without this limit, an attacker could cause unbounded resource (CPU, network bandwidth) consumption. This vulnerability has been fixed in versions 6.4.2 and 5.6.8.\r\n\r\n(CVE-2024-21647)\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.(CVE-2024-45614)","status":"published","published":"2024-10-12T11:07:43Z","modified":"2026-08-18T01:17:35.625272623Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:52:41.595342Z"},{"id":"OESA-2024-2251","title":"rubygem-puma security update","description":"A simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications.\r\n\r\nSecurity Fix(es):\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.(CVE-2024-45614)","status":"published","published":"2024-10-12T11:07:43Z","modified":"2026-08-18T01:18:37.449494101Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:41.595342Z"},{"id":"OESA-2024-2252","title":"rubygem-puma security update","description":"A simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications.\r\n\r\nSecurity Fix(es):\r\n\r\nPuma is a simple, fast, multi-threaded, parallel HTTP 1.1 server for Ruby/Rack applications. When using Puma behind a proxy that does not properly validate that the incoming HTTP request matches the RFC7230 standard, Puma and the frontend proxy may disagree on where a request starts and ends. This would allow requests to be smuggled via the front-end proxy to Puma. The vulnerability has been fixed in 5.6.4 and 4.3.12. Users are advised to upgrade as soon as possible. Workaround: when deploying a proxy in front of Puma, turning on any and all functionality to make sure that the request matches the RFC7230 standard.(CVE-2022-24790)\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. Prior to versions 6.3.1 and 5.6.7, puma exhibited incorrect behavior when parsing chunked transfer encoding bodies and zero-length Content-Length headers in a way that allowed HTTP request smuggling. Severity of this issue is highly dependent on the nature of the web site using puma is. This could be caused by either incorrect parsing of trailing fields in chunked transfer encoding bodies or by parsing of blank/zero-length Content-Length headers. Both issues have been addressed and this vulnerability has been fixed in versions 6.3.1 and 5.6.7. Users are advised to upgrade. There are no known workarounds for this vulnerability.(CVE-2023-40175)\r\n\r\nPuma is a web server for Ruby/Rack applications built for parallelism. Prior to version 6.4.2, puma exhibited incorrect behavior when parsing chunked transfer encoding bodies in a way that allowed HTTP request smuggling. Fixed versions limits the size of chunk extensions. Without this limit, an attacker could cause unbounded resource (CPU, network bandwidth) consumption. This vulnerability has been fixed in versions 6.4.2 and 5.6.8.\r\n\r\n(CVE-2024-21647)\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.(CVE-2024-45614)","status":"published","published":"2024-10-12T11:07:43Z","modified":"2026-08-18T01:17:35.651622839Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:52:41.595342Z"},{"id":"OESA-2024-2259","title":"rubygem-puma security update","description":"A simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications.\r\n\r\nSecurity Fix(es):\r\n\r\nPuma is a simple, fast, multi-threaded, parallel HTTP 1.1 server for Ruby/Rack applications. When using Puma behind a proxy that does not properly validate that the incoming HTTP request matches the RFC7230 standard, Puma and the frontend proxy may disagree on where a request starts and ends. This would allow requests to be smuggled via the front-end proxy to Puma. The vulnerability has been fixed in 5.6.4 and 4.3.12. Users are advised to upgrade as soon as possible. Workaround: when deploying a proxy in front of Puma, turning on any and all functionality to make sure that the request matches the RFC7230 standard.(CVE-2022-24790)\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. Prior to versions 6.3.1 and 5.6.7, puma exhibited incorrect behavior when parsing chunked transfer encoding bodies and zero-length Content-Length headers in a way that allowed HTTP request smuggling. Severity of this issue is highly dependent on the nature of the web site using puma is. This could be caused by either incorrect parsing of trailing fields in chunked transfer encoding bodies or by parsing of blank/zero-length Content-Length headers. Both issues have been addressed and this vulnerability has been fixed in versions 6.3.1 and 5.6.7. Users are advised to upgrade. There are no known workarounds for this vulnerability.(CVE-2023-40175)\r\n\r\nPuma is a web server for Ruby/Rack applications built for parallelism. Prior to version 6.4.2, puma exhibited incorrect behavior when parsing chunked transfer encoding bodies in a way that allowed HTTP request smuggling. Fixed versions limits the size of chunk extensions. Without this limit, an attacker could cause unbounded resource (CPU, network bandwidth) consumption. This vulnerability has been fixed in versions 6.4.2 and 5.6.8.\r\n\r\n(CVE-2024-21647)\r\n\r\nPuma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.(CVE-2024-45614)","status":"published","published":"2024-10-18T11:07:44Z","modified":"2026-08-18T01:17:35.54796702Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:52:41.595342Z"},{"id":"UBUNTU-CVE-2024-45614","description":"Puma is a Ruby/Rack web server built for parallelism. In affected versions clients could clobber values set by intermediate proxies (such as X-Forwarded-For) by providing a underscore version of the same header (X-Forwarded_For). Any users relying on proxy set variables is affected. v6.4.3/v5.6.9 now discards any headers using underscores if the non-underscore version also exists. Effectively, allowing the proxy defined headers to always win. Users are advised to upgrade. Nginx has a underscores_in_headers configuration variable to discard these headers at the proxy level as a mitigation. Any users that are implicitly trusting the proxy defined headers for security should immediately cease doing so until upgraded to the fixed versions.","status":"published","published":"2024-09-20T00:00:00Z","modified":"2026-02-04T02:18:43.675079Z","cvss":[{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"},{"version":"3.1","score":5.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T16:55:02.636559Z"},{"id":"DLA-3947-1","title":"puma - security update","status":"published","published":"2024-11-06T00:00:00Z","modified":"2026-03-09T01:19:19.617541Z","updated_at":"2026-11-02T15:46:12.203458Z"},{"id":"openSUSE-SU-2024:14474-1","title":"ruby3.3-rubygem-puma-6.4.3-1.1 on GA media","description":"These are all security issues fixed in the ruby3.3-rubygem-puma-6.4.3-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2024-11-07T00:00:00Z","modified":"2026-02-04T03:22:40.138687Z","updated_at":"2026-11-02T16:58:36.976155Z"},{"id":"openSUSE-SU-2025:15123-1","title":"ruby3.4-rubygem-puma-6.4.3-1.3 on GA media","description":"These are all security issues fixed in the ruby3.4-rubygem-puma-6.4.3-1.3 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2025-05-17T00:00:00Z","modified":"2026-02-04T03:37:51.450825Z","updated_at":"2026-11-02T16:58:37.399567Z"},{"id":"openSUSE-SU-2026:10357-1","title":"ruby4.0-rubygem-puma-6.4.3-1.5 on GA media","description":"These are all security issues fixed in the ruby4.0-rubygem-puma-6.4.3-1.5 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-03-13T00:00:00Z","modified":"2026-03-14T08:44:10.499349Z","updated_at":"2026-11-02T16:58:38.415593Z"},{"id":"SUSE-SU-2024:3644-1","title":"Security update for rubygem-puma","description":"This update for rubygem-puma fixes the following issues:\n\n- CVE-2024-45614: Prevent underscores from clobbering hyphen headers (bsc#1230848).\n- CVE-2024-21647: Fixed DoS when parsing chunked Transfer-Encoding bodies (bsc#1218638).\n","status":"published","published":"2024-10-16T06:55:11Z","modified":"2026-02-04T04:12:44.063488Z","updated_at":"2026-11-02T15:53:55.639015Z"},{"id":"SUSE-SU-2025:03466-1","title":"Security update for rubygem-puma","description":"This update for rubygem-puma fixes the following issues:\n\nUpdate to version 5.6.9.\n\n- CVE-2024-45614: improper header normalization allows for clients to clobber proxy set headers, which can lead to\n  information leaks (bsc#1230848, fixed in an earlier update).\n- CVE-2024-21647: unbounded resource consumption due to invalid parsing of chunked encoding in HTTP/1.1 can lead to\n  denial-of-service attacks (bsc#1218638, fixed in an earlier update)\n- CVE-2023-40175: incorrect behavior when parsing chunked transfer encoding bodies and zero-length Content-Length\n  headers can lead to HTTP request smuggling attacks (bsc#1214425, fixed in an earlier update).\n","status":"published","published":"2025-10-07T11:33:53Z","modified":"2026-03-23T04:48:03.657014Z","updated_at":"2026-11-02T15:53:58.883365Z"},{"id":"SUSE-SU-2025:03467-1","title":"Security update for rubygem-puma","description":"This update for rubygem-puma fixes the following issues:\n\nUpdate to version 5.6.9.\n\n- CVE-2024-45614: improper header normalization allows for clients to clobber proxy set headers, which can lead to\n  information leaks (bsc#1230848, fixed in an earlier update).\n- CVE-2024-21647: unbounded resource consumption due to invalid parsing of chunked encoding in HTTP/1.1 can lead to\n  denial-of-service attacks (bsc#1218638, fixed in an earlier update)\n- CVE-2023-40175: incorrect behavior when parsing chunked transfer encoding bodies and zero-length Content-Length\n  headers can lead to HTTP request smuggling attacks (bsc#1214425, fixed in an earlier update).\n","status":"published","published":"2025-10-07T11:34:07Z","modified":"2026-03-23T04:48:03.927502Z","updated_at":"2026-11-02T15:53:58.883365Z"},{"id":"USN-7031-1","title":"puma vulnerability","description":"It was discovered that Puma incorrectly handled parsing certain headers.\nA remote attacker could possibly use this issue to overwrite header values\nset by intermediate proxies by providing duplicate headers containing\nunderscore characters.\n","status":"published","published":"2024-09-24T13:16:23Z","modified":"2026-04-27T17:30:17.439484Z","updated_at":"2026-11-02T16:58:18.876384Z"},{"id":"USN-7031-2","title":"puma vulnerability","description":"USN-7031-1 fixed CVE-2024-45614 in Puma for Ubuntu 24.04 LTS.\nThis update fixes the CVE for Ubuntu 22.04 LTS and Ubuntu 20.04 LTS.\n\nOriginal advisory details:\n\n It was discovered that Puma incorrectly handled parsing certain headers.\n A remote attacker could possibly use this issue to overwrite header values\n set by intermediate proxies by providing duplicate headers containing\n underscore characters.\n","status":"published","published":"2024-09-24T15:04:39Z","modified":"2026-04-27T17:30:01.890685Z","updated_at":"2026-11-02T16:58:18.876384Z"}]}}
