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.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-47737
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 7 Nov 2026, 20:27 UTC · Revision 1
Source evidence
Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections
core-osv · Original sourcePublished 14 Jul 2026, 19:45 UTC
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.
osv:CVE-2026-47737
Complete source record
{
"id": "60f3b35475eb049cefa3548457b86293df3ea086718ee012a7df44224966f20b",
"url": "https://osv.dev/vulnerability/CVE-2026-47737",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Puma PROXY Protocol v1 Accepts Repeated Protocol Headers on Persistent Connections",
"summary": "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.",
"evidence": "osv:CVE-2026-47737",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-47737",
"aliases": [
"CVE-2026-47737",
"GHSA-2vqw-3mp8-cgmx"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/puma/puma",
"type": "GIT",
"events": [
{
"introduced": "21e0443cca4a53c8f0f97fe5197423031cab3610"
},
{
"fixed": "92754ace040db67622f0e6406dea0b47c94d0139"
},
{
"introduced": "fcf3173a2eed8d350377891008a41630d976f3d9"
},
{
"fixed": "8085b75e79e3f7f1a96e5b488d74a71f62edd24d"
},
{
"fixed": "439c6136d9c2275721b7864db3ee78af7c80889f"
},
{
"fixed": "ebe9db3929ab8299d19c8f5b41e8ef4f4b22fa58"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "5.5.0"
},
{
"fixed": "7.2.1"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"introduced": "8.0.0"
},
{
"fixed": "8.0.2"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "439c6136d9c2275721b7864db3ee78af7c80889f"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "ebe9db3929ab8299d19c8f5b41e8ef4f4b22fa58"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "92754ace040db67622f0e6406dea0b47c94d0139"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v7.2.1"
},
{
"range": [
{
"fixed": "8085b75e79e3f7f1a96e5b488d74a71f62edd24d"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v8.0.2"
}
]
}
}
],
"versions": [
"v7.2.0",
"v8.0.1",
"v8.0.0",
"v7.1.0",
"v7.0.4",
"v7.0.3",
"v7.0.2",
"v7.0.1",
"v7.0.0",
"v6.6.1",
"v7.0.0.pre1",
"v6.6.0",
"v6.5.0",
"v6.4.0",
"v6.3.0",
"v6.2.2",
"v6.2.1",
"v6.2.0",
"v6.1.0",
"v6.0.2",
"v6.0.1",
"v6.0.0",
"v5.6.3",
"v5.6.1",
"v5.6.0",
"v5.5.2",
"v5.5.1",
"v5.5.0"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-47737.json"
}
}
],
"modified": "2026-10-28T02:30:51.858544970Z",
"provider": "osv",
"references": [
"https://github.com/puma/puma/releases/tag/v7.2.1",
"https://github.com/puma/puma/releases/tag/v8.0.2",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47737.json",
"https://github.com/puma/puma/security/advisories/GHSA-2vqw-3mp8-cgmx",
"https://nvd.nist.gov/vuln/detail/CVE-2026-47737",
"https://github.com/puma/puma/commit/439c6136d9c2275721b7864db3ee78af7c80889f",
"https://github.com/puma/puma/commit/ebe9db3929ab8299d19c8f5b41e8ef4f4b22fa58",
"https://github.com/puma/puma/pull/3944",
"https://github.com/puma/puma/pull/3947"
],
"provider_metadata": {
"cwe_ids": [
"CWE-290",
"CWE-345"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47737.json"
}
},
"related_cves": [
{
"value": "CVE-2026-47737",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 520304,
"published_at": "2026-07-14T19:45:16.648+00:00"
}