Três falhas no Ruby permitem executar código no servidor

O Ruby publicou em 23 de outubro as versões 4.0.9, 3.4.12 e 3.3.13, que corrigem três falhas no Onigmo, o motor de expressões regulares da linguagem. As três estão na origem de quatro vulnerabilidades críticas do GitLab, entre elas a CVE-2026-110264, de nota máxima, divulgada dois dias antes.

Os três defeitos estão na compilação do padrão. Um é liberação dupla de memória quando a análise do padrão falha depois de uma alternância. Outro é estouro de inteiro no tamanho do padrão compilado, e responde sozinho por duas das quatro CVEs do GitLab. O terceiro é estouro dos identificadores internos em padrão com muitas repetições.

A falha só é alcançada quando a aplicação compila a expressão regular a partir de texto controlado pelo atacante, seja por Regexp.new, Regexp.union, Regexp.compile ou interpolação dentro do padrão. Aplicação que usa apenas expressões escritas pelo desenvolvedor não é afetada, segundo o anúncio do projeto.

É isso que tira a história do GitLab. Qualquer aplicação Ruby que aceite padrão de busca, filtro ou regra de validação vindo do usuário cai na mesma condição, e o GitLab demonstrou que ela leva a execução de código no servidor. O produto afetado foi o primeiro a aparecer, não o único exposto.

Duas defesas que parecem óbvias não funcionam. O Regexp.timeout não protege contra esses bugs, porque o problema é na compilação e não no tempo de execução da busca. Limitar o tamanho do padrão também não protege de forma confiável, já que parte das falhas dispara com padrão curto.

As três versões novas contêm todas as correções, e o projeto recomenda subir para elas ou mais recentes. A 3.3.13 é exceção, porque a série 3.3 está em manutenção apenas de segurança. Os quatro identificadores são do GitLab, que relatou os casos ao Ruby e coordenou as correções. O Ruby não pediu CVE próprio por enquanto. O estouro de inteiro foi encontrado por Johan Carlsson pelo programa de recompensas do GitLab.

Para quem roda Ruby, a ação é atualizar para 4.0.9, 3.4.12 ou 3.3.13. Quem não puder atualizar de imediato deve deixar de compilar expressão regular a partir de entrada não confiável, que é a única mitigação que o projeto considera efetiva. Quem usa GitLab self-managed já estava coberto pelas versões corrigidas de 21 de outubro.

Leia mais na mesma categoria:

NotíciasPatches e CorreçõesVulnerabilidades