CVE-2026-47736: Puma Puma PROXY Protocol V1 Parser Vulnerability
HIGHCVE-2026-47736 is a HIGH (CVSS 7.5) puma proxy protocol v1 parser vulnerability (CWE-400: Uncontrolled Resource Consumption) affecting Puma libraries in the RubyGems ecosystem. The issue involves puma proxy protocol v1 parser allows remote memory exhaustion. Remediation is available by upgrading affected packages to version 8.0.2, 7.2.1.
CVE-2026-47736 at a Glance
Security Impact
CVSS: 7.5
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H).
How to Fix CVE-2026-47736
To remediate this vulnerability, upgrade all affected Puma dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade puma to 8.0.2
Upgrade puma to 7.2.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for puma
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-47736, inspect your project dependencies for Puma:
inspect dependencies for puma
Analyze the terminal output to locate any version of Puma in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 8.0.2), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-400: Uncontrolled Resource Consumption, where the product does not properly control the allocation and maintenance of a limited resource. In Puma, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-47736 Affected Puma Versions
2 component(s)References
Frequently Asked Questions
What is CVE-2026-47736?
Which Puma versions are affected?
What version fixes CVE-2026-47736?
Is puma affected?
What is the CVSS score of CVE-2026-47736?
What CWE is associated with CVE-2026-47736?
How can I check RubyGems dependencies for CVE-2026-47736?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-qpgp-93vx-g8v8",
"modified" : "2026-06-08T23:55:44Z",
"published" : "2026-06-08T23:55:44Z",
"aliases" : [ "CVE-2026-47736" ],
"summary" : "Puma PROXY Protocol v1 Parser Allows Remote Memory Exhaustion ",
"details" : "### Impact\n\n[PROXY protocol support for Puma](https://github.com/puma/puma/issues/2651) was added in version 5.5.0.\n\nWhen PROXY protocol v1 support is enabled, Puma reads incoming bytes into an internal buffer. It waits for \"\\r\\n\" to determine whether a PROXY v1 line is present. If an attacker opens a TCP connection and continuously sends bytes without CRLF, Puma keeps appending to this pre-parse buffer.\n\nThis can cause unbounded in-process memory growth and additional CPU cost from repeatedly scanning the growing buffer for CRLF. A single, unauthenticated TCP connection can drive significant memory growth and may cause process/container OOM or degraded availability.\n\n**Only Puma servers using the following non-default config are affected:**\n\n```ruby\n set_remote_address proxy_protocol: :v1\n```\n\n### Patches\n\nUsers should upgrade to versions 7.2.1 or 8.0.2.\n\n### Workarounds\n\n- Disable PROXY protocol v1 parsing if it is not required:\n\n ```ruby\n # remove/comment this:\n # set_remote_address proxy_protocol: :v1\n ```\n\n - Restrict direct network access to Puma listeners using PROXY protocol:\n - Only allow trusted load balancers/reverse proxies to connect.\n - Block arbitrary client TCP access with firewall/security group rules.\n\n### Resources\n- [HAProxy PROXY protocol specification](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)\n- [CWE-400: Uncontrolled Resource Consumption](https://cwe.mitre.org/data/definitions/400.html)\n- [CWE-770: Allocation of Resources Without Limits or Throttling](https://cwe.mitre.org/data/definitions/770.html)\n- [Puma `set_remote_address` documentation](https://github.com/puma/puma/blob/master/lib/puma/dsl.rb)\n- [Puma client PROXY protocol parsing code](https://github.com/puma/puma/blob/master/lib/puma/client.rb)\n- [Puma constants, including `PROXY_PROTOCOL_V1_REGEX`](https://github.com/puma/puma/blob/master/lib/puma/const.rb)",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "RubyGems",
"name" : "puma"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "8.0.0"
}, {
"fixed" : "8.0.2"
} ]
} ]
}, {
"package" : {
"ecosystem" : "RubyGems",
"name" : "puma"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "5.5.0"
}, {
"fixed" : "7.2.1"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/puma/puma/security/advisories/GHSA-qpgp-93vx-g8v8"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/puma/puma"
}, {
"type" : "WEB",
"url" : "https://github.com/rubysec/ruby-advisory-db/blob/master/gems/puma/CVE-2026-47736.yml"
}, {
"type" : "WEB",
"url" : "https://www.cve.org/CVERecord?id=CVE-2026-47736"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-400" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-06-08T23:55:44Z",
"nvd_published_at" : null
}
}