concurrent-ruby is a modern concurrency tools for Ruby. Prior to 1.3.7, Concurrent::AtomicReference#update can enter a permanent busy retry loop when the current value is Float::NAN. The issue is caused by the interaction between AtomicReference#update, which retries until compare_and_set(old_value, new_value) succeeds; Numeric compare_and_set, which checks old == old_value before attempting the underlying atomic swap.; and Ruby NaN semantics, where Float::NAN == Float::NAN is always false. As a result, once an AtomicReference contains Float::NAN, calling #update repeatedly evaluates the caller's block and never returns. In services that store externally derived numeric values in an AtomicReference, this can cause CPU exhaustion or permanent request/job hangs. This vulnerability is fixed in 1.3.7.
References
| Link | Resource |
|---|---|
| https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-h8w8-99g7-qmvj | Exploit Third Party Advisory |
| https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-h8w8-99g7-qmvj | Exploit Third Party Advisory |
Configurations
History
26 Jun 2026, 19:26
| Type | Values Removed | Values Added |
|---|---|---|
| CVSS |
v2 : v3 : |
v2 : unknown
v3 : 7.5 |
| First Time |
Rubyconcurrency
Rubyconcurrency concurrent Ruby |
|
| CPE | cpe:2.3:a:rubyconcurrency:concurrent_ruby:*:*:*:*:*:ruby:*:* | |
| References | () https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-h8w8-99g7-qmvj - Exploit, Third Party Advisory |
25 Jun 2026, 14:16
| Type | Values Removed | Values Added |
|---|---|---|
| References | () https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-h8w8-99g7-qmvj - |
24 Jun 2026, 17:17
| Type | Values Removed | Values Added |
|---|---|---|
| New CVE |
Information
Published : 2026-06-24 17:17
Updated : 2026-06-26 19:26
NVD link : CVE-2026-54904
Mitre link : CVE-2026-54904
CVE.ORG link : CVE-2026-54904
JSON object : View
Products Affected
rubyconcurrency
- concurrent_ruby
CWE
CWE-835
Loop with Unreachable Exit Condition ('Infinite Loop')
