CVE-2021-41136: Inconsistent Interpretation of HTTP Requests ('HTTP Request Smuggling') in puma

Published Oct 12, 2021
·
Updated

Impact

Prior to puma version 5.5.0, using puma with a proxy which forwards LF characters as line endings could allow HTTP request smuggling. A client could smuggle a request through a proxy, causing the proxy to send a response back to another unknown client.

This behavior (forwarding LF characters as line endings) is very uncommon amongst proxy servers, so we have graded the impact here as "low". Puma is only aware of a single proxy server which has this behavior.

If the proxy uses persistent connections and the client adds another request in via HTTP pipelining, the proxy may mistake it as the first request's body. Puma, however, would see it as two requests, and when processing the second request, send back a response that the proxy does not expect. If the proxy has reused the persistent connection to Puma to send another request for a different client, the second response from the first client will be sent to the second client.

Patches

This vulnerability was patched in Puma 5.5.1 and 4.3.9.

Workarounds

This vulnerability only affects Puma installations without any proxy in front.

Use a proxy which does not forward LF characters as line endings.

Proxies which do not forward LF characters as line endings:

Nginx Apache (>2.4.25) Haproxy Caddy Traefik

Possible Breakage

If you are dealing with legacy clients that want to send LF as a line ending in an HTTP header, this will cause those clients to receive a 400 error.

References

HTTP Request Smuggling

For more information

If you have any questions or comments about this advisory:

Open an issue in Puma See our security policy

Other sources

Puma is a HTTP 1.1 server for Ruby/Rack applications. Prior to versions 5.5.1 and 4.3.9, using puma with a proxy which forwards HTTP header values which contain the LF character could allow HTTP request smugggling. A client could smuggle a request through a proxy, causing the proxy to send a response back to another unknown client. The only proxy which has this behavior, as far as the Puma team is aware of, is Apache Traffic Server. If the proxy uses persistent connections and the client adds another request in via HTTP pipelining, the proxy may mistake it as the first request's body. Puma, however, would see it as two requests, and when processing the second request, send back a response that the proxy does not expect. If the proxy has reused the persistent connection to Puma to send another request for a different client, the second response from the first client will be sent to the second client. This vulnerability was patched in Puma 5.5.1 and 4.3.9. As a workaround, do not use Apache Traffic Server with puma.

Using puma with a proxy which forwards HTTP header values which contain the LF character could allow HTTP request smugggling. A client could smuggle a request through a proxy, causing the proxy to send a response back to another unknown client. If the proxy uses persistent connections and the client adds another request in via HTTP pipelining, the proxy may mistake it as the first request's body. Puma, however, would see it as two requests, and when processing the second request, send back a response that the proxy does not expect. If the proxy has reused the persistent connection to Puma to send another request for a different client, the second response from the first client will be sent to the second client.

Upstream Advisory:

https://github.com/puma/puma/security/advisories/GHSA-48w2-rm65-62xx

Red Hat

Affected Software

9 affected componentsFixes available
debian/puma<=3.12.0-2+deb10u2, <=4.3.8-1
3.12.0-2+deb10u34.3.8-1+deb11u25.6.5-35.6.7-1
redhat/puma<5.5.1
5.5.1
redhat/puma<4.3.9
4.3.9
Puma Puma Ruby<=4.3.8
Puma Puma Ruby>=5.0.0<=5.5.0
Debian Debian Linux=10.0
Debian Debian Linux=11.0
rubygems/puma<4.3.9
4.3.9
rubygems/puma>=5.0.0<5.5.1
5.5.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade debian/puma to a version that resolves this vulnerability.

    Fixed in 3.12.0-2+deb10u3Fixed in 4.3.8-1+deb11u2Fixed in 5.6.5-3Fixed in 5.6.7-1
  2. Upgrade

    Upgrade redhat/puma to a version that resolves this vulnerability.

    Fixed in 5.5.1
  3. Upgrade

    Upgrade redhat/puma to a version that resolves this vulnerability.

    Fixed in 4.3.9
  4. Upgrade

    Upgrade rubygems/puma to a version that resolves this vulnerability.

    Fixed in 4.3.9
  5. Upgrade

    Upgrade rubygems/puma to a version that resolves this vulnerability.

    Fixed in 5.5.1
  6. Upgrade

    Upgrade puma to a version that resolves this vulnerability.

    Fixed in 5.5.1
  7. Upgrade

    Upgrade puma to a version that resolves this vulnerability.

    Fixed in 4.3.9
  8. Compensating control

    As a workaround, do not use Apache Traffic Server with puma.

Event History

Oct 12, 2021
CVE Published
via MITRE·03:30 PM
Data Sourced
via MITRE·03:30 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·04:15 PM
RemedyDescriptionSeverityWeaknessAffected Software
Advisory Published
via GitHub·05:53 PM
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is CVE-2021-41136?

CVE-2021-41136 is a vulnerability in the Puma server that allows HTTP request smuggling.

2

What is the severity of CVE-2021-41136?

The severity of CVE-2021-41136 is low.

3

How does CVE-2021-41136 affect Puma?

CVE-2021-41136 affects Puma versions prior to 5.5.1 and 4.3.9.

4

How can CVE-2021-41136 be exploited?

CVE-2021-41136 can be exploited by using a proxy that forwards HTTP header values containing the LF character.

5

How can I fix CVE-2021-41136?

To fix CVE-2021-41136, upgrade to Puma version 5.5.1 or 4.3.9, depending on your current version.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203