Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-34213 — एक निम्न-विशेषाधिकार वाला Docmost उपयोगकर्ता एक पीड़ित के attachmentId को सामान्य अपलोड एंडपॉइंट पर प्रदान करके उसी कार्यक्षेत्र में किसी अन्य पृष्ठ के संग्रहीत अटैचमेंट को अधिलेखित कर सकता है। | Kitploit
उपकरण/GitHubGitHub/0xmrma/cve-2026-34213
भेद्यता विश्लेषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगपेपर और शोधलर्निंग और शिक्षा
GitHub0xmrma/cve-2026-34213

CVE-2026-34213

एक निम्न-विशेषाधिकार वाला Docmost उपयोगकर्ता एक पीड़ित के attachmentId को सामान्य अपलोड एंडपॉइंट पर प्रदान करके उसी कार्यक्षेत्र में किसी अन्य पृष्ठ के संग्रहीत अटैचमेंट को अधिलेखित कर सकता है।

रिपॉजिटरी देखें
533 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-34213

एक कम-विशेषाधिकार प्राप्त Docmost उपयोगकर्ता किसी पीड़ित के attachmentId को सामान्य अपलोड एंडपॉइंट पर प्रदान कर सकता था और उसी कार्यक्षेत्र में किसी अन्य पृष्ठ के संग्रहीत अनुलग्नक को अधिलेखित कर सकता था।

परिचय

मैंने Docmost, ओपन-सोर्स सहयोगी दस्तावेज़ीकरण प्लेटफ़ॉर्म में एक उच्च-गंभीरता वाले प्राधिकरण दोष की पहचान की, जिम्मेदारी से खुलासा किया और इसे पुन: उत्पन्न किया।

Docmost की आधिकारिक साइट इसे 3M+ डाउनलोड वाला एक एंटरप्राइज़-रेडी ऑन-प्रिमाइसेस विकी बताती है, और कहती है कि विल्नियस सिटी, बेक्टल, ऑस्ट्रेलियाई सरकार, रेड क्रॉस और ETS क्यूबेक सहित संगठनों की टीमों द्वारा इस पर भरोसा किया जाता है।

बग Docmost द्वारा डायग्राम सेव/अपडेट फ़्लो में उपयोग किए जाने वाले सामान्य फ़ाइल-अपलोड पथ में रहता था।

मैं उस कोड की समीक्षा एक बहुत ही विशिष्ट प्रश्न के साथ कर रहा था:

क्या होता है यदि अपलोड एंडपॉइंट एक पृष्ठ पर संपादन पहुँच साबित करता है, लेकिन अधिलेखित लक्ष्य एक अलग उपयोगकर्ता-नियंत्रित अनुलग्नक आईडी के साथ चुना जाता है?

इस मामले में, उस प्रश्न ने सीधे एक वास्तविक ऑब्जेक्ट-बाइंडिंग विफलता का नेतृत्व किया।

Docmost ने कॉलर को भेजने की अनुमति दी:

  • एक pageId जिस पृष्ठ को वे संपादित करने की अनुमति रखते थे, और
  • एक attachmentId जो उसी कार्यक्षेत्र के एक अलग पृष्ठ से संबंधित था

सर्वर ने एक अधिलेखित स्थिरता जाँच की, लेकिन गार्ड ने गलत बूलियन तर्क का उपयोग किया।

इसका मतलब था कि अनुरोध प्राधिकरण पास कर सकता था और फिर भी पीड़ित के अनुलग्नक को अधिलेखित कर सकता था।

यह मुद्दा CVE-2026-34213 बन गया।

Docmost: docmost/docmost
सलाहकार: GHSA-89fp-2hch-j9gp
CVE: CVE-2026-34213
पैच किया गया: v0.71.0 में

photo0 ---

आक्रमण श्रृंखला

हमलावर-नियंत्रित pageId जिसमें संपादन पहुँच है -> हमलावर-नियंत्रित पीड़ित attachmentId -> दोषपूर्ण अधिलेखित गार्ड क्रॉस-पेज अधिलेखन को वैध मानता है -> पीड़ित attachmentId से भंडारण पथ पुनर्निर्मित -> हमलावर बाइट्स पीड़ित फ़ाइल को बदल देते हैं -> पीड़ित पृष्ठ संशोधित अनुलग्नक को परोसना जारी रखता है


Docmost का यह भाग क्या करता है

Docmost पृष्ठ अनुलग्नकों को डेटाबेस रिकॉर्ड और भंडारण में बैकिंग फ़ाइलों के रूप में संग्रहीत करता है।

सामान्य अपलोड के लिए, सर्वर एक नई अनुलग्नक आईडी बनाता है और एक नई फ़ाइल लिखता है।

