
Demo autonoma per l'RCE di GitLab che sfrutta due bug di corruzione della memoria in Ruby nel parser Oj tramite il rendering dei diff dei notebook.
Questo repository contiene una demo autonoma per la catena di RCE notebook-diff di GitLab descritta nella nostra ricerca. Avvia un container GitLab 18.11.3 pulito, crea un utente normale tramite l'interfaccia HTTP pubblica ed esegue il PoC contro tale istanza.
Dettagli tecnici: Going depthfirst: Achieving GitLab RCE via Two Ruby Memory Corruption Vulnerabilities
amd64)Per prima cosa, prepara un ambiente GitLab pulito:
./setup_env.sh
Questo script rimuove il container demo precedente e i suoi volumi, avvia GitLab, attende che sia pronto e crea un utente normale. L'avvio di una nuova istanza GitLab può richiedere diversi minuti.
Apri due terminali. Avvia il listener di callback nel primo:
./run_poc.sh listen 4555
Esegui l'exploit nel secondo:
./run_poc.sh exploit 4555
Quando arriva la callback, passa al terminale del listener ed esegui comandi come id o whoami. Il tempo di ricerca di ASLR varia tra le varie esecuzioni.

GitLab visualizza i diff dei notebook Jupyter passando JSON controllato dal repository a Oj, un parser JSON nativo di Ruby. La catena combina due bug del parser: uno corrompe lo stato del parser e alla fine controlla un puntatore di callback, mentre l'altro rivela un puntatore dell'heap usato per restringere la ricerca di ASLR. Il PoC carica una tabella di lookup precalcolata, trova il layout di libreria corrispondente tramite normali richieste HTTP a GitLab e fa sì che il worker Puma si riconnetta al listener come utente git.
Usa questa demo solo nell'ambiente di laboratorio locale incluso.