
Eigenständige Demo für GitLab RCE, die zwei Ruby-Speicherkorruptionsfehler im Oj-Parser über das Rendering von Notebook-Diffs ausnutzt.
Dieses Repository enthält eine in sich geschlossene Demo für die in unserer Forschung beschriebene notebook-diff-RCE-Kette für GitLab. Es startet einen frischen GitLab-18.11.3-Container, erstellt über die öffentliche HTTP-Schnittstelle einen normalen Benutzer und führt den PoC gegen diese Instanz aus.
Technische Details: Going depthfirst: Erreichen von GitLab-RCE über zwei Ruby-Speicherkorruptions-Schwachstellen
amd64)Erstellen Sie zuerst eine frische GitLab-Umgebung:
./setup_env.sh
Dies entfernt den vorherigen Demo-Container und seine Volumes, startet GitLab, wartet, bis es bereit ist, und richtet einen normalen Benutzer ein. Ein frischer GitLab-Start kann mehrere Minuten dauern.
Öffnen Sie zwei Terminals. Starten Sie den Callback-Listener im ersten:
./run_poc.sh listen 4555
Führen Sie den Exploit im zweiten aus:
./run_poc.sh exploit 4555
Wenn der Callback eintrifft, wechseln Sie zum Listener-Terminal und führen Sie Befehle wie id oder whoami aus. Die ASLR-Suchzeit variiert von Lauf zu Lauf.

GitLab rendert Jupyter-Notebook-Diffs, indem es vom Repository kontrolliertes JSON an Oj übergibt, einen nativen Ruby-JSON-Parser. Die Kette kombiniert zwei Parser-Bugs: Einer korrumpiert den Parser-Zustand und kontrolliert schließlich einen Callback-Pointer, während der andere einen Heap-Pointer offenlegt, der genutzt wird, um die ASLR-Suche einzugrenzen. Der PoC lädt eine vorberechnete Nachschlagetabelle, ermittelt das passende Bibliothekslayout über normale GitLab-HTTP-Anfragen und bringt den Puma-Worker dazu, als Benutzer git eine Rückverbindung zum Listener herzustellen.
Verwenden Sie diese Demo ausschließlich in der enthaltenen lokalen Laborumgebung.