हालाँकि, डायग्राम सेव/अपडेट फ़्लो के लिए, क्लाइंट जानबूझकर एक मौजूदा attachmentId का पुन: उपयोग करता है ताकि हर बार एक नया अनुलग्नक रिकॉर्ड उत्पन्न करने के बजाय उसी डायग्राम फ़ाइल को स्थान पर अद्यतन किया जा सके।

यह व्यवहार अपने आप में वैध है।

समस्या यह है कि यह एक उच्च-जोखिम वाला पथ बनाता है:

  • एक इनपुट उस पृष्ठ की पहचान करता है जिसे अधिकृत किया जा रहा है
  • दूसरा इनपुट उस अनुलग्नक की पहचान करता है जिसे अधिलेखित किया जा रहा है

जब भी कोई एंडपॉइंट इन दो जिम्मेदारियों को मिलाता है, तो कार्यान्वयन को उन्हें ठीक से एक साथ बाँधना चाहिए।

Docmost ने ऐसा नहीं किया।


यह सतह देखने लायक क्यों थी

मिश्रित क्रिएट/अपडेट एंडपॉइंट प्राधिकरण बग के लिए सामान्य स्थान हैं।

कारण सरल है:

  • क्रिएट फ़्लो आमतौर पर कंटेनर ऑब्जेक्ट के विरुद्ध अधिकृत होते हैं
  • अपडेट फ़्लो आमतौर पर मौजूदा रिकॉर्ड के विरुद्ध अधिकृत होते हैं
  • यदि एक एंडपॉइंट दोनों करने का प्रयास करता है, तो पहले गलत चीज़ को मान्य करना और दूसरे पहचानकर्ता को "सिर्फ मेटाडेटा" मानना आसान है

यहाँ बिल्कुल यही पैटर्न है।

POST /api/files/upload ने मान्य किया कि कॉलर pageId द्वारा नामित पृष्ठ को संपादित कर सकता है।

लेकिन यदि attachmentId भी प्रदान किया गया था, तो सर्वर एक अधिलेखित पथ पर स्विच हो गया और एक मौजूदा अनुलग्नक रिकॉर्ड को अलग से चुना।

इसने महत्वपूर्ण सुरक्षा प्रश्न बनाया:

क्या अधिलेखित पथ यह साबित करता है कि चयनित अनुलग्नक वास्तव में अधिकृत पृष्ठ से संबंधित है?

कमजोर संस्करणों में उत्तर 'नहीं' था।


मूल कारण

मूल कारण एक उपयोगकर्ता-नियंत्रित कुंजी के माध्यम से प्राधिकरण बाईपास था, जो अधिलेखित गार्ड में एक बूलियन तर्क बग के साथ संयुक्त था।

कमजोर फ़्लो इस तरह दिखता था:

  1. AttachmentController.uploadFile() ने मल्टीपार्ट फॉर्म डेटा से pageId पढ़ा।
  2. उसने उस पृष्ठ को लोड किया और validateCanEdit(page, user) को कॉल किया।
  3. उसने उसी अनुरोध से वैकल्पिक attachmentId को अलग से स्वीकार किया।
  4. AttachmentService.uploadFile() ने हमलावर-प्रदत्त ID द्वारा मौजूदा अनुलग्नक को लोड किया।
  5. अधिलेखित गार्ड ने यह सत्यापित करने का प्रयास किया कि मौजूदा अनुलग्नक अधिकृत पृष्ठ से मेल खाता है।
  6. गार्ड ने किसी भी बेमेल को अस्वीकार करने के बजाय && का उपयोग किया।

कमजोर गार्ड था:

if (
  existingAttachment.pageId !== pageId &&
  existingAttachment.fileExt !== preparedFile.fileExtension &&
  existingAttachment.workspaceId !== workspaceId
) {
  throw new BadRequestException("File attachment does not match");
}

उस स्थिति ने केवल अनुरोध को अस्वीकार किया यदि:

  • पृष्ठ आईडी बेमेल थी, और
  • फ़ाइल एक्सटेंशन बेमेल था, और
  • कार्यक्षेत्र आईडी बेमेल थी

एक साथ।

यह उसके विपरीत है जो एक अधिलेखित गार्ड को करना चाहिए।

वास्तविक हमले के मामले के लिए, हमलावर जानबूझकर उसी कार्यक्षेत्र के अंदर रहा।

इसलिए:

  • existingAttachment.workspaceId !== workspaceId false था

एक बार वह ऑपरेंड false हो गया, तो पूरी && शर्त false का मूल्यांकन करती है, भले ही अनुलग्नक किसी अलग पृष्ठ से संबंधित हो।

इसलिए सर्वर ने क्रॉस-पेज अधिलेखन को वैध माना।

