Skip to content

Puma's Keepalive Connections Causing Denial Of Service

High severity GitHub Reviewed Published May 11, 2021 in puma/puma • Updated May 16, 2023

Package

bundler puma (RubyGems)

Affected versions

<= 4.3.7
>= 5.0.0, <= 5.3.0

Patched versions

4.3.8
5.3.1

Description

This vulnerability is related to CVE-2019-16770.

Impact

The fix for CVE-2019-16770 was incomplete. The original fix only protected existing connections that had already been accepted from having their requests starved by greedy persistent-connections saturating all threads in the same process. However, new connections may still be starved by greedy persistent-connections saturating all threads in all processes in the cluster.

A puma server which received more concurrent keep-alive connections than the server had threads in its threadpool would service only a subset of connections, denying service to the unserved connections.

Patches

This problem has been fixed in puma 4.3.8 and 5.3.1.

Workarounds

Setting queue_requests false also fixes the issue. This is not advised when using puma without a reverse proxy, such as nginx or apache, because you will open yourself to slow client attacks (e.g. slowloris).

The fix is very small. A git patch is available here for those using unsupported versions of Puma.

For more information

If you have any questions or comments about this advisory:

Acknowledgements

Thank you to @MSP-Greg, @wjordan and @evanphx for their review on this issue.

Thank you to @ioquatix for providing a modified fork of wrk which made debugging this issue much easier.

References

@nateberkopec nateberkopec published to puma/puma May 11, 2021
Published by the National Vulnerability Database May 11, 2021
Reviewed May 18, 2021
Published to the GitHub Advisory Database May 18, 2021
Last updated May 16, 2023

Severity

High
7.5
/ 10

CVSS base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Weaknesses

CVE ID

CVE-2021-29509

GHSA ID

GHSA-q28m-8xjw-8vr5

Source code

Credits

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.