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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-68621 — CVE-2025-68621 का शैक्षिक PoC और विश्लेषण, जो Trilium Notes सिंक लॉगिन पर टाइमिंग अटैक है। नेटवर्क टाइमिंग साइड-चैनल के माध्यम से HMAC हैश रिकवरी को प्रदर्शित करता है, जिसमें मूल कारण, सुधार और शमन विवरण शामिल हैं। | Kitploit
उपकरण/GitHubGitHub/sivaadityacoder/cve-2025-68621
भेद्यता विश्लेषणशोषणवेब सुरक्षाक्रिप्टोग्राफीपेपर और शोधलर्निंग और शिक्षा
GitHubsivaadityacoder/cve-2025-68621

CVE-2025-68621

CVE-2025-68621 का शैक्षिक PoC और विश्लेषण, जो Trilium Notes सिंक लॉगिन पर टाइमिंग अटैक है। नेटवर्क टाइमिंग साइड-चैनल के माध्यम से HMAC हैश रिकवरी को प्रदर्शित करता है, जिसमें मूल कारण, सुधार और शमन विवरण शामिल हैं।

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

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

सभी देखें →

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

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

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

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

CVE-2025-68621 — /api/login/sync पर Trilium Notes टाइमिंग अटैक

गंभीरता: उच्च (CVSS 7.4) प्रभावित सॉफ्टवेयर: TriliumNext/Trilium < 0.101.0 भेद्यता प्रकार: CWE-208 – अवलोकनीय टाइमिंग विसंगति (Observable Timing Discrepancy) समाधान: Trilium 0.101.0 (PR #8129) प्रकाशित: 2026-02-06 | आरक्षित: 2025-12-19


विषय सूची

  1. मेरा दृष्टिकोण
  2. मूल कारण
  3. प्रभाव
  4. समाधान
  5. मुख्य बातें
  6. समयरेखा
  7. संदर्भ

मेरा दृष्टिकोण

Trilium Notes क्या है?

Trilium Notes एक ओपन-सोर्स, क्रॉस-प्लेटफॉर्म, पदानुक्रमिक नोट लेने वाला एप्लिकेशन है जो बड़े व्यक्तिगत ज्ञानकोष बनाने के लिए डिज़ाइन किया गया है। यह समर्थन करता है:

  • एक स्व-होस्टेड सर्वर जिससे कई क्लाइंट सिंक कर सकते हैं
  • समृद्ध नोट प्रकार (टेक्स्ट, कोड, कैनवास, आरेख)
  • एक शक्तिशाली स्क्रिप्टिंग API

सिंक सुविधा एक Trilium क्लाइंट को Trilium सर्वर से प्रमाणित करने की अनुमति देती है ताकि नोट डिवाइसों में सिंक रहें। यह सिंक एंडपॉइंट CVE-2025-68621 का प्रवेश बिंदु है।

टाइमिंग अटैक क्या है?

टाइमिंग अटैक एक साइड-चैनल अटैक है जिसमें हमलावर विभिन्न इनपुट को संसाधित करने में सिस्टम द्वारा लिए गए समय को मापकर गुप्त जानकारी प्राप्त करता है।

क्लासिक उदाहरण स्ट्रिंग तुलना है:

"correct_password" !== "aorrect_password"   → स्थिति 0 पर विफल → तेज़
"correct_password" !== "cXrrect_password"   → स्थिति 1 पर विफल → थोड़ा धीमा
"correct_password" !== "correct_password"   → पूरी तरह मेल → सबसे धीमा

अधिकांश प्रोग्रामिंग भाषाएँ वर्ण-दर-वर्ण स्ट्रिंग तुलना करती हैं और जैसे ही कोई अंतर मिलता है, रुक जाती हैं (जल्दी निकास - early exit)। इसका मतलब है:

  • एक अनुमान जो पहले बाइट से मेल खाता है, तुरंत गलत अनुमान की तुलना में थोड़ा अधिक समय लेता है।
  • हज़ारों अनुमान भेजकर और औसत प्रतिक्रिया समय की गणना करके, हमलावर सांख्यिकीय रूप से यह निर्धारित कर सकता है कि कौन सा बाइट सही है — स्थिति दर स्थिति — जब तक पूरा रहस्य पुनर्प्राप्त नहीं हो जाता।

समाधान स्थिर-समय तुलना (constant-time comparison) फ़ंक्शन का उपयोग करना है जो अंतर कहीं भी हो, प्रत्येक बाइट का हमेशा निरीक्षण करता है।

भेद्यता कैसे खोजी गई

भेद्यता Trilium के प्रमाणीकरण तर्क की मैन्युअल कोड समीक्षा के माध्यम से खोजी गई। शोधकर्ता ने apps/server/src/routes/api/login.ts में सिंक लॉगिन प्रवाह की जांच की और loginSync() फ़ंक्शन (लगभग पंक्ति 111) में निम्नलिखित पैटर्न देखा:

const documentSecret = options.getOption("documentSecret");
const expectedHash   = utils.hmac(documentSecret, timestampStr);
const givenHash      = req.body.hash;

if (expectedHash !== givenHash) {          // ← कमजोर पंक्ति
    return [400, { message: "Sync login credentials are incorrect..." }];
}

लाल झंडा HMAC हैश की तुलना के लिए JavaScript के बिल्ट-इन !== ऑपरेटर का उपयोग है। !== ऑपरेटर स्थिर-समय नहीं है — यह जैसे ही कोई भिन्न वर्ण पाता है, बाहर निकल जाता है। चूँकि तुलना सादे स्ट्रिंग्स पर की जाती है (क्रिप्टोग्राफ़िक रूप से सुरक्षित तुलना फ़ंक्शन का उपयोग नहीं करके), प्रतिक्रिया समय में यह जानकारी लीक होती है कि हमलावर के अनुमान के कितने अग्रणी बाइट्स सही हैं।

शोधकर्ता ने तब पूछा:

"क्या इस छोटे से टाइमिंग अंतर को नेटवर्क पर इतना बढ़ाया जा सकता है कि पूरे 44-वर्ण वाले Base64-एन्कोडेड HMAC हैश को पुनर्प्राप्त किया जा सके?"

उत्तर हाँ निकला — पर्याप्त दोहराए गए माप और कुछ सांख्यिकीय विश्लेषण के साथ, संकेत शोर से ऊपर उठ जाता है।

अटैक एल्गोरिथम

जब कोई Trilium क्लाइंट सिंक करना चाहता है, तो वह इस तरह के JSON बॉडी के साथ POST /api/login/sync को कॉल करता है:

{
  "timestamp":   "2025-12-19T10:00:00.000Z",
  "syncVersion": 34,
  "hash":        "<documentSecret + टाइमस्टैम्प का HMAC-SHA256, Base64-एन्कोडेड>"
}

बाइट-दर-बाइट पुनर्प्राप्ति इस प्रकार काम करती है:

स्थिति = 0 से 43 तक:
    वर्ण सेट (A-Z, a-z, 0-9, +, /, =) में प्रत्येक उम्मीदवार वर्ण c के लिए:
        hash = ज्ञात_उपसर्ग + c + पैडिंग के साथ नमूने भेजें
        औसत प्रतिक्रिया समय रिकॉर्ड करें
    सर्वश्रेष्ठ वर्ण = उच्चतम औसत समय वाला उम्मीदवार
    सर्वश्रेष्ठ वर्ण को ज्ञात_उपसर्ग में जोड़ें

44 पुनरावृत्तियों (प्रति Base64 वर्ण) के बाद, पूरा 44-वर्ण HMAC हैश पुनर्प्राप्त हो जाता है।

व्यावहारिक आवश्यकताएँ:

  • >100 000 कुल HTTP अनुरोध (50 नमूने × 65 वर्ण सेट × 44 स्थान ≈ 143 000)
  • >1 000 विभिन्न स्रोत IP पते Trilium की दर-सीमा (प्रॉक्सी घुमाने या बॉटनेट की आवश्यकता है)
  • हमलावर और सर्वर के बीच कम नेटवर्क जिटर (LAN या स्थिर क्लाउड कनेक्शन सबसे अच्छा काम करता है)
  • एक उच्च-सटीकता टाइमर (time.perf_counter() Python में नैनोसेकंड रिज़ॉल्यूशन देता है)

प्रूफ ऑफ कॉन्सेप्ट

पूरी तरह से एनोटेटेड Python PoC के लिए poc.py देखें।

PoC क्या करता है इसका त्वरित सारांश:

  1. HMAC हैश के सभी 44 Base64 वर्ण स्थानों पर पुनरावृत्ति करता है।
  2. प्रत्येक स्थान के लिए, Base64 वर्ण सेट (A–Z, a–z, 0–9, +, /, =) में प्रत्येक वर्ण आज़माता है।
  3. प्रत्येक उम्मीदवार के लिए /api/login/sync पर 50 HTTP POST अनुरोध भेजता है और माध्यिका प्रतिक्रिया समय मापता है।
  4. उच्चतम माध्यिका प्रतिक्रिया समय वाले उम्मीदवार को सही वर्ण के रूप में चुनता है।
  5. सभी 44 वर्ण पुनर्प्राप्त करने के बाद, पुनर्प्राप्त हैश के साथ प्रमाणित करता है।

अस्वीकरण: यह PoC केवल शैक्षिक उद्देश्यों और जिम्मेदार सुरक्षा अनुसंधान के लिए प्रदान किया गया है। उन सिस्टमों के विरुद्ध उपयोग न करें जिनके मालिक नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति नहीं है।


मूल कारण

JavaScript के !== (और ===) ऑपरेटर लेक्सिकोग्राफ़िक, जल्दी-निकास तुलना करते हैं। apps/server/src/routes/api/login.ts में कमजोर पंक्ति:

if (expectedHash !== givenHash) {
    return [400, { message: "Sync login credentials are incorrect..." }];
}

जल्दी-निकास व्यवहार प्रति मिलने वाले बाइट में मापने योग्य टाइमिंग अंतर बनाता है:

अनुमान बनाम अपेक्षिततुलना किए गए बाइटसमय
गलत बाइट 01~T
सही बाइट 0, गलत बाइट 12~T + δ
सही बाइट 0–1, गलत बाइट 23~T + 2δ
………
सभी 44 बाइट सही44~T + 43δ

प्रत्येक अतिरिक्त मिलने वाला बाइट थोड़ा अतिरिक्त CPU समय δ खर्च करता है। हज़ारों नमूनों पर, "सही बाइट N" अनुमान के लिए औसत प्रतिक्रिया समय "गलत बाइट N" अनुमान की तुलना में मापने योग्य रूप से अधिक लंबा होता है, जो पूरे HMAC हैश को वर्ण-दर-वर्ण पुनर्प्राप्त करने के लिए पर्याप्त जानकारी लीक करता है।

CVSS स्कोर विवरण

मीट्रिकमानकारण
आधार स्कोर7.4 उच्च
हमला वेक्टरनेटवर्क (N)इंटरनेट पर शोषणीय
हमला जटिलताउच्च (H)कई अनुरोध + स्थिर टाइमिंग आवश्यक
आवश्यक विशेषाधिकारकोई नहीं (N)खाते की आवश्यकता नहीं
उपयोगकर्ता इंटरैक्शनकोई नहीं (N)पीड़ित को कुछ करने की आवश्यकता नहीं
दायराअपरिवर्तित (U)केवल Trilium सर्वर प्रभावित
गोपनीयताउच्च (H)पूर्ण नोट आधार पढ़ने योग्य
अखंडताउच्च (H)हमलावर नोट लिख/संशोधित/हटा सकता है
उपलब्धताकोई नहीं (N)सेवा-से-इनकार घटक नहीं

वेक्टर स्ट्रिंग: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N


प्रभाव

एक सफल शोषण हमलावर को देता है:

  • सभी नोटों तक पूर्ण पढ़ने की पहुँच, जिसमें एन्क्रिप्टेड नोट मेटाडेटा भी शामिल है
  • पूर्ण लेखन पहुँच — हमलावर नोट बना, संशोधित या हटा सकता है
  • स्थायी पहुँच — पुनर्प्राप्त हैश का पुन: उपयोग किया जा सकता है (टाइमस्टैम्प विंडो के भीतर)

यह उन उपयोगकर्ताओं के लिए विशेष रूप से गंभीर है जो अपने Trilium ज्ञानकोष में संवेदनशील व्यक्तिगत डेटा (पासवर्ड, निजी दस्तावेज़, जर्नल प्रविष्टियाँ) संग्रहीत करते हैं।


समाधान

समाधान गैर-स्थिर-समय !== तुलना को Node.js के बिल्ट-इन crypto.timingSafeEqual() से बदल देता है:

पहले (कमजोर):

if (expectedHash !== givenHash) {
    return [400, { message: "Sync login credentials are incorrect..." }];
}

बाद में (सुरक्षित):

import * as crypto from "crypto";
टूल डाउनलोड करें