{"cvss":2.0,"datePublished":"2026-06-24T17:17:29.403","dateUpdated":"2026-10-25T22:10:00.150","description":"concurrent-ruby is a modern concurrency tools for Ruby. Prior to 1.3.7, Concurrent::ReentrantReadWriteLock can incorrectly grant a write lock after one thread acquires the read lock 32,768 times. The lock stores a thread's local read and write hold counts in one integer. The low 15 bits are used for the read hold count, and bit 15 is used as WRITE_LOCK_HELD. After 32,768 reentrant read acquisitions, the local read count crosses into the write-lock bit. try_write_lock then treats the thread as already holding a write lock and returns true without setting the global RUNNING_WRITER bit. This breaks the core mutual-exclusion guarantee: the caller is told it has a write lock, but other threads can still hold or acquire read locks at the same time. This vulnerability is fixed in 1.3.7.","id":"CVE-2026-54905","raw":{"affected":[{"affectedData":[{"product":"concurrent-ruby","vendor":"ruby-concurrency","versions":[{"status":"affected","version":"< 1.3.7"}]}],"source":"security-advisories@github.com"}],"configurations":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:a:rubyconcurrency:concurrent_ruby:*:*:*:*:*:ruby:*:*","matchCriteriaId":"4BBFFB42-BEF4-4DF8-BAB8-4B728A8CA930","versionEndExcluding":"1.3.7","vulnerable":true}],"negate":false,"operator":"OR"}]}],"cveTags":[],"descriptions":[{"lang":"en","value":"concurrent-ruby is a modern concurrency tools for Ruby. Prior to 1.3.7, Concurrent::ReentrantReadWriteLock can incorrectly grant a write lock after one thread acquires the read lock 32,768 times. The lock stores a thread's local read and write hold counts in one integer. The low 15 bits are used for the read hold count, and bit 15 is used as WRITE_LOCK_HELD. After 32,768 reentrant read acquisitions, the local read count crosses into the write-lock bit. try_write_lock then treats the thread as already holding a write lock and returns true without setting the global RUNNING_WRITER bit. This breaks the core mutual-exclusion guarantee: the caller is told it has a write lock, but other threads can still hold or acquire read locks at the same time. This vulnerability is fixed in 1.3.7."},{"lang":"es","value":"concurrent-ruby es una herramienta moderna de concurrencia para Ruby. Antes de 1.3.7, Concurrent::ReentrantReadWriteLock puede conceder incorrectamente un bloqueo de escritura después de que un hilo adquiera el bloqueo de lectura 32.768 veces. El bloqueo almacena los recuentos locales de retención de lectura y escritura de un hilo en un solo entero. Los 15 bits inferiores se utilizan para el recuento de retención de lectura, y el bit 15 se utiliza como WRITE_LOCK_HELD. Después de 32.768 adquisiciones de lectura reentrantes, el recuento de lectura local se superpone con el bit de bloqueo de escritura. try_write_lock entonces trata al hilo como si ya tuviera un bloqueo de escritura y devuelve verdadero sin establecer el bit global RUNNING_WRITER. Esto rompe la garantía fundamental de exclusión mutua: al llamador se le dice que tiene un bloqueo de escritura, pero otros hilos aún pueden mantener o adquirir bloqueos de lectura al mismo tiempo. Esta vulnerabilidad se corrige en 1.3.7."}],"id":"CVE-2026-54905","lastModified":"2026-10-25T22:10:00.150","metrics":{"cvssMetricV31":[{"cvssData":{"attackComplexity":"LOW","attackVector":"LOCAL","availabilityImpact":"NONE","baseScore":5.5,"baseSeverity":"MEDIUM","confidentialityImpact":"HIGH","integrityImpact":"NONE","privilegesRequired":"LOW","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","version":"3.1"},"exploitabilityScore":1.8,"impactScore":3.6,"source":"nvd@nist.gov","type":"Primary"}],"cvssMetricV40":[{"cvssData":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"PRESENT","attackVector":"LOCAL","availabilityRequirement":"NOT_DEFINED","baseScore":2.0,"baseSeverity":"LOW","confidentialityRequirement":"NOT_DEFINED","exploitMaturity":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","privilegesRequired":"LOW","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","userInteraction":"NONE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","version":"4.0","vulnAvailabilityImpact":"LOW","vulnConfidentialityImpact":"LOW","vulnIntegrityImpact":"LOW","vulnerabilityResponseEffort":"NOT_DEFINED"},"source":"security-advisories@github.com","type":"Secondary"}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"id":"CVE-2026-54905","options":[{"exploitation":"poc"},{"automatable":"no"},{"technicalImpact":"partial"}],"role":"CISA Coordinator","timestamp":"2026-06-24T16:41:31.221708Z","version":"2.0.3"}}]},"published":"2026-06-24T17:17:29.403","references":[{"source":"security-advisories@github.com","tags":["Third Party Advisory"],"url":"https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-wv3x-4vxv-whpp"},{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","tags":["Third Party Advisory"],"url":"https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-wv3x-4vxv-whpp"}],"sourceIdentifier":"security-advisories@github.com","vulnStatus":"Analyzed","weaknesses":[{"description":[{"lang":"en","value":"CWE-128"}],"source":"security-advisories@github.com","type":"Primary"}]},"severity":"LOW","source":"nvd","title":"concurrent-ruby is a modern concurrency tools for Ruby"}