यह बग का पहला भाग था।

दूसरा भाग वह है जिसने प्रभाव को वास्तविक बनाया।

जाँच के बाद, सेवा ने हमलावर-प्रदत्त attachmentId और फ़ाइलनाम का उपयोग करके गंतव्य भंडारण पथ को पुनर्निर्मित किया:

const filePath =
  `${getAttachmentFolderPath(AttachmentType.File, workspaceId)}/` +
  `${attachmentId}/${preparedFile.fileName}`;

फिर, अद्यतन पथ पर, Docmost ने केवल परिवर्तनीय मेटाडेटा को अद्यतन किया जैसे:

  • fileSize
  • updatedAt

इसने नहीं स्वामित्व को हमलावर पृष्ठ से पुन: बाँधा।

इसलिए पीड़ित पृष्ठ उसी अनुलग्नक रिकॉर्ड और उसी अनुलग्नक आईडी को इंगित करता रहा। केवल अंतर्निहित फ़ाइल बाइट्स बदल गए।

यही कारण है कि यह एक हानिरहित बेमेल नहीं था।

यह एक स्थायी अनधिकृत अधिलेखन प्रिमिटिव था।


यह एक सुरक्षा मुद्दा क्यों है, न कि सिर्फ एक तर्क गलती

यह एक कॉस्मेटिक बग नहीं था और फ़ाइलनाम टकराव का मुद्दा नहीं था।

हमलावर को रेस की आवश्यकता नहीं थी। हमलावर को यादृच्छिक पथ का अनुमान लगाने की आवश्यकता नहीं थी। हमलावर को पीड़ित पृष्ठ पर लिखने की पहुँच की आवश्यकता नहीं थी।

उन्हें केवल आवश्यकता थी:

  • पीड़ित अनुलग्नक संदर्भ सीखने के लिए पढ़ने की पहुँच, और
  • उसी कार्यक्षेत्र में किसी अन्य पृष्ठ पर लिखने की पहुँच

वहाँ से, वे किसी अन्य पृष्ठ के अनुलग्नक के लिए संग्रहीत फ़ाइल बाइट्स को बदल सकते थे, जबकि पीड़ित पृष्ठ उस अनुलग्नक को संदर्भित और परोसता रहता था जैसे कि कुछ भी नहीं बदला हो।

यह एक सीधी अखंडता विफलता है।

व्यावहारिक रूप में, हमलावर कर सकता था:

  • डायग्राम से छेड़छाड़ करें
  • अनुलग्नकों को भ्रामक सामग्री से बदलें
  • संदर्भित फ़ाइलों को दूषित करें
  • भ्रामक ऑडिट ट्रेल्स बनाएं क्योंकि अनुलग्नक अभी भी पीड़ित पृष्ठ से संबंधित दिखाई देता है

महत्वपूर्ण बिंदु यह है:

सर्वर ने हमलावर द्वारा चुने गए अधिलेखित लक्ष्य को स्वीकार किया, बिना उसे उस पृष्ठ से बाँधे जिसकी संपादन अनुमति वास्तव में जाँची गई थी।

यह एक पहुँच-नियंत्रण विफलता है, न कि केवल खराब बूलियन स्वच्छता।


शोषण व्यावहारिक क्यों था

डायग्राम अनुलग्नकों के लिए शोषण विशेष रूप से व्यावहारिक था।

Docmost का क्लाइंट डायग्राम सेव के लिए जानबूझकर attachmentId का पुन: उपयोग करता है और नियतात्मक फ़ाइलनाम का उपयोग करता है:

  • diagram.excalidraw.svg
  • diagram.drawio.svg

यह मायने रखता है क्योंकि यह हमलावर की आवश्यकताओं को कम करता है।

सामान्य अनुलग्नकों के लिए, हमलावर को दोनों की आवश्यकता होती है:

  • पीड़ित अनुलग्नक आईडी
  • पीड़ित फ़ाइलनाम

डायग्राम के लिए, फ़ाइलनाम पहले से ही अनुमानित है।

इसलिए यदि हमलावर पीड़ित पृष्ठ सामग्री पढ़ सकता है, तो वे अक्सर केवल एकमात्र लापता टुकड़ा प्राप्त कर सकते हैं:

  • पीड़ित attachmentId

अपने सत्यापन सेटअप में, मैंने ठीक उसी पथ का उपयोग किया:

  • हमलावर के पास पीड़ित स्थान पर केवल पाठक पहुँच थी
  • हमलावर के पास एक अलग हमलावर-नियंत्रित स्थान पर लेखक पहुँच थी
  • दोनों स्थान एक ही कार्यक्षेत्र से संबंधित थे

यह पर्याप्त था।

टूल डाउनलोड करें