
नोटबुक डिफ रेंडरिंग के माध्यम से Oj पार्सर में Ruby की दो मेमोरी भ्रष्टाचार बग्स का शोषण करते हुए GitLab RCE के लिए स्व-निहित डेमो।
यह रिपॉज़िटरी हमारे शोध में वर्णित GitLab notebook-diff RCE श्रृंखला के लिए एक स्व-निहित डेमो है। यह एक नया GitLab 18.11.3 कंटेनर प्रारंभ करता है, सार्वजनिक HTTP इंटरफ़ेस के माध्यम से एक साधारण उपयोगकर्ता बनाता है, और उस इंस्टेंस के विरुद्ध PoC चलाता है।
तकनीकी विवरण: गहराई-पहले जाना: दो Ruby मेमोरी भ्रष्टाचार कमज़ोरियों के माध्यम से GitLab RCE हासिल करना
amd64) पर Linuxसबसे पहले, एक नया GitLab वातावरण बनाएँ:
./setup_env.sh
यह पिछले डेमो कंटेनर और उसके वॉल्यूम हटा देता है, GitLab प्रारंभ करता है, उसके तैयार होने की प्रतीक्षा करता है, और एक सामान्य उपयोगकर्ता बनाता है। नए GitLab बूट में कई मिनट लग सकते हैं।
दो टर्मिनल खोलें। पहले में कॉलबैक लिसनर प्रारंभ करें:
./run_poc.sh listen 4555
दूसरे में एक्सप्लॉइट चलाएँ:
./run_poc.sh exploit 4555
जब कॉलबैक आए, तो लिसनर टर्मिनल पर जाएँ और id या whoami जैसे कमांड चलाएँ। ASLR खोज समय प्रत्येक रन के बीच भिन्न होता है।

GitLab Jupyter notebook diffs को Oj, एक नेटिव Ruby JSON पार्सर, में पास करके रेंडर करता है। यह श्रृंखला दो पार्सर बग्स को जोड़ती है: एक पार्सर स्थिति को दूषित करता है और अंततः कॉलबैक पॉइंटर को नियंत्रित करता है, जबकि दूसरा हीप पॉइंटर का खुलासा करता है जिसका उपयोग ASLR खोज को संकीर्ण करने के लिए किया जाता है। PoC एक प्री-कंप्यूटेड लुकअप टेबल लोड करता है, सामान्य GitLab HTTP अनुरोधों के माध्यम से मेल खाने वाली लाइब्रेरी लेआउट ढूँढता है, और Puma वर्कर को git उपयोगकर्ता के रूप में लिसनर से कनेक्ट कराता है।
इस डेमो का उपयोग केवल शामिल स्थानीय लैब वातावरण में करें।