
PaperCut NG में प्रमाणीकरण समय साइड-चैनल के माध्यम से उपयोगकर्ता नाम की पहचान
| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2026-8794 |
| उत्पाद | PaperCut NG |
| प्रभावित संस्करण | 25.0.11 (Build 75758) और इससे पहले |
| CWE | CWE-208 — प्रेक्षणीय समय विसंगति |
| CVSS स्कोर | 3.7 (निम्न) — स्टैंडअलोन; CVE-2026-8793 के साथ श्रृंखलित होने पर बढ़ जाता है |
| शोधकर्ता | Vivien LEBAS (@Hazaz) |
| रिपोर्ट किया गया | मई 2026 |
| स्थिति | पैच किया गया — PaperCut NG 26.0.3 |
PaperCut NG का प्रमाणीकरण एंडपॉइंट मौजूदा और अस्तित्वहीन खातों के विरुद्ध लॉगिन प्रयासों के बीच एक मापने योग्य समय विसंगति प्रदर्शित करता है। यह विसंगति — केवल मिलान वाला खाता मिलने पर bcrypt पासवर्ड हैशिंग किए जाने के कारण उत्पन्न होती है — एक बिना प्रमाणीकरण वाले हमलावर को HTTP प्रतिक्रिया समय मापकर विश्वसनीय रूप से यह निर्धारित करने की अनुमति देती है कि दिया गया उपयोगकर्तानाम सिस्टम में मौजूद है या नहीं।
जब CVE-2026-8793 (ब्रूट-फोर्स सुरक्षा का अभाव) के साथ संयोजित किया जाता है, तो यह भेद्यता एक पूर्ण क्रेडेंशियल-समझौता हमला श्रृंखला सक्षम बनाती है: पहले मान्य उपयोगकर्तानामों की गणना करें, फिर लॉकआउट के किसी भी जोखिम के बिना असीमित लक्षित पासवर्ड अनुमान लगाएं।
समय विसंगति एक क्लासिक कार्यान्वयन पैटर्न से उत्पन्न होती है: एप्लिकेशन केवल तब bcrypt तुलना को लागू करता है जब डेटाबेस में प्रस्तुत उपयोगकर्तानाम से मिलान करने वाला एक खाता पाया जाता है। अस्तित्वहीन खातों के लिए, प्रमाणीकरण दिनचर्या bcrypt को कॉल करने से पहले ही समाप्त हो जाती है — जिसके परिणामस्वरूप मापने योग्य रूप से कम प्रतिक्रिया समय होता है।
Valid username: DB lookup (found) → bcrypt comparison → failure response ~2.1s avg
Invalid username: DB lookup (not found) → immediate failure response ~0.2s avg
यह पैटर्न अच्छी तरह से प्रलेखित है (CWE-208 देखें)। मानक उपचारात्मक उपाय यह है कि खाता मौजूद न होने पर भी एक डमी bcrypt तुलना की जाए, जिससे दोनों कोड पथों में प्रतिक्रिया समय बराबर हो जाए।
नियंत्रित परिस्थितियों में PaperCut NG लॉगिन एंडपॉइंट के विरुद्ध प्रमाणीकरण प्रयास किए गए:
curl जिसमें --write-out "%{time_total}" है, सभी मामलों में जानबूझकर गलत पासवर्डदोनों वितरण शून्य ओवरलैप दिखाते हैं, जिससे मध्यम नेटवर्क जिटर पर भी गणना विश्वसनीय हो जाती है।
# Measure response time for an existing account (wrong password)
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<target>:9191/app" \
-H "Origin: http://<target>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=admin&inputPassword=wrongpassword"
# Output: ~2.1s
# Measure response time for a non-existent account
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<target>:9191/app" \
-H "Origin: http://<target>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=zz_doesnotexist_zz&inputPassword=wrongpassword"
# Output: ~0.2s
यह खोज सबसे अधिक प्रभावशाली तब होती है जब इसे दो-चरणीय हमले के पहले चरण के रूप में उपयोग किया जाता है:
चरण 1 (CVE-2026-8794, यह खोज) — प्रमाणीकरण प्रतिक्रियाओं के समय को मापकर मान्य PaperCut NG खाता नामों की एक सूची बनाएं। कॉर्पोरेट वातावरण में, सार्वजनिक स्रोतों (LinkedIn, कंपनी वेबसाइट, ईमेल फुटर) से प्राप्त firstname.lastname संयोजनों की एक छोटी वर्डलिस्ट अक्सर पर्याप्त होती है।
चरण 2 (CVE-2026-8793) — पुष्टि किए गए मान्य खातों के विरुद्ध असीमित पासवर्ड प्रयास सबमिट करें। दर-सीमा (रेट-लिमिटिंग) या लॉकआउट की अनुपस्थिति का अर्थ है कि कोई भी क्रेडेंशियल-स्टफिंग या पासवर्ड-स्प्रेइंग हमला पूरी गति से पूरी तरह ऑनलाइन किया जा सकता है।
TCP/9191 तक नेटवर्क पहुंच रखने वाला एक बिना प्रमाणीकरण वाला हमलावर निम्न कार्य कर सकता है:
विशिष्ट कॉर्पोरेट परिनियोजनों में, PaperCut उपयोगकर्तानाम Active Directory खातों को प्रतिबिंबित करते हैं। इसलिए एक पुष्टि किया गया मान्य PaperCut उपयोगकर्तानाम एक पुष्टि किया गया मान्य डोमेन खाता नाम भी होता है, जो PaperCut से परे टोही (reconnaissance) मूल्य को बढ़ाता है।
प्रशासकों के लिए (अंतरिम शमन उपाय):
विक्रेता के लिए:
जब प्रस्तुत उपयोगकर्तानाम किसी भी खाते से मेल नहीं खाता है, तो एक स्थिर-समय डमी bcrypt तुलना करें, ताकि खाता मौजूद हो या नहीं, प्रतिक्रिया समय बराबर रहे:
# Pseudocode — constant-time authentication pattern
user = db.find_user(username)
if user:
valid = bcrypt.verify(password, user.password_hash)
else:
bcrypt.verify(password, DUMMY_HASH) # always run, result discarded
valid = False
यह प्रमाणीकरण प्रवाहों में CWE-208 को कम करने के लिए एक सुस्थापित पैटर्न है।
| दिनांक | घटना |
|---|---|
| 9 मई, 2026 | PaperCut सुरक्षा टीम को प्रारंभिक रिपोर्ट प्रस्तुत की गई |
जिम्मेदार प्रकटीकरण सिद्धांतों के अनुसार प्रकट किया गया। सार्वजनिक रिलीज़ से पहले पूर्ण तकनीकी विवरण PaperCut सुरक्षा टीम के साथ साझा किए गए थे।
शोधकर्ता: Vivien LEBAS — @Hazaz
| स्थिति | न्यूनतम (s) | अधिकतम (s) | माध्य (s) | मानक विचलन |
|---|
मौजूदा खाता (admin) | 2.08 | 2.19 | 2.13 | 0.031 |
अस्तित्वहीन खाता (zz_doesnotexist_zz) | 0.18 | 0.24 | 0.21 | 0.018 |
| अंतर | ~1.92s |
| 10 मई, 2026 |
| स्वीकृति प्राप्त हुई |
| मई 2026 | PaperCut (CNA) द्वारा CVE-2026-8794 निर्दिष्ट किया गया |
| अगस्त 2026 | पैच जारी किया गया — PaperCut NG 26.0.3 |
| अगस्त 2026 | विक्रेता के साथ सार्वजनिक प्रकटीकरण का समन्वय किया गया |