专栏名称: 衡阳信安
船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!
目录
相关文章推荐
英文悦读  ·  马斯克给自家大模型取名Grok,妙在哪里? ·  昨天  
每日英语  ·  中国文化 | 打树花(Dashuhua) ·  19 小时前  
恶魔奶爸  ·  美容院,毒害了多少中国女人! ·  昨天  
清晨朗读会  ·  渊源直播 ·  2 天前  
51好读  ›  专栏  ›  衡阳信安

Hoverfly /api/v2/simulation 存在任意文件读取(CVE-2024-45388)

衡阳信安  · 公众号  ·  · 2024-09-10 00:00

正文

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为随机字符串

根据以上结果,执行成功了。







请到「今天看啥」查看全文