Halo 服务器请求伪造漏洞 (CVE-2022-32995)
*一、漏洞概述 **
*1.1 漏洞简介*
·漏洞名称:Halo 服务器请求伪造漏洞
·漏洞编号:CVE-2022-32995
·漏洞类型:服务器请求伪造漏洞
·漏洞威胁等级:超危
·影响范围:Halo CMS 1.5.3
·利用条件:默认配置
*1.2 组件描述*
Halo是个人开发者的一套个人博客系统。
*1.3 漏洞描述*
Halo CMS 1.5.3 版本存在安全漏洞,该漏洞源于模板远程下载功能存在服务器请求伪造问题。
*二、漏洞复现*
*2.1 应用协议*
http
*2.2 环境搭建*
1.下载jar包到本地,在jdk目录下执行java.exe -jar halo.jar
*2.3 漏洞复现 **
1.分别点击主题—>安装–>远程地址,在地址栏中输入url并跟上任意压缩包名(xxx.zip)
2.该漏洞为通过远程下载功能来执行SSRF,可以检测主机端口是否存活,若出现“主题配置文件缺失!请确认后重试。”则该主机端口存活
3.若出现“Internal Server Error”,标识主机端口不存在
*三、漏洞分析*
*3.1 技术背景*
\
*3.2 代码分析*
代码对检测的url未作任何处理,导致用户可以任意的进行SSRF
@Override
public ThemeProperty fetch(Object source) {
final var themeZipLink = source.toString();
// build http request
final var request = HttpRequest.newBuilder()
.uri(URI.create(themeZipLink))
.timeout(Duration.ofMinutes(2))
.GET()
.build();
try {
// request from remote
log.info("Fetching theme from {}", themeZipLink);
var inputStreamResponse =
httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
var inputStream = inputStreamResponse.body();
// unzip zip archive
try (var zipInputStream = new ZipInputStream(inputStream)) {
var tempDirectory = FileUtils.createTempDirectory();
log.info("Unzipping theme {} to {}", themeZipLink, tempDirectory);
unzip(zipInputStream, tempDirectory);
// resolve theme property
return ThemePropertyScanner.INSTANCE.fetchThemeProperty(tempDirectory)
.orElseThrow(() -> new ThemePropertyMissingException("主题配置文件缺失!请确认后重试。"));
}
} catch (InterruptedException | IOException e) {
throw new RuntimeException("主题拉取失败!(" + e.getMessage() + ")", e);
}
}
}
*3.3 流量分析 **
*3.4 绕过方式*
\
*四、漏洞检测*
*4.1 组件版本自检*
以下版本受该漏洞影响:v 1.5.3
目前最高版本:2.8.0
*4.2 研判建议 **
在流量中观察是否有大量的请求,其中请求体带有ip/xx.zip
*参考链接*
源码下载url:https://github.com/halo-dev/halo/releases/download/v1.5.3/halo-1.5.3.jar