MeterSphere allow users to upload file, but not check the file name, may lead to upload file to any path if the file name in upload request is falsified.
Metersphere's <code>FileUtils.java</code> didn't check the filePath.
public static void createFile(String filePath, byte[] fileBytes) {
File file = new File(filePath);
if (file.exists()) {
file.delete();
}
try {
File dir = file.getParentFile();
if (!dir.exists()) {
dir.mkdirs();
}
file.createNewFile();
} catch (Exception e) {
LogUtil.error(e);
}
try (InputStream in = new ByteArrayInputStream(fileBytes); OutputStream out = new FileOutputStream(file)) {
final int MAX = 4096;
byte[] buf = new byte[MAX];
for (int bytesRead = in.read(buf, 0, MAX); bytesRead != -1; bytesRead = in.read(buf, 0, MAX)) {
out.write(buf, 0, bytesRead);
}
} catch (IOException e) {
LogUtil.error(e);
MSException.throwException(Translator.get("upload_fail"));
}
}
The vulnerability has been fixed in v2.5.1.
https://github.com/metersphere/metersphere/commit/3a890eeeb8a6b0887927c876a73bdb3a99a82138 : add validation for file name.
It is recommended to upgrade the version to v2.5.1.
If you have any questions or comments about this advisory, please open an issue.
{ "nvd_published_at": "2022-12-29T19:15:00Z", "severity": "HIGH", "cwe_ids": [ "CWE-22" ], "github_reviewed": true, "github_reviewed_at": "2022-12-30T18:03:47Z" }