*Halo 文件上传漏洞 (CVE-2022-32994)*
*一、漏洞概述 **
*1.1 漏洞简介*
·漏洞名称:Halo 文件上传漏洞
·漏洞编号:CVE-2022-32994)
·漏洞类型:文件上传漏洞
·漏洞威胁等级:高危
·影响范围:Halo CMS 1.5.3以下
·利用条件:使用jar包时jdk >=v 11
*1.2 组件描述*
Halo是个人开发者的一套java的个人博客系统。
*1.3 漏洞描述*
Halo CMS 1.5.3 版本存在安全漏洞,该漏洞源于 /api/admin/attachments/upload 页面存在文件上传问题。
*二、漏洞复现*
*2.1 应用协议*
http
*2.2 环境搭建*
1.下载jar包,地址如下https://github.com/halo-dev/halo/releases/download/v1.5.3/halo-1.5.3.jar
2.jdk版本>=v 11
3.cmd java -jar启动
4.根据提示建立数据库信息等
5.后台页面:
*2.3 漏洞复现 **
1.进入网站后台后,点击外观—>主题设置—>样式设置 /附件(存在多个上传点,使用接口相同)
2.由于上传文件被限制,攻击者可以上传 jsp、html 等格式的文件,上传jsp文件
3.文件内容为1,访问文件,攻击成功(前端解析JavaScript语句,未进行后端处理验证)
*三、漏洞分析*
*3.1 技术背景*
Java Spring框架
*3.2 代码分析*
以下代码使用了Spring框架的MultipartFile
来处理文件上传,仅仅使用了断言确保文件不为空。fileHandlers.upload
方法被调用,但没有对上传的文件类型进行验证。在这里,file
是MultipartFile
类型的对象,可以通过调用其方法getContentType()
来获取文件的 MIME 类型。所以存在任意文件上传漏洞。不过仅限了限制,只能通过 jsp、html 等格式的文件进行上传。
public Attachment upload(MultipartFile file) {
Assert.notNull(file, "Multipart file must not be null");
AttachmentType attachmentType = getAttachmentType();
log.debug("Starting uploading... type: [{}], file: [{}]", attachmentType,
file.getOriginalFilename());
// Upload file
UploadResult uploadResult = fileHandlers.upload(file, attachmentType);
log.debug("Attachment type: [{}]", attachmentType);
log.debug("Upload result: [{}]", uploadResult);
// Build attachment
Attachment attachment = new Attachment();
attachment.setName(uploadResult.getFilename());
// Convert separator
attachment.setPath(HaloUtils.changeFileSeparatorToUrlSeparator(uploadResult.getFilePath()));
attachment.setFileKey(uploadResult.getKey());
attachment.setThumbPath(
HaloUtils.changeFileSeparatorToUrlSeparator(uploadResult.getThumbPath()));
attachment.setMediaType(uploadResult.getMediaType().toString());
attachment.setSuffix(uploadResult.getSuffix());
attachment.setWidth(uploadResult.getWidth());
attachment.setHeight(uploadResult.getHeight());
attachment.setSize(uploadResult.getSize());
attachment.setType(attachmentType);
log.debug("Creating attachment: [{}]", attachment);
// Create and return
return create(attachment);
}
*3.3 流量分析 **
攻击流量无特殊点,该功能点为上传主题功能,默认可以上传jsp、html格式,任意写入javascript恶意语句即可攻击成功
修补后:
存在漏洞版本,上传的文件直接前端解析,未经过后端处理,修补后的版本,照样可以上传jsp等文件,但后端进行了代码的处理,不会在前端直接解析,防止了xss攻击
*3.4 绕过方式*
\
*四、漏洞检测*
*4.1 组件版本自检*
以下版本受该漏洞影响:1.5.3以下版本
目前最高版本:2.7.0
*4.2 漏洞触发前提自检*
*4.3 漏洞检测规则、插件编写思路*
以下为该漏洞请求包特征
1.通过uri:“/api/admin/attachments/upload”
2.post body部分存在恶意payload
*4.4 研判建议 **
响应体body部分存在path字段,有用户上传文件的路径,访问该路径即可观察页面是否攻击成功
*五、防范建议*
*5.1 官方修复建议*
https://github.com/zongdeiqianxing/cve-reports/issues/1
*5.2 临时修复建议*
写入过滤规则黑名单等,禁用敏感语句script等
六、*参考链接*
源码下载url:
https://github.com/halo-dev/halo/releases/download/v1.5.3/halo-1.5.3.jar