
Demo autossuficiente para RCE no GitLab que explora duas falhas de corrupção de memória em Ruby no parser Oj por meio da renderização de diffs de notebooks.
Este repositório contém uma demo autocontida para a cadeia de RCE de notebook-diff do GitLab descrita em nossa pesquisa. Ele inicia um novo container GitLab 18.11.3, cria um usuário comum por meio da interface HTTP pública e executa o PoC contra essa instância.
Detalhes técnicos: Indo a fundo: alcançando RCE no GitLab por meio de duas vulnerabilidades de corrupção de memória em Ruby
amd64)Primeiro, crie um novo ambiente GitLab:
./setup_env.sh
Isso remove o container da demo anterior e seus volumes, inicia o GitLab, aguarda até que ele fique pronto e provisiona um usuário comum. A inicialização de um GitLab novo pode levar vários minutos.
Abra dois terminais. Inicie o listener de callback no primeiro terminal:
./run_poc.sh listen 4555
Execute o exploit no segundo terminal:
./run_poc.sh exploit 4555
Quando o callback chegar, alterne para o terminal do listener e execute comandos como id ou whoami. O tempo de busca do ASLR varia entre execuções.

O GitLab renderiza diffs de notebooks Jupyter ao passar JSON controlado pelo repositório para o Oj, um parser JSON nativo em Ruby. A cadeia combina dois bugs do parser: um corrompe o estado do parser e acaba controlando um ponteiro de callback, enquanto o outro revela um ponteiro de heap usado para restringir a busca do ASLR. O PoC carrega uma tabela de consulta pré-computada, encontra o layout correspondente da biblioteca por meio de requisições HTTP normais ao GitLab e faz o worker do Puma se conectar de volta ao listener como o usuário git.
Use esta demo apenas no ambiente de laboratório local incluído.