ToB企服应用市场:ToB评测及商务社交产业平台

标题: ChatGPT-Next-Web毛病利用分析(CVE-2023-49785) [打印本页]

作者: 络腮胡菲菲    时间: 2024-5-19 09:21
标题: 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:
也就是大致如下内容:
  1. import { NextRequest, NextResponse } from "next/server";
  2. async function handle(
  3.  req: NextRequest,
  4.   { params }: { params: { path: string[] } },
  5. ) {
  6.  if (req.method === "OPTIONS") {
  7.    return NextResponse.json({ body: "OK" }, { status: 200 });
  8.   }
  9.  const [protocol, ...subpath] = params.path;
  10.  const targetUrl = `${protocol}://${subpath.join("/")}`;
  11.  const method = req.headers.get("method") ?? undefined;
  12.  const shouldNotHaveBody = ["get", "head"].includes(
  13.    method?.toLowerCase() ?? "",
  14.   );
  15.  const fetchOptions: RequestInit = {
  16.    headers: {
  17.      authorization: req.headers.get("authorization") ?? "",
  18.    },
  19.    body: shouldNotHaveBody ? null : req.body,
  20.    method,
  21.    // @ts-ignore
  22.    duplex: "half",
  23.   };
  24.  const fetchResult = await fetch(targetUrl, fetchOptions);
  25.  console.log("[Any Proxy]", targetUrl, {
  26.    status: fetchResult.status,
  27.    statusText: fetchResult.statusText,
  28.   });
  29.  return fetchResult;
  30. }
复制代码
在这段代码中,这里没有做任何的安全防护。params.path 是通过请求参数传入的,这意味着用户可以控制请求的路径部门。这个路径部门会被直接拼接到一个新的 URL 中,并在后续的代码中被用于发起请求,以绕过访问控制、访问内部系统或执行其他攻击。
举个例子,当你访问 /api/cors/https/baidu.com 时,请求将被路由到这段代码中。在这里,protocol 将被设置为 https,subpath 将被设置为 ['baidu.com']。然后,这两部门将被拼接成 https://baidu.com,作为目的 URL。接下来,根据代码的逻辑,将会利用 fetch 发起一个对 https://baidu.com 的请求。这个请求的方法和请求体等信息将根据原始请求中的信息举行设置,然后将相应返回给客户端。
我们验证一下,果然存在。
[img=720,288.31168831168833]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405071414807.png[/img]

至于披露着所说的反射型XSS,则完满是因为这里是用的fetch发包,fetch方法也支持 data 协议,且对后续的参数没有过滤限定导致的,所以我们通过参数拼接如下即可实现:
  1. /api/cors/data:text%2fhtml;base64,PHNjcmlwdD5hbGVydCgiQ1ZFLTIwMjMtNDk3ODUiKTwvc2NyaXB0Pg==%23
复制代码
[img=720,231.53799392097264]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405071414809.png[/img]

3. 总结

没想到一个64.5k star 的项目之前居然对SSRF一点防护都没有做。
/api/cors 端点作为一个开放署理的设计,允许未经身份验证的用户通过它发送恣意的 HTTP 请求。这个端点似乎是为了支持将客户端聊天数据保存到 WebDAV 服务器而添加的。
【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习发展路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC毛病分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权势巨子CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂口试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
我查看了最新的源代码:
[img=720,256.03661327231123]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405071414810.png[/img]

具体的官方修复思路如下:
更多网安技能的在线实操练习,请点击这里>>
  

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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4