
BOLA/IDOR भेद्यता osTicket ajax.tickets.php में | जिम्मेदार प्रकटीकरण
ajax.tickets.phpटूटा हुआ ऑब्जेक्ट स्तर प्राधिकरण (BOLA): असुरक्षित प्रत्यक्ष ऑब्जेक्ट संदर्भ (IDOR)
include/ajax.tickets.php→viewField()फ़ंक्शन
रिपोर्ट किया गया: @JF0x0r · 27 मार्च 2026 स्थिति: पैच किया गया - osTicket v1.17.8 / v1.18.4 में फिक्स जारी किया गया
| क्षेत्र | विवरण |
|---|---|
| कमज़ोरी | BOLA / IDOR (टूटा हुआ ऑब्जेक्ट स्तर प्राधिकरण) |
| लक्ष्य | osTicket v1.18-git - कमिट 2570d69 |
| घटक | include/ajax.tickets.php |
| फ़ंक्शन | viewField() - पंक्तियाँ 805–806 |
| एंडपॉइंट | GET /scp/ajax.php/tickets/{ticket_id}/field/{field_id}/view |
| CVSS 4.0 स्कोर | 8.2 उच्च - AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N |
| CWE | CWE-862 (गुम प्राधिकरण), CWE-639 (उपयोगकर्ता-नियंत्रित कुंजी द्वारा प्रमाणीकरण बाईपास) |
| स्थिति | ✅ पैच किया गया — osTicket v1.17.8 और v1.18.4 में फिक्स किया गया |
मैं जुआन फेलिप ओज़ ( @JF0x0r ) हूँ, एक सुरक्षा शोधकर्ता जो ओपन सोर्स सुरक्षा के प्रति जुनूनी है। मैं यह काम इनाम के लिए नहीं करता, बल्कि इसलिए करता हूँ क्योंकि मुझे विश्वास है कि जिन उपकरणों पर लोग निर्भर करते हैं, वे सुरक्षित होने चाहिए। जब मुझे कुछ मिलता है, तो मैं इसे जिम्मेदारी से रिपोर्ट करता हूँ, उचित रूप से दस्तावेजीकरण करता हूँ, और ठीक होने के बाद सार्वजनिक रूप से साझा करता हूँ।
osTicket के AJAX सबसिस्टम की मैन्युअल कोड समीक्षा करते समय, मैंने ajax.tickets.php में कुछ गड़बड़ देखी। viewField() फ़ंक्शन टिकट फ़ील्ड डेटा देखने के अनुरोधों को संभालता है - और यह टिकट ऑब्जेक्ट को पुनर्प्राप्त करता है और फ़ील्ड के अस्तित्व को मान्य करता है। लेकिन यह कभी जाँच नहीं करता कि अनुरोध करने वाले एजेंट के पास उस टिकट तक पहुँचने की अनुमति है या नहीं।
कोई checkStaffPerm() नहीं। कोई विभाग सत्यापन नहीं। कुछ नहीं।
इसका मतलब है कि कोई भी प्रमाणित एजेंट, यहाँ तक कि एक जो सख्ती से एक ही विभाग तक सीमित है, सिस्टम में किसी भी अन्य विभाग से टिकट फ़ील्ड पढ़ सकता है, बस ticket_id और field_id जानकर या अनुमान लगाकर। ये क्रमिक पूर्णांक हैं। गणना करना आसान है।
जो चीज़ इसे विशेष रूप से स्पष्ट बनाती है, वह है उसी फ़ाइल में ठीक ऊपर स्थित सहोदर फ़ंक्शन editField() के साथ तुलना। editField() सही ढंग से $ticket->checkStaffPerm($thisstaff, Ticket::PERM_EDIT) कॉल करता है और उल्लंघन पर HTTP 403 लौटाता है। फिक्स पहले से ही लिखने के लिए लागू किया गया था — इसे पढ़ने के लिए कभी लागू नहीं किया गया।
मैंने एक नियंत्रित प्रयोगशाला वातावरण में शोषण का पूरा एंड-टू-एंड प्रदर्शन रिकॉर्ड किया:
वीडियो दिखाता है:
agent_a केवल Dept-A तक पहुँच प्रतिबंधित के साथ प्रमाणितइस रिपॉजिटरी में exploit.py स्क्रिप्ट पूरी श्रृंखला (प्रमाणीकरण → गणना → अनधिकृत फ़ील्ड एक्सेस) को स्वचालित करती है और इसका उपयोग मूल्यांकन के दौरान यह पुष्टि करने के लिए किया गया था कि समस्या मैन्युअल परीक्षण से परे फैलती है।
ticket_id / field_id पूर्णांक बल्क स्क्रैपिंग को तुच्छ बनाते हैंviewField() में एक पंक्ति का सम्मिलन, टिकट ऑब्जेक्ट प्राप्त होने के तुरंत बाद - बिल्कुल वैसा ही जैसा editField() पहले से सही ढंग से करता है। पूर्ण तकनीकी विवरण, डिफ़ और CVSS ब्रेकडाउन संलग्न रिपोर्ट में हैं।
📄 BOLA_IDOR_osTicket_Report_v2.pdf
osTicket ने रिपोर्ट की पुष्टि की और अनुरोधित फ़ील्ड को हल/प्रस्तुत करने से पहले $ticket->checkStaffPerm($thisstaff) जोड़कर शमन लागू किया - यह जाँच पहले से ही editField() में मौजूद है। कर्मचारियों के पास अब फ़ील्ड डेटा देखने से पहले मूल टिकट तक पहुँच होनी चाहिए।
osTicket एक संक्षिप्त अपग्रेड बफर की सिफारिश करता है इससे पहले कि एक्सप्लॉइट चरणों को सार्वजनिक रूप से साझा किया जाए। यह रिपॉजिटरी उस मार्गदर्शन का पालन करता है - नीचे प्रकटीकरण समयरेखा देखें।
.
├── README.md # यह फ़ाइल
├── BOLA_IDOR_osTicket_Report_v2.pdf # पूर्ण तकनीकी प्रकटीकरण रिपोर्ट
├── exploit.py # PoC ऑटोमेशन स्क्रिप्ट
└── PoC_osTicket.mov # डेमो वीडियो की स्थानीय प्रतिलिपि
मैंने इसे प्रकाशित करने से पहले osTicket सुरक्षा टीम को निजी रूप से रिपोर्ट किया। यह रिपॉजिटरी केवल जिम्मेदार प्रकटीकरण विंडो के बाद सार्वजनिक की गई थी, और अब जब आधिकारिक पैच जारी हो चुका है, तो पूरा विवरण उपलब्ध है। यदि आप osTicket के रखरखावकर्ता हैं और आपके कोई प्रश्न हैं, तो सीधे GitHub के माध्यम से संपर्क करने में संकोच न करें।
द्वारा खोजा गया @JF0x0r · ओपन सोर्स सुरक्षा मायने रखती है।
| विवरण | संदर्भ |
|---|
| पैच कमिट | d590a9770d25159fb7741681f36e23a35f1fb5e9 |
| इसमें फिक्स किया गया | v1.17.8 · v1.18.4 |
| आधिकारिक डाउनलोड | osticket.com/download |
| रिलीज़ प्रकार | त्वरित सुरक्षा रिलीज़ |
| स्वीकृति | जुआन फेलिप ओज़ (@JF0x0r) |
| तारीख | घटना |
|---|
| 27 मार्च, 2026 | कमज़ोरी की खोज और दस्तावेजीकरण किया गया |
| 27 मार्च, 2026 | रिपोर्ट [email protected] पर भेजी गई |
| 17 जून, 2026 | osTicket समस्या की पुष्टि करता है और सत्यापन के लिए शमन पैच साझा करता है |
| 17 जून, 2026 | osTicket फिक्स युक्त v1.17.8 और v1.18.4 जारी करता है (कमिट d590a9770d25159fb7741681f36e23a35f1fb5e9) |
| — | GitHub CNA के माध्यम से CVE असाइनमेंट लंबित |