CVE-2026-54906: concurrent-ruby ReadWriteLock: liberação de bloqueio de escrita sem verificação de posse
As versões do concurrent-ruby anteriores à 1.3.7 permitem que qualquer thread libere um bloqueio de escrita mantido por outra thread em Concurrent::ReadWriteLock, e o release_read_lock pode levar o contador compartilhado abaixo de zero. O registro classifica a severidade como crítica, com CVSS 3.1 9.8 pela NVD e 2.1 pelo CVSS 4.0 do GitHub. Não há exploração confirmada nas fontes consultadas, e a correção está na versão 1.3.7.
Visão geral
O registro descreve uma falha de correção de sincronização na API pública Concurrent::ReadWriteLock do concurrent-ruby. O método de liberação do bloqueio de escrita não confirma que a thread chamadora é dona do bloqueio, e o método de liberação do bloqueio de leitura decrementa um contador compartilhado mesmo quando nenhum bloqueio de leitura está ativo. O aviso de segurança do GitHub GHSA-6wx8-w4f5-wwcr é a referência de terceiros listada para este registro.
Impacto
- Segundo o registro, uma thread com acesso ao objeto de bloqueio pode liberar um bloqueio de escrita mantido por outra thread, permitindo que um segundo escritor entre na seção crítica enquanto o primeiro ainda executa. Isso pode corromper estados compartilhados que o bloqueio deveria proteger.
- Uma chamada de liberação em um bloqueio novo leva o contador de 0 para -1, e a aquisição normal de leitura passa a lançar Concurrent::ResourceLimitError. Isso pode causar negação de serviço em código que depende desse bloqueio.
- A NVD atribui CVSS 3.1 9.8 (rede, baixa complexidade, sem privilégios, sem interação do usuário, alto impacto em confidencialidade, integridade e disponibilidade, conforme o vetor). O GitHub, como CNA, informa CVSS 4.0 de 2.1. As duas pontuações diferem e o registro não explica a diferença.
Produtos e versões afetadas
- Produto: Rubyconcurrency Concurrent Ruby.
- Versões afetadas: as anteriores à 1.3.7, conforme o registro.
- O registro afirma que a vulnerabilidade está corrigida na 1.3.7. A lista de correções do registro está vazia, então a correção é confirmada apenas pelo texto da descrição.
Status de exploração
O catálogo KEV da CISA não lista este CVE no registro. Não aparece exploração ativa confirmada nem exploração em campo nas fontes consultadas. A pontuação EPSS não está disponível no registro.
Correção e mitigação
- Atualize o concurrent-ruby para a versão 1.3.7 ou superior, conforme descrito no registro. Revise a árvore de dependências, incluindo dependências transitivas, para localizar todas as cópias instaladas.
- Enquanto a atualização não for possível, revise o código da aplicação que chama Concurrent::ReadWriteLock diretamente e garanta que a aquisição e a liberação do bloqueio permaneçam no mesmo fluxo de execução. Trata-se de um padrão defensivo geral, não de um substituto para a correção.
- Verifique a versão instalada após a implantação e reinicie os serviços de longa duração para que a biblioteca corrigida seja carregada.
Orientação para detecção
- Faça o inventário dos arquivos Gemfile.lock e das imagens implantadas com versões do concurrent-ruby inferiores à 1.3.7.
- Monitore os logs das aplicações em busca de Concurrent::ResourceLimitError, que o registro associa a um contador negativo após uma liberação indevida.
- Investigue comportamentos concorrentes inesperados em código protegido por bloqueios de leitura e escrita, como escritas sobrepostas em dados compartilhados, como possível sintoma.
Limitações das informações disponíveis
O registro não inclui lista de correções, EPSS, dados SSVC, nome da CWE além do identificador, nem condições detalhadas de reprodução. Ele não informa quais aplicações ou cargas de trabalho estão mais expostas. A diferença entre as pontuações CVSS 3.1 e CVSS 4.0 não é explicada. Conclusões sobre exposição no mundo real são, portanto, limitadas.
Perguntas frequentes
Qual é o problema central do CVE-2026-54906?
Segundo o registro, Concurrent::ReadWriteLock#release_write_lock não verifica se a thread chamadora mantém o bloqueio de escrita, permitindo que outra thread o libere. O método release_read_lock também pode decrementar o contador sem um bloqueio de leitura ativo.
Quais versões são afetadas e o que corrige o problema?
O registro lista as versões anteriores à 1.3.7 como afetadas e afirma que a vulnerabilidade está corrigida na 1.3.7. A lista de correções do registro está vazia, então a correção é confirmada apenas pela descrição.
Esta vulnerabilidade está sendo explorada?
O catálogo KEV da CISA não a lista neste registro, e não há exploração confirmada nas fontes consultadas.
Esta análise foi redigida com auxílio de IA a partir de dados verificados das fontes e checada automaticamente contra eles.