goshs: goshs PUT अपलोड में एक प्रतिबंधित निर्देशिका ('पाथ ट्रैवर्सल') में पाथनाम की अनुचित सीमा
प्लेटफ़ॉर्म
go
कॉम्पोनेन्ट
github.com/patrickhener/goshs
ठीक किया गया
1.1.5-0.20260401172448-237f3af891a9
### सारांश * PUT अपलोड में कोई पाथ सैनिटाइजेशन नहीं है | `httpserver/updown.go:20-69` यह खोज डिफ़ॉल्ट कॉन्फ़िगरेशन को प्रभावित करती है, किसी भी ध्वज या प्रमाणीकरण की आवश्यकता नहीं है। ### विवरण **फ़ाइल:** `httpserver/updown.go:20-69` **ट्रिगर:** `PUT /<path>` (server.go:57-59 सीधे `put()` पर रूट करता है) हैंडलर सेव पाथ बनाने के लिए `req.URL.Path` रॉ का उपयोग करता है। कोई `filepath.Clean` नहीं, कोई `..` जांच नहीं, कोई वेब रूट कंटेनमेंट नहीं। ```go func (fs *FileServer) put(w http.ResponseWriter, req *http.Request) { upath := req.URL.Path // अनसैनिटाइज्ड filename := strings.Split(upath, "/") outName := filename[len(filename)-1] targetpath := strings.Split(upath, "/") targetpath = targetpath[:len(targetpath)-1] target := strings.Join(targetpath, "/") savepath := fmt.Sprintf("%s%s/%s", fs.UploadFolder, target, outName) // ... os.Create(savepath) // आर्बिट्रेरी पाथ राइट ``` `UploadFolder` डिफ़ॉल्ट रूप से `Webroot` (main.go:386-388) है। पाथ प्योर स्ट्रिंग कॉन्कैटिनेशन है जिसमें कोई वैलिडेशन नहीं है। **इम्पैक्ट:** फ़ाइल सिस्टम पर कहीं भी अनऑथेंटिकेटेड आर्बिट्रेरी फ़ाइल राइट। **PoCs:** ```bash #!/usr/bin/env bash # राइट एन आर्बिट्रेरी
कैसे ठीक करें
कोई आधिकारिक पैच उपलब्ध नहीं है। वैकल्पिक समाधान खोजें या अपडेट की निगरानी करें।
अपनी निर्भरताओं की स्वचालित निगरानी करें
जब नई कमज़ोरियाँ आपके प्रोजेक्ट को प्रभावित करें तो अलर्ट पाएं।
मुफ़्त शुरू करें