0x01 组件介绍
Hoverfly 是一个轻量的 API 服务模拟工具(有时候也被称作服务虚拟化工具)。使用 Hoverfly,您可以创建应用程序依赖的 API 的真实模拟。
-
- 创建可重复使用的虚拟服务,在 CI 环境中替代缓慢和不稳定的外部或第三方服务
-
- 模拟网络延迟,随机故障或速率限制以测试边缘情况
-
- 使用多种编程语言扩展和自定义, 包括 Go,Java,Javascript,Python
-
- 导出,共享,编辑和导入 API 模拟数据
-
- 提供方便易用的命令行界面 hoverctl
-
- Java 和 Python 的语言绑定
-
- REST API
-
- 使用 Go 编写,轻巧,高性能,可在任何地方运行
-
- 提供多种运行模式,可以对 HTTP 响应进行记录,回放,修改或合成。
fofa语法:title=="Hoverfly Dashboard"
0x02 漏洞描述
2024年9月,官方发布新版本修复了CVE-2024-45388,Hoverfly /api/v2/simulation 端点,POST 处理程序允许用户从用户指定文件的内容创建新的模拟视图,然而,这一功能可能被攻击者利用来读取 Hoverfly 服务器上的任意文件。尽管代码禁止指定绝对路径,但攻击者可以通过使用
../
段来逃离
hf.Cfg.ResponsesBodyFilesPath
基本路径,从而访问任何任意文件。这个问题是通过在路径表达式中使用未受控数据发现的 CodeQL 查询(针对 python)。建议用户确保最终路径(
filepath.Join(hf.Cfg.ResponsesBodyFilesPath, filePath)
)包含在预期的基本路径(
filepath.Join(hf.Cfg.ResponsesBodyFilesPath, "/")
)内。
0x03 影响版本
Hoverfly < v1.10.3
0x04 环境搭建
0x01 下载
目前这个环境可以使用docker的话有现成的,咱们直接用官方搭建的,版本还是挺多选择的,我们选择个最近的版本1.10.2的版本,一键搭建!!
docker run -d -p 8888:8888 -p 8500:8500 spectolabs/hoverfly:v1.10.2 #启动环境
docker ps # 验证下环境是否启动成功
出现以下相关界面即为成功
0x02 访问环境
按照第一步安装的的环境,在浏览器中打开http://192.168.19.157:8888,验证是否成功,出现以下即为成功
0x05 漏洞原理
其功能点,/api/v2/simulation 端点,允许用户从用户指定文件的内容创建新的模拟视图,可以滥用此功能从 Hoverfly 服务器读取任意文件。尽管代码禁止指定绝对路径,但攻击者可以通过使用
../
段来逃离
hf.Cfg.ResponsesBodyFilesPath
基本路径,从而访问任何任意文件。这个问题是通过在路径表达式中使用未受控数据发现的 CodeQL 查询(针对 python)。建议用户确保最终路径(
filepath.Join(hf.Cfg.ResponsesBodyFilesPath, filePath)
)包含在预期的基本路径(
filepath.Join(hf.Cfg.ResponsesBodyFilesPath, "/")
)内。
0x06 漏洞验证
1.需要发送特定payload,根据官方给的payload
{"data":{"pairs":[{"request":{},"response": {"bodyFile": "../../../../../etc/passwd"}} ]},"meta":{"schemaVersion":"v5.2"}}
但从以上执行结果可以看到,响应的内容并不是我们所预想的一样,根据响应的内容来看报出来的警告:WARNING: data.pairs[0] is not added due to a conflict with the existing simulation(警告:由于与现有模拟冲突,未添加 data.pairs[0])
因此我们需要每次执行payalod时,需要更换pairs为随机字符串
根据以上结果,执行成功了。