CVE-2026-47737
highpriority · track · 0OT risk · elevatedEPSS 0.002 · 7 %ileEUUSEPSS · scored 2026-10-27
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.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode⚠ sources disagree · medium–high · 6.9–7.5
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (4)
Products and version ranges known to be affected.
advisories (1)
Vendor and ecosystem advisories describing this.
- GHSA-2vqw-3mp8-cgmxPuma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections2026-06-09ghsa · osvUS
### 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](https://github.com/puma/puma/issues/2651). 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: ```ruby 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: ```ruby # remove/comment this: # set_remote_address proxy_protocol: :v1 ``` Users can also disable persistent connections to Puma, for example: ```ruby enable_keep_alives false ``` ### References - [HAProxy PROXY protocol specification](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) - [CVE-2025-31135 / GHSA-c2c3-pqw5-5p7c: go-guerrilla repeated PROXY command source IP spoofing](https://github.com/phires/go-guerrilla/security/advisories/GHSA-c2c3-pqw5-5p7c) - [Puma `set_remote_address` documentation](https://github.com/puma/puma/blob/master/lib/puma/dsl.rb)
also known as (3)
Other names and identifiers for this entity.
sources
Which sources assert this record, and when.
references (21)
External citations — patches, advisories, analysis.
- https://github.com/puma/puma/commit/439c6136d9c2275721b7864db3ee78af7c80889fcnnvd
- https://github.com/puma/puma/commit/ebe9db3929ab8299d19c8f5b41e8ef4f4b22fa58cnnvd
- https://github.com/puma/puma/pull/3944cnnvd
- https://github.com/puma/puma/pull/3947cnnvd
- https://github.com/puma/puma/releases/tag/v7.2.1cnnvd
- https://github.com/puma/puma/releases/tag/v8.0.2cnnvd
- https://github.com/puma/puma/security/advisories/GHSA-2vqw-3mp8-cgmxcnnvd
- https://github.com/puma/puma/commit/439c6136d9c2275721b7864db3ee78af7c80889fenisa_euvd
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan