Duas vulnerabilidades de corrupção de memória permitiam executar código remotamente em instalações padrão do GitLab. A cadeia afetava as edições Community e Enterprise autogerenciadas, expondo repositórios, segredos da aplicação e serviços internos.
As falhas estavam no Oj, um analisador de JSON escrito parcialmente em C e usado por aplicações Ruby. Os problemas permaneceram no código por quase cinco anos e envolviam uma gravação fora dos limites da memória e o vazamento de um ponteiro do heap.
A exploração aproveitava a função do GitLab que exibe diferenças entre versões de arquivos Jupyter Notebook. Como documentos .ipynb utilizam JSON, um usuário autenticado podia enviar dois arquivos especialmente preparados e abrir a visualização das alterações.
Com as falhas combinadas, o invasor conseguia controlar um ponteiro de callback e executar comandos como o usuário de sistema git. O ataque não exigia privilégios administrativos, acesso ao CI/CD ou interação de outra vítima.
Uma invasão bem-sucedida poderia resultar no roubo ou alteração de código-fonte, exposição de segredos do Rails, acesso a credenciais de serviços e movimentação lateral para outros recursos alcançáveis pelo servidor.
Foram afetadas as versões 15.2.0 até 18.10.7, 18.11.0 até 18.11.4 e 19.0.0 até 19.0.1. As correções chegaram nas versões 18.10.8, 18.11.5 e 19.0.2, que atualizaram a dependência Oj para a edição 3.17.3.



