flawopen.com/Teardowns/cve-2026-61500-rejetto-hfs-predictable-session-key
CVE-2026-61500: Rejetto HFS में अनुमानित सत्र-हस्ताक्षर कुंजी
Rejetto HFS 3.0.0–3.2.0 ने सेशन हस्ताक्षर और लॉगिन के लिए Math.random() से निकले मानों का उपयोग किया। Horizon3 के अनुसार, इनके उजागर होने से सेशन जाली बनाए जा सकते थे; VulnCheck ने 1 अक्टूबर से शोषण गतिविधि देखे जाने की बात कही। 3.2.1 या बाद के संस्करण में अपडेट करें; किसी विशिष्ट पीड़ित के समझौता होने की पुष्टि नहीं है।[1], [4], [5]
कुकी का हस्ताक्षर व्यवस्थापक पास पर लगी मोम की मुहर जैसा है। HFS ने मुहर का रहस्य अनुमानित संख्या-श्रृंखला से बनाया, जबकि लॉगिन प्रक्रिया उसी श्रृंखला की दूसरी संख्याएँ भी दिखाती थी। रहस्य का अनुमान लग जाए तो मुहर की नकल की जा सकती है। पैच Node.js की क्रिप्टोग्राफ़िक यादृच्छिकता इस्तेमाल करता है।[1], [3]
इस पेज के मुख्य शब्द
सत्र-हस्ताक्षर कुंजी- Koa द्वारा सत्र कुकी पर हस्ताक्षर करने और छेड़छाड़ पहचानने के लिए इस्तेमाल किया जाने वाला रहस्य।[1], [3]
Math.random()- सामान्य प्रयोजन का छद्म-यादृच्छिक API; क्रिप्टोग्राफ़िक रहस्य बनाने के लिए उपयुक्त नहीं।[6], [4]
CWE-338- क्रिप्टोग्राफ़िक रूप से कमज़ोर छद्म-यादृच्छिक संख्या जनरेटर का उपयोग; CVE रिकॉर्ड में यही कमजोरी दर्ज है।[1], [6]
PRNG स्थिति- आंतरिक स्थिति जो अगले छद्म-यादृच्छिक आउटपुट तय करती है। एक ही जनरेटर को रहस्य और दिखाई देने वाले मानों के लिए इस्तेमाल करने से उनके संबंध उजागर हो सकते हैं।[4]
खोज का संदर्भ- Horizon3 का कहना है कि Mythos-सहायित बहु-एजेंट शोध प्रणाली ने HFS की इस कमजोरी-श्रृंखला को पहचाना और सत्यापित किया। यह शोधकर्ताओं द्वारा खोज का संदर्भ है; यह Mythos की कमजोरी या किसी वास्तविक HFS इंस्टेंस पर AI के स्वायत्त हमले का प्रमाण नहीं है।[4]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-338
मूल कारण विश्लेषण (Root Cause)
CVE रिकॉर्ड HFS 3.0.0 से 3.2.0 को प्रभावित बताता है और CWE-338 से जोड़ता है। अपस्ट्रीम कमिट 59472e5 में असुरक्षित कोड Koa को [randomId(30)] देता था; randomId() में Math.random() इस्तेमाल होता था। सुधार इसे node:crypto से आयात किए गए [randomBytes(32).toString('base64url')] से बदलता है। उसी कमिट ने सार्वजनिक लॉगिन हैंडशेक पहचानकर्ता को भी Math.random() से randomUUID() में बदला। Horizon3 के अनुसार बिना प्रमाणीकरण उपलब्ध लॉगिन प्रतिक्रियाओं से संबंधित आउटपुट पर्याप्त मात्रा में उजागर हुए, जिनसे V8 PRNG स्थिति और कुकी हस्ताक्षर कुंजी निकाली जा सकती थी। जाली व्यवस्थापक सत्र से HFS की अंतर्निहित प्रशासनिक सुविधाओं के ज़रिए सर्वर पर कोड चलने तक की श्रृंखला संभव थी। यह लेख श्रृंखला का सुरक्षित, उच्च-स्तरीय विवरण देता है; इसमें पुनर्प्राप्ति टूल, अनुरोध या पेलोड नहीं हैं। VulnCheck के अनुसार, Canary Intelligence ने 1 अक्टूबर 2026 को शोषण गतिविधि देखना शुरू किया; इसकी रिपोर्ट 2 अक्टूबर को प्रकाशित हुई। यह टेलीमेट्री किसी प्रभावित HFS इंस्टेंस की पहचान नहीं करती।[1], [3], [4], [5]
हमले का चरण-दर-चरण प्रवाह
कमज़ोरी सत्र की भरोसा-सीमा पार करती है
Horizon3 के अनुसार आउटपुट से PRNG स्थिति पुनः प्राप्त करना संभव था, जिससे सत्र हस्ताक्षर जाली बनाकर व्यवस्थापक पहुँच मिल सकती थी। विस्तृत पुनर्प्राप्ति प्रक्रिया यहाँ नहीं दी गई है।[4]
व्यवस्थापक पहुँच सर्वर पर कोड चलाने तक पहुँच सकती है
Horizon3 जाली सत्र से HFS server_code सुविधा तक की श्रृंखला बताता है। VulnCheck के अनुसार, Canary Intelligence ने 1 अक्टूबर 2026 को शोषण गतिविधि देखना शुरू किया, जिसकी रिपोर्ट 2 अक्टूबर को आई; यह टेलीमेट्री किसी खास इंस्टेंस के समझौता होने का प्रमाण नहीं है।[4], [5]
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
ये अंश वास्तविक अपस्ट्रीम कमिट से लिए गए बदलाव दिखाते हैं। randomBytes(32) Node.js क्रिप्टो मॉड्यूल से कुंजी के लिए 256 बिट देता है; randomUUID() सार्वजनिक लॉगिन पहचानकर्ता का स्रोत बदलता है। सत्र प्रमाणीकरण के रहस्य क्रिप्टोग्राफ़िक स्रोत से और ऐप्लिकेशन PRNG के दिखाई देने वाले आउटपुट से स्वतंत्र होने चाहिए। HFS 3.2.1 या बाद के समर्थित संस्करण पर अपडेट करें; यह अंश सुधार समझाता है, स्वतंत्र पैच नहीं है। यह केवल अपने-आप बने fallback को सुरक्षित करता है: यदि COOKIE_SIGN_KEYS कॉन्फ़िगर है, तो दिए गए हर key को भी अलग से क्रिप्टोग्राफ़िक randomness से बनाएं, गुप्त रखें और उजागर होने पर बदलें।[3], [1]
सोर्स अंश: src/index.ts (cookie हस्ताक्षर कुंजी) और src/api.auth.ts (लॉगिन handshake ID, upstream commit 59472e5)
import { httpStream, randomId } from './misc'
const keys = process.env.COOKIE_SIGN_KEYS?.split(',')
|| [randomId(30)]
export const app = new Koa({ keys })
const sid = Math.random()
import { randomBytes, randomUUID } from 'node:crypto'
const keys = process.env.COOKIE_SIGN_KEYS?.split(',')
|| [randomBytes(32).toString('base64url')]
export const app = new Koa({ keys })
const sid = randomUUID()
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓HFS 3.0.0–3.2.0 को 3.2.1 या बाद के संस्करण पर अपडेट करें; सबसे नए समर्थित स्थिर संस्करण को प्राथमिकता दें।[2], [1]
- ✓Windows होस्ट, कंटेनर, परीक्षण सर्वर और इंटरनेट पर उपलब्ध फ़ाइल शेयर सहित सभी HFS इंस्टेंस की सूची और उनके संस्करण/एक्सपोज़र दर्ज करें।[4]
- ✓यदि तुरंत अपडेट संभव नहीं है, तो अपडेट की योजना बनाते समय पहुँच केवल भरोसेमंद नेटवर्क तक सीमित करें और सार्वजनिक पहुँच हटाएँ। इससे जोखिम घटता है, कमज़ोर कुंजी निर्माण ठीक नहीं होता।[4]
- ✓जो इंस्टेंस असुरक्षित रहने के दौरान सार्वजनिक रूप से पहुँच योग्य था, उसे अपडेट करने के बाद सभी मौजूदा सत्र अमान्य करें और कॉन्फ़िगर किए गए
COOKIE_SIGN_KEYSको बदलें। जाँच में अनधिकृत एडमिन गतिविधि मिले तो एडमिन क्रेडेंशियल भी बदलें। समीक्षा के लिए लॉग सुरक्षित रखें।[1], [4] - ✓देखे गए स्कैन को जाँच का कारण मानें, समझौते का प्रमाण नहीं। लॉग सुरक्षित रखें और अनधिकृत कॉन्फ़िगरेशन बदलाव या कोड निष्पादन की जाँच करें।[5], [4]
- ✓Node.js ऐप्लिकेशन में जाँचें कि
COOKIE_SIGN_KEYSका हर कॉन्फ़िगर किया गया मान अलग से क्रिप्टोग्राफ़िक randomness से बना हो, गुप्त रखा गया हो और उजागर होने पर बदला जाए; सुरक्षित fallback override मानों की जाँच नहीं करता। अन्य secrets के लिएrandomBytes()जैसेnode:cryptoAPI इस्तेमाल करें। हस्ताक्षर कुंजी, रीसेट टोकन या अनुमति मानMath.random()से न बनाएं।[3], [6]