据报道,OpenAI的ChatGPT爬虫似乎愿意对任意网站发起分布式拒绝服务(DDoS)攻击,而这家科技巨头尚未承认这一漏洞。
本月,德国安全研究员本杰明·弗莱斯克(Benjamin Flesch)在微软的GitHub上发布了一篇文章,解释了如何向ChatGPT API发送一个单一的HTTP请求,利用ChatGPT爬虫(特别是ChatGPT-User)向目标网站发送大量网络请求,从而实现网络洪泛。
虽然从实际角度看,这种连接洪流可能并不足以击垮任何特定网站,但这仍然是一个不容忽视的危险和OpenAI的疏忽。它可以将一个单一的API请求放大成每秒向受害网站发送20到5000个甚至更多的请求,并且这一过程会反复进行。
弗莱斯克在他的咨询报告中解释道:“ChatGPT API在处理向https://chatgpt.com/backend-api/attributions发送的HTTP POST请求时,表现出严重的质量缺陷。”他指的是OpenAI的ChatGPT调用的一个API端点,该端点返回聊天机器人输出中引用的网页源信息。当ChatGPT提及特定网站时,它会调用归因功能,并提供这些网站的URL列表,供其爬虫访问并获取信息。
如果您向该API发送一个包含大量略有不同但都指向同一网站的URL列表,爬虫会同时访问这些URL中的每一个。
弗莱斯克写道:“该API期望参数urls中包含一系列超链接。众所周知,指向同一网站的超链接可以有多种写法。”
“由于编程实践不佳,OpenAI没有检查列表中是否多次出现了指向同一资源的超链接。OpenAI也没有对urls参数中存储的最大超链接数量进行限制,从而能够在单个HTTP请求中传输数千个超链接。”因此,攻击者可以使用像Curl这样的工具,向ChatGPT端点发送一个无需身份验证令牌的HTTP POST请求,而微软Azure中的OpenAI服务器将响应请求,为请求中通过urls[]参数提交的每个超链接发起一个HTTP请求。当这些请求指向同一网站时,它们可能会使目标网站不堪重负,从而出现DDoS攻击的症状——由Cloudflare代理的爬虫每次都会从不同的IP地址访问目标网站。
弗莱斯克告诉《The Register》:“受害者永远不会知道自己被什么击中了,因为他们只会看到ChatGPT机器人同时从大约20个不同的IP地址攻击他们的网站。”他补充说,如果受害者启用防火墙来阻止ChatGPT机器人使用的IP地址范围,机器人仍然会发送请求。
“因此,即使一个请求失败或被阻止,也不会阻止ChatGPT机器人在下一秒再次请求访问受害者的网站。”
弗莱斯克解释说:“由于这种放大效应,攻击者只需向ChatGPT API发送少量请求,但受害者将收到大量请求。”
弗莱斯克表示,他已通过多个渠道(包括OpenAI的BugCrowd漏洞报告平台、OpenAI安全团队的电子邮件、微软(包括Azure)和HackerOne)报告了这一未经验证的反射型DDoS漏洞,但尚未收到任何回复。
《The Register》两次联系微软支持的OpenAI,均未收到回复。他提到另一份漏洞披露报告时说:“我想说,更重要的是,这个API也容易受到提示注入攻击的影响。”“为什么他们会为如此简单的任务设置提示注入呢?我认为,这可能是因为他们正在内部测试他们的自主‘AI代理’。”
第二个问题可以被利用,使爬虫通过相同的归因API端点回答查询;您可以向机器人提出问题,而它会回答问题,但实际上它本不应这样做;它的功能只是获取网站。
弗莱斯克质疑,为什么OpenAI的机器人没有采用简单且已建立的方法来适当删除请求列表中的重复URL或限制列表的大小,也没有避免在主ChatGPT界面中已经解决过的提示注入漏洞。
他说:“在我看来,这个小API是他们ChatGPT AI代理的一个示例项目,它的任务是解析用户提供的数据中的URL,然后使用Azure获取网站。”“‘AI代理’没有内置安全措施吗?”“因为很明显,处理urls[]参数的‘AI代理’没有资源耗尽的概念,也不明白在同一秒内向同一网络域发送数千个请求是多么愚蠢的行为。
“它难道没有意识到victim.com/1和victim.com/2都指向同一个网站victim.com吗?如果victim.com/1的请求失败,它为什么会立即发送对victim.com/2的请求呢?
“这些都是人们在软件中实施了多年的验证逻辑小片段,以防止此类滥用行为。”
弗莱斯克说,他唯一能想到的解释是,OpenAI正在使用一个AI代理来触发这些HTTP请求。
他说:“我无法想象一位高薪的硅谷工程师会设计出这样的软件,因为ChatGPT爬虫已经像谷歌爬虫一样在网络上爬行了多年。”“如果爬虫不对其向同一网站发送的请求数量进行限制,它们会立即被阻止。”