CVE-2026-47737
Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.5
Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
- Record
CVE-2026-47737- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-290, CWE-345
- Updated
- 2026-11-02
EUVDEUVD-2026-44427
7.5
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
- Record
EUVD-2026-44427- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-2vqw-3mp8-cgmx
7.5
Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections
Impact
Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used.
PROXY protocol v1 is a connection-level protocol. Support was added to Puma in v5.5.0. A proxy sends one PROXY header at the beginning of a TCP connection, before any HTTP data. Puma incorrectly re-parsed PROXY protocol headers after each keep-alive request on the same connection. An attacker able to send HTTP requests through a trusted proxy could therefore inject a second PROXY header between HTTP requests. Puma would treat the injected header as authoritative for the next request and overwrite REMOTE_ADDR.
This can mislead applications or middleware that use REMOTE_ADDR for security decisions, rate limiting, auditing, or allow/deny lists.
Only deployments that explicitly enable PROXY protocol v1 are affected, and will have set:
set_remote_address proxy_protocol: :v1
Puma's default configuration is not affected. Deployments that do not use persistent connections to Puma are also not expected to be affected by this issue.
Patches
Users should upgrade to versions 7.2.1 or 8.0.2.
Workarounds
Disable PROXY protocol v1 parsing if it is not required:
# remove/comment this:
# set_remote_address proxy_protocol: :v1
Users can also disable persistent connections to Puma, for example:
enable_keep_alives false
References
- Record
GHSA-2vqw-3mp8-cgmx- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-290, CWE-345
- Updated
- 2026-11-03
NVD
7.5
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
- Record
CVE-2026-47737- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-290, CWE-345
- Updated
- 2026-11-02
OSV
7.5
Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
- Record
CVE-2026-47737- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-290, CWE-345
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-47737
7.5
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
- Record
DEBIAN-CVE-2026-47737- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
OSVGHSA-2vqw-3mp8-cgmx
7.5
Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections
Impact
Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used.
PROXY protocol v1 is a connection-level protocol. Support was added to Puma in v5.5.0. A proxy sends one PROXY header at the beginning of a TCP connection, before any HTTP data. Puma incorrectly re-parsed PROXY protocol headers after each keep-alive request on the same connection. An attacker able to send HTTP requests through a trusted proxy could therefore inject a second PROXY header between HTTP requests. Puma would treat the injected header as authoritative for the next request and overwrite REMOTE_ADDR.
This can mislead applications or middleware that use REMOTE_ADDR for security decisions, rate limiting, auditing, or allow/deny lists.
Only deployments that explicitly enable PROXY protocol v1 are affected, and will have set:
set_remote_address proxy_protocol: :v1
Puma's default configuration is not affected. Deployments that do not use persistent connections to Puma are also not expected to be affected by this issue.
Patches
Users should upgrade to versions 7.2.1 or 8.0.2.
Workarounds
Disable PROXY protocol v1 parsing if it is not required:
# remove/comment this:
# set_remote_address proxy_protocol: :v1
Users can also disable persistent connections to Puma, for example:
enable_keep_alives false
References
- Record
GHSA-2vqw-3mp8-cgmx- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-290, CWE-345
- Updated
- 2026-11-03
OSVUBUNTU-CVE-2026-47737
7.5
Puma is a Ruby/Rack web server built for parallelism. From 5.5.0 until 7.2.1 and 8.0.2, Puma is vulnerable to source IP spoofing when set_remote_address proxy_protocol: :v1 is enabled and persistent connections are used because Puma incorrectly re-parses PROXY protocol headers after each keep-alive request on the same connection, allowing an attacker to inject a second PROXY header and overwrite REMOTE_ADDR. This issue is fixed in versions 7.2.1 and 8.0.2.
- Record
UBUNTU-CVE-2026-47737- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pumaRubyGems |
8.0.0 up to 8.0.2 | 8.0.2 |
pumaRubyGems |
5.5.0 up to 7.2.1 | 7.2.1 |
pumaDebian:12 |
before 5.6.5-3+deb12u2, plus listed versions 5.6.5-35.6.5-3+deb12u1 |
5.6.5-3+deb12u2 |
pumaDebian:13 |
All versions, plus listed versions 6.6.0-48.0.2-18.0.2-28.0.2-3 |
None known |
pumaDebian:14 |
before 8.0.2-1, plus listed versions 6.6.0-4 |
8.0.2-1 |
pumaRubyGems |
8.0.0 up to 8.0.2, plus listed versions 8.0.1 |
8.0.2 |
pumaRubyGems |
5.5.0 up to 7.2.1, plus listed versions 5.5.15.5.25.6.05.6.15.6.2 Show 31 moreShow less5.6.45.6.55.6.65.6.75.6.85.6.96.0.06.0.16.0.26.1.06.1.16.2.06.2.16.2.26.3.06.3.16.4.06.4.16.4.26.4.36.5.06.6.06.6.17.0.07.0.0.pre17.0.17.0.27.0.37.0.47.1.07.2.0 |
7.2.1 |
pumaUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 3.12.0-2ubuntu13.12.0-4ubuntu13.12.4-1ubuntu23.12.4-1ubuntu2+esm13.12.4-1ubuntu2+esm2 |
None known |
pumaUbuntu:Pro:22.04:LTS |
All versions, plus listed versions 4.3.6-1ubuntu45.5.2-2ubuntu25.5.2-2ubuntu2+esm15.5.2-2ubuntu2+esm2 |
None known |
pumaUbuntu:24.04:LTS |
All versions, plus listed versions 5.6.5-4ubuntu25.6.5-4ubuntu36.4.2-4ubuntu16.4.2-4ubuntu36.4.2-4ubuntu46.4.2-4ubuntu4.3 |
None known |
pumaUbuntu:26.10 |
All versions, plus listed versions 6.6.0-4build18.0.2-3build1 |
None known |
pumaUbuntu:26.04:LTS |
All versions, plus listed versions 6.6.0-46.6.0-4build1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| references | GitHub Advisories, OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-47737 is a high vulnerability (CVSS 7.5) in Puma, published June 9, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.18%, the 7th percentile. Fixed in puma 8.0.2.
References
github.com/puma/puma/security/advisories/GHSA-2vqw-3mp8-cgmx
github.com/puma/puma/pull/3944
github.com/puma/puma/pull/3947
github.com/puma/puma/commit/439c6136d9c2275721b7864db3ee78af7c80889f
github.com/puma/puma/commit/ebe9db3929ab8299d19c8f5b41e8ef4f4b22fa58
github.com/puma/puma/releases/tag/v7.2.1
Show 11 moreShow less
github.com/puma/puma/releases/tag/v8.0.2
github.com/rubysec/ruby-advisory-db/blob/master/gems/puma/CVE-2026-47737.yml
cve.org/CVERecord/SearchResults?query=CVE-2026-47737
nvd.nist.gov/vuln/detail/cve-2026-47737
github.com/advisories/GHSA-2vqw-3mp8-cgmx
github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47737.json
nvd.nist.gov/vuln/detail/CVE-2026-47737
security-tracker.debian.org/tracker/CVE-2026-47737
github.com/puma/puma
ubuntu.com/security/CVE-2026-47737
cve.org/CVERecord?id=CVE-2026-47737