
노트북 diff 렌더링을 통해 Oj 파서의 두 가지 Ruby 메모리 손상 버그를 악용하는 GitLab RCE 자체 포함 데모
이 저장소는 당사의 연구에서 설명한 GitLab notebook-diff RCE 체인을 위한 자체 포함(self-contained) 데모를 포함합니다. 새 GitLab 18.11.3 컨테이너를 시작하고, 공개 HTTP 인터페이스를 통해 일반 사용자를 생성한 다음, 해당 인스턴스에 대해 PoC를 실행합니다.
기술 세부사항: Going depthfirst: Achieving GitLab RCE via Two Ruby Memory Corruption Vulnerabilities
amd64)의 Linux먼저 새 GitLab 환경을 구축합니다:
./setup_env.sh
이 스크립트는 이전 데모 컨테이너와 해당 볼륨을 제거하고, GitLab을 시작하고, 준비 완료될 때까지 기다린 후 일반 사용자를 프로비저닝합니다. 새 GitLab 부팅은 몇 분이 걸릴 수 있습니다.
두 개의 터미널을 엽니다. 첫 번째 터미널에서 콜백 리스너를 시작합니다:
./run_poc.sh listen 4555
두 번째 터미널에서 익스플로잇을 실행합니다:
./run_poc.sh exploit 4555
콜백이 도착하면 리스너 터미널로 전환하여 id 또는 whoami 같은 명령을 실행합니다. ASLR 검색 시간은 실행마다 다릅니다.

GitLab은 저장소에서 제어되는 JSON을 네이티브 Ruby JSON 파서인 Oj에 전달하여 Jupyter notebook diff를 렌더링합니다. 이 체인은 두 가지 파서 버그를 결합합니다. 하나는 파서 상태를 손상시켜 궁극적으로 콜백 포인터를 제어하며, 다른 하나는 ASLR 검색 범위를 좁히는 데 사용되는 힙 포인터를 노출합니다. PoC는 사전 계산된 조회 테이블을 로드하고, 일반 GitLab HTTP 요청을 통해 일치하는 라이브러리 레이아웃을 찾은 다음, Puma 워커가 git 사용자로 리스너에 다시 연결하도록 만듭니다.
이 데모는 포함된 로컬 랩 환경에서만 사용하세요.