ChatGPT-Next-Web漏洞利用分析(CVE-2023-49785)

1. 漏洞介绍

​ 日常网上冲浪,突然粗看以为是有关Chat-GPT的CVE披露出来了,但是仔细一看原来是ChatGPT-Next-Web的漏洞。漏洞描述大致如下:(如果有自己搭建了还没更新的速速修复升级防止被人利用,2.11.3已经出来了

NextChat,也称为 ChatGPT-Next-Web,是与 ChatGPT 一起使用的跨平台聊天用户界面。 2.11.2 及之前的版本容易受到服务器端请求伪造和跨站点脚本攻击的影响。2024年3月,互联网上披露CVE-2023-49785,攻击者可在无需登陆的情况下构造恶意请求造成SSRF,造成敏感信息泄漏等。

2. 漏洞分析

​ 定位到漏洞代码:app/api/cors/[...path]/route.ts

​ 也就是大致如下内容:

import { NextRequest, NextResponse } from "next/server";async function handle(req: NextRequest,{ params }: { params: { path: string[] } },
) {if (req.method === "OPTIONS") {return NextResponse.json({ body: "OK" }, { status: 200 });}const [protocol, ...subpath] = params.path;const targetUrl = `${protocol}://${subpath.join("/")}`;const method = req.headers.get("method") ?? undefined;const shouldNotHaveBody = ["get", "head"].includes(method?.toLowerCase() ?? "",);const fetchOptions: RequestInit = {headers: {authorization: req.headers.get("authorization") ?? "",},body: shouldNotHaveBody ? null : req.body,method,// @ts-ignoreduplex: "half",};const fetchResult = await fetch(targetUrl, fetchOptions);console.log("[Any Proxy]", targetUrl, {status: fetchResult.status,statusText: fetchResult.statusText,});return fetchResult;
}

​ 在这段代码中,这里没有做任何的安全防护。params.path 是通过请求参数传入的,这意味着用户可以控制请求的路径部分。这个路径部分会被直接拼接到一个新的 URL 中,并在后续的代码中被用于发起请求,以绕过访问控制、访问内部系统或执行其他攻击。

​ 举个例子,当你访问 /api/cors/https/baidu.com 时,请求将被路由到这段代码中。在这里,protocol 将被设置为 httpssubpath 将被设置为 ['baidu.com']。然后,这两部分将被拼接成 https://baidu.com,作为目标 URL。接下来,根据代码的逻辑,将会使用 fetch 发起一个对 https://baidu.com 的请求。这个请求的方法和请求体等信息将根据原始请求中的信息进行配置,然后将响应返回给客户端。

​ 我们验证一下,果然存在。

image-20240315211855871

​ 至于披露着所说的反射型XSS,则完全是因为这里是用的fetch发包,fetch 方法也支持 data 协议,且对后续的参数没有过滤限制导致的,所以我们通过参数拼接如下即可实现:

/api/cors/data:text%2fhtml;base64,PHNjcmlwdD5hbGVydCgiQ1ZFLTIwMjMtNDk3ODUiKTwvc2NyaXB0Pg==%23

image-20240315213402621

3. 总结

​ 没想到一个64.5k star 的项目之前居然对SSRF一点防护都没有做。

/api/cors 端点作为一个开放代理的设计,允许未经身份验证的用户通过它发送任意的 HTTP 请求。这个端点似乎是为了支持将客户端聊天数据保存到 WebDAV 服务器而添加的。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

​ 我查看了最新的源代码:

image-20240315215107502

​ 具体的官方修复思路如下:

  1. **移除开放代理端点:**最终修复方案中,移除了原始的开放代理端点/api/cors
  2. **替换为特定用途的端点:**取而代之的是添加了两个新的端点/api/upstash/api/webdav,这些端点具有特定的用途,分别用于与 Upstash 和 WebDAV 服务进行集成。这种替换的方式限制了端点的功能范围,并提供了更专门化的功能,有助于减少系统的安全风险。
  3. 增加安全验证和限制:
    1. /api/upstash
      1. **限制目标URL:**修复代码首先通过检查请求参数中的endpoint来限制目标URL。它要求目标URL必须是以.upstash.io结尾的有效URL,这样就限制了请求只能发送到特定的Upstash服务。
      2. **限制请求方法:**修复代码还对请求中的操作类型进行了限制。它只允许getset两种操作类型的请求,如果请求的操作类型不是这两种之一,则会返回403 Forbidden响应。
    2. /api/webdav
      1. 请求方法限制: 修复代码只允许特定的HTTP请求方法,包括MKCOLGETPUT。对于其他不允许的请求方法,如POST等,会返回403 Forbidden响应。
      2. 目标路径验证: 修复代码对于不同的请求方法,会对目标路径进行不同的验证:
        • 对于MKCOL请求,只允许请求目标路径为指定的folder,如果请求的目标路径不是以指定的folder结尾,则返回403 Forbidden响应。
        • 对于GET请求,只允许请求目标路径为指定的fileName,如果请求的目标路径不是以指定的fileName结尾,则返回403 Forbidden响应。
        • 对于PUT请求,同样只允许请求目标路径为指定的fileName,如果请求的目标路径不是以指定的fileName结尾,则返回403 Forbidden响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象 01:Java 面向对象相关内容

前言 记录时间 [2024-05-07] 基础篇文章简摘: Java 笔记 01:Java 概述,MarkDown 常用语法整理 Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad / JDK 安装及环境配置,编写第一个 Java 程序 Java 笔记 11…

个人IP打造孵化运营产业链商业计划书

【干货资料持续更新,以防走丢】 个人IP打造孵化运营产业链商业计划书 部分资料预览 资料部分是网络整理,仅供学习参考。 PPT共90页(完整资料包含以下内容) 目录 个人IP运营方案: 1. 个人IP定位与构建 1.1 人格画像构…

Terraform输入变量

使用输入变量可以在创建基础设施资源时动态传入值,如果把Terraform代码看作是一个函数,那么输入变量都是函数参数。 Terraform输入变量使用variable块进行定义,如下示例: variable "image_id" {type string # 变量类…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构:方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

基于FPGA的累加器及数码管显示VHDL代码Quartus仿真

名称:基于FPGA的累加器及数码管显示VHDL代码Quartus仿真(文末获取) 软件:Quartus 语言:VHDL 代码功能: 累加器及数码管显示 1、可以通过按键输入1~9 2、数字输入后进行累加,将累加结果显示…

【计算机科学速成课】笔记三

文章目录 17.集成电路真空管时代晶体管时代集成电路时代印刷电路板时代光刻时代 17.集成电路 Over the past six episodes, we delved into software, 过去 6 集我们聊了软件 \N 从早期编程方式到现代软件工程 from early programming efforts to modern software engineerin…

部署YUM仓库以及NFS共享服务

YUM仓库部署 一.YUM概述 YUM仓库源是一种软件包管理工具,用于在Linux系统上安装、更新和删除软件包。YUM仓库源包含了软件包的元数据信息和实际的软件包文件。用户可以通过配置YUM仓库源,从中下载和安装软件包。 常见的YUM仓库源包括: 本…

截图工具Snipaste:不仅仅是截图,更是效率的提升

在数字时代,截图工具已成为我们日常工作和生活中不可或缺的一部分。无论是用于工作汇报、学习笔记,还是日常沟通,一款好用的截图工具都能大大提升我们的效率。今天,我要向大家推荐一款功能强大且易于使用的截图软件——Snipaste。…

强大的禄得可转债自定义因子轮动系统完成,可转债三低为例子

经过几天的测试终于完成了可转债自定义因子轮动,超过1000行的源代码 我提供了服务器的数据支持自动api下载,我给大家维护数据 网页 http://120.78.132.143:8023/ 录得数据支持http://120.78.132.143:8023/lude_data_app api数据支持,我提供…

Vulnhub项目:ICA: 1

1、靶机介绍 靶机地址:ICA: 1 ~ VulnHub 2、渗透过程 首先,部署好靶机后,进行探测,发现靶机ip和本机ip,靶机ip156,本机ip146。 然后查看靶机ip有哪些端口,nmap一下。 出现22、80、3306端口&a…

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景API接口接口代码请求失败原因排查调通效果 常见返回类型相关文章 …

leetcode刷题:三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

mac android studio 首次无法连接安卓手机

缺少安卓手机需要的驱动,通过安装驱动解决 macport install android-platform-tools 在macOS上安装Android平台工具,可以使用Homebrew或者MacPorts。以下是使用MacPorts安装Android平台工具的步骤: 打开终端。 输入以下命令来安装Android平…

并行执行的概念—— 《OceanBase 并行执行》系列 一

From 产品经理: 这是一份姗姗来迟的关于OceanBase并行执行的系统化产品文档。 自2019年起,并行执行功能已被许多客户应用于多种场景之中,其重要性日益凸显。然而,遗憾的是,我们始终未能提供一份详尽的用户使用文档&…

initramfs及rpm/dracut操作

一、背景 更新bundle包后发现系统异常。 定位发现驱动升级不成功,内核启动后加载的还是更新前的旧驱动。但等内核启动完成后,卸载旧驱动手动insmod新驱动,是可以加载成功的。 驱动的安装目录在/lib/modules/$KERNELVERSION/extra目录下。 …

VMware下Ubuntu的安装教程

文章目录 一、Ubuntu如何下载1.下载官方地址https://ubuntu.com/2.点选Ubuntu服务器版本3.点击下载Ubuntu服务器版本iso镜像二、VMware安装Ubuntu服务器系统1.创建虚拟机2.选择下载好的Ubuntu服务器镜像3.创建安装完成三、Ubuntu Server如何设置1.Ubuntu Server没有中文所以全都…

突破AI迷雾:英特尔携手星环科技打造向量数据库革新方案,直降大模型幻觉

去年爆火的大模型,正在从百模大战走向千行百业落地应用。不过行业数据规模有限,企业数据隐私安全的要求等等因素,都让行业大模型的准确率面临挑战。近期发布的《CSDN AI 开发者生态报告》数据显示,“缺乏数据/数据质量问题”在大模…

CSS优先级的大小计算方式

CSS优先级是用来确定多个CSS规则应用于同一个元素时的顺序。计算CSS优先级遵循以下规则: 在CSS规则中使用的选择器越具体,优先级越高。选择器的具体性是通过选择器的组成部分进行计算的。 ID选择器比属性选择器和类选择器具有更高的优先级。类选择器和属…

Pycharm远程同步的mapping与sync

用Pycharm进行项目远程部署的时候会遇到两个同步文件,一个是点击 tools—>deployment—>configration——>mapping 一个是链接虚拟环境的时候会有一个sync,那么这两种同步有什么区别呢? 区别就是,2包括1,要用…

常见错误以及如何纠正它们

团队和关键结果目标 (OKR) 之间的关系是深刻且至关重要的。总而言之,一切都应该是相互关联的。正如《团队的智慧》一书中所强调的: 在团队中,没有什么比每个成员对共同目标和一组相关绩效目标的承诺更重要的了,而团队对此负有共同…