
Triagem somente de detecção para GitLab CVE-2026-97229 (e CVE-2026-110264): classifica uma versão autogerenciada do GitLab e seu Ruby, detectando as armadilhas do patch de 12 de outubro e do Ruby personalizado. Sem payloads, sem sondagens de rede.
gitlab-onigmo-scannerTriagem de versões para as duas falhas de regex do GitLab com CVSS 10.0, CVE-2026-97229 e CVE-2026-110264. Informe uma versão do GitLab que você possui e ele dirá se essa build ainda está exposta, além de detectar as duas armadilhas que já estão pegando as pessoas. Ele nunca acessa a rede, nunca envia um payload, nunca acessa um endpoint de lint de CI, nunca compila uma regex elaborada.
A falhaDetalhe | Valor |
|---|---|
CVE | CVE-2026-97229, além de CVE-2026-110264 classificada em conjunto |
Bug | Integer overflow (CWE-190) no Onigmo, o motor de regex embutido no Ruby, quando o GitLab compila uma expressão regular fornecida pelo usuário |
Impacto | Unauthenticated remote code execution em um servidor GitLab auto-hospedado, sob certas condições |
Severidade | 10.0 crítica para ambas, pontuadas pelo GitLab como CNA |
Exploração | CVE-2026-97229 adicionada ao CISA KEV em 2026-10-29, prazo federal 2026-11-01. CVE-2026-110264 não possui listagem no KEV até o momento desta publicação, e o GitLab não relata sinais de que tenha sido usada em ataques |
CVE-2026-97229 é a falha de regex em CI/CD: uma expressão regular especialmente elaborada em uma configuração de CI/CD, validação de regex insuficiente, corrigida em 2026-10-12. CVE-2026-110264 é uma segunda falha de regex, mais ampla, corrigida em 2026-10-21, que atinge todas as versões auto-hospedadas desde a 7.0. Mesmo motor, mesma pontuação, bug diferente, e é exatamente por isso que uma única verificação não basta.
Versões corrigidasCVE-2026-97229 (corrigida em 2026-10-12)Linha | Corrigida em |
|---|---|
GitLab 19.2 | 19.2.8 |
GitLab 19.3 | 19.3.5 |
GitLab 19.4 | 19.4.2 |
GitLab 19.5, anterior à 19.2 | Não listada como afetada por esta CVE |
CVE-2026-110264 (corrigida em 2026-10-21)Linha | Corrigida em |
|---|---|
GitLab 19.5 | 19.5.1 |
GitLab 19.4 | 19.4.3 |
GitLab 19.3 | 19.3.6 |
GitLab 19.2 | 19.2.9 |
GitLab 19.1 | 19.1.9 |
GitLab 19.0 | 19.0.10 |
GitLab 18.11 | 18.11.13 |
GitLab 18.10 e anteriores | Sem versão corrigida, atualize para 18.11.13 ou posterior |
Ruby, para instalações a partir do código-fonte e imagens personalizadasLinha | Corrigida em |
|---|---|
Ruby 3.3 | 3.3.13 |
Ruby 3.4 | 3.4.12 |
Ruby 4.0 | 4.0.9 |
Ruby 3.2 e anteriores | Sem correção, fim de vida, migre para 3.4 ou 4.0 |
Armadilha 1: o patch de 12 de outubro não cobre 21 de outubro19.4.2, 19.3.5 e 19.2.8 corrigiram a CVE-2026-97229. Todas elas estão abaixo da correção da CVE-2026-110264 para o seu respectivo branch (19.4.3, 19.3.6, 19.2.9). Se você aplicou o patch em 12 de outubro e parou por aí, você ainda está vulnerável, e um scanner que conhece apenas a primeira CVE dirá que você está limpo. Esta ferramenta avalia ambas e nomeia a armadilha em sua saída quando a detecta.
Armadilha 2: atualizar o GitLab não corrige o seu próprio RubyA correção do GitLab é um patch no Ruby que ele empacota em seus pacotes e imagens oficiais. Uma instalação a partir do código-fonte, ou uma imagem personalizada que instala o Ruby separadamente, não recebe esse patch por meio de uma atualização do GitLab. O Alpine Linux viveu isso: atualizou para o GitLab 19.3.6 em 2026-10-22 e permaneceu vulnerável, porque sua imagem usava o Ruby padrão. Um atacante sondou seu servidor em 2026-10-20 e 21, derrubou workers oito vezes, chegou parcialmente ao exploit em quatro delas e voltou em 25 e 26. O Alpine não encontrou provas de que o exploit tenha tido sucesso, não conseguiu descartar essa possibilidade, reconstruiu a instância do zero, substituiu suas chaves secretas e redefiniu todas as senhas. Sua imagem corrigida, baixada novamente após 2026-10-27, traz o Ruby 3.3.13.
Então: --install-type official avalia apenas a versão do GitLab, porque o Ruby vem junto com ela. --install-type source ou custom também avalia o Ruby que você fornece com --ruby-version, e uma versão de Ruby ausente é avaliada como UNKNOWN, não como limpa. Ruby 4.0.8 é um caso especial que vale a pena conhecer: ele corrige o bug CVE-2026-97229, mas não o CVE-2026-110264, então é avaliado como VULNERABLE aqui. O Ruby não solicitou identificadores CVE próprios para essas correções, e é por isso que um scanner que compara registros de CVE com pacotes instalados não encontra nenhum Ruby vulnerável em lugar algum. Esta ferramenta verifica a versão do Ruby diretamente.
O que ele verificaGitLab: CVE-2026-97229 e CVE-2026-110264 separadamente, depois um veredito geralCSV de muitas instâncias: name,gitlab_version,ruby_version,install_type,hostingRuby, quando você indica que a instalação é source ou customGitLab.com e Dedicated como já corrigidos, sem necessidade de açãoCada achado recebe um veredito: VULNERABLE, FIXED, EOL_NO_FIX, UNKNOWN ou NOT_AFFECTED para um único CVE em um branch que ele não afeta. EOL_NO_FIX conta como vulnerável: não há correção prevista para essa linha.
O que ele nunca fazNenhuma requisição de rede. Nenhuma sondagem de servidores remotos. Nenhum regex elaborado, nenhuma requisição de lint de CI, nenhum tráfego de exploração, nenhum código PoC. Ele lê as strings de versão que você fornece e para por aí. Isso é intencional: os PoCs públicos para CVE-2026-97229 já existem, e reproduzir um aqui não acrescentaria nada em termos defensivos.
Por que isto, quando PoCs e contadores de versão já existemO material público sobre CVE-2026-97229 é majoritariamente ofensivo: PoCs que executam código como o usuário git, e laboratórios que mapeiam quais builds são armamentizáveis. O Censys conta hosts expostos por versão. O GitLab publicou regras Sigma para detectar tentativas de exploração em logs. Nada disso é uma ferramenta autônoma de triagem defensiva que avalia as duas falhas de outubro com CVSS 10.0 em conjunto e verifica o Ruby por baixo de uma instalação source ou custom. Essa lacuna é este repositório: um comando, ambos os CVEs, ambas as armadilhas, nenhum payload. Use-o junto com as regras Sigma do GitLab, não em vez delas. Se uma instância foi sondada, a triagem de versão não é triagem de comprometimento: verifique os logs de crash dos workers e os relatórios de crash do Onigmo, e siga o exemplo do Alpine se não puder descartar uma tentativa.
ClassificaçãoAchado | Severidade |
|---|---|
GitLab abaixo da correção do seu branch para qualquer um dos CVE | VULNERABLE |
GitLab em 18.10 ou mais antigo, ou Ruby 3.2 ou mais antigo em uma instalação source/custom | EOL_NO_FIX, conta como vulnerável |
GitLab na correção ou além das duas correções, e um Ruby corrigido quando aplicável | FIXED |
Instalação Source/custom sem versão de Ruby, ou um branch mais novo que os dados desta ferramenta (2026-10-30) | UNKNOWN, não limpo |
GitLab.com / Dedicated | FIXED, corrigido pelo GitLab |
Uso# One instance, official package or image
python3 gitlab_onigmo_scanner.py --version 19.4.2
# One instance, source install with its own Ruby
python3 gitlab_onigmo_scanner.py --version 19.4.3 --ruby-version 3.4.11 --install-type source
# A whole estate, machine-readable output
python3 gitlab_onigmo_scanner.py --list inventory.csv --json
# Tests (version tables only, no network)
python3 -m unittest discover -s tests -v
inventory.csv formato, linha de cabeçalho opcional:
name,gitlab_version,ruby_version,install_type,hosting
prod,19.4.1,,official,self-managed
staging,19.4.3,,official,self-managed
legacy-source,19.4.3,3.4.11,source,self-managed