Halo 文件上传漏洞 (CVE-2022-32994)

文章详细介绍了HaloCMS1.5.3版本中的一个高危文件上传漏洞,攻击者可利用此漏洞上传jsp、html文件,通过前端解析执行恶意脚本。漏洞源于/api/admin/attachments/upload接口,未对上传文件类型进行有效验证。修复建议包括更新到最新版本或添加过滤规则。
摘要由CSDN通过智能技术生成

*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.后台页面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Di1KMLz9-1689906769252)(image-20230714142817585.png)]

*2.3 漏洞复现 **

1.进入网站后台后,点击外观—>主题设置—>样式设置 /附件(存在多个上传点,使用接口相同)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6cs13i3B-1689906769253)(image-20230714143030069.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSSABKfW-1689906769253)(image-20230717102741594.png)]

2.由于上传文件被限制,攻击者可以上传 jsp、html 等格式的文件,上传jsp文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jg7rXVZd-1689906769254)(image-20230714143240919.png)]

3.文件内容为1,访问文件,攻击成功(前端解析JavaScript语句,未进行后端处理验证)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1cVr1Gh-1689906769255)(image-20230714143427675.png)]

*三、漏洞分析*

*3.1 技术背景*

Java Spring框架

*3.2 代码分析*

以下代码使用了Spring框架的MultipartFile来处理文件上传,仅仅使用了断言确保文件不为空。fileHandlers.upload方法被调用,但没有对上传的文件类型进行验证。在这里,fileMultipartFile类型的对象,可以通过调用其方法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恶意语句即可攻击成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dRk6TdgB-1689906769255)(image-20230717094231269.png)]

修补后:

存在漏洞版本,上传的文件直接前端解析,未经过后端处理,修补后的版本,照样可以上传jsp等文件,但后端进行了代码的处理,不会在前端直接解析,防止了xss攻击

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GU2pU4jv-1689906769256)(image-20230717102438415.png)]

*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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Slmpleexe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值