返回首页

JetBrains Supply Chain Attack: 15 Malicious Plugins Steal 70K+ Developer AI API Keys

JetBrains Marketplace供应链攻击:15个恶意插件窃取7万+开发者 密钥

JetBrains Marketplace遭遇大规模供应链攻击,15个伪装为AI编码助手的恶意插件通过7个供应商账户潜入,累计安装量超过7万次。这些插件静默窃取和SiliconFlow的API密钥,将开发者的AI配额在暗网上转售。攻击持续8个月未被发现。

事件始末:8个月的静默窃取

section

2026年6月,安全公司Aikido和BleepingComputer联合披露了一起针对JetBrains Marketplace的大规模供应链攻击事件。15个恶意插件通过7个不同的供应商账户发布,伪装为AI编码助手、代码审查工具、Git辅助工具、Bug查找器和单元测试工具,累计安装量超过70,000次。

这不是一次仓促的攻击。最早可追溯的恶意插件发布于2025年10月31日——一个名为"DeepSeek Junit Test"(org.sm.yms.toolkit)的插件。随后在11月1日和11月9日,又分别发布了"DeepSeek Git Commit"(com.json.simple.kit)和"DeepSeek FindBugs"(org.bug.find.tools)。攻击者采用渐进式发布策略,每次新增1-2个插件,避免一次性大规模发布引起注意。

这些插件的核心恶意行为是:从插件设置中读取用户配置的AI API密钥,然后将其外泄到一个硬编码的远程服务器。目标明确——OpenAI、DeepSeek和SiliconFlow这三个在开发者工具中最广泛使用的AI API。被盗的API密钥在暗网上被转售,让攻击者可以免费消耗受害者的配额,而受害者继续为账单买单。

从2025年10月到2026年6月,这场攻击持续了整整8个月。在这段时间里,70,000多名开发者安装了这些插件,其中有多少人的API密钥被窃取,目前尚无确切数字。但考虑到这些插件的功能描述——AI编码助手、代码审查、Git提交——安装这些插件的开发者几乎必然配置了AI API密钥。

攻击手法解析:如何在Marketplace投毒

section

JetBrains Marketplace的插件审核机制与VS Code Marketplace类似——依赖自动化扫描和社区举报。攻击者利用了几个关键弱点:

1. 供应商身份伪造

攻击者创建了7个看似合法的供应商账户,使用了与知名AI工具相似的名称和描述。这些账户没有历史记录,但在JetBrains Marketplace上,新供应商并不罕见——大量独立开发者通过Marketplace发布插件。

2. 功能描述与实际行为差异

恶意插件在功能描述中声称提供AI辅助编码能力。它们确实包含部分合法功能(例如基本的代码格式化),但核心恶意代码隐藏在深层调用链中。当用户在插件设置中配置API密钥时,密钥会被静默读取并外泄。

3. 外泄端点统一

所有15个恶意插件使用同一个外泄端点。这意味着攻击者可以通过单一服务器收集所有被盗密钥。安全研究人员通过逆向分析插件代码发现了这个端点——但在此之前,70,000次安装已经完成。

4. 渐进式发布规避检测

攻击者没有一次性发布15个插件,而是跨越8个月分批发布。每次发布1-2个插件,间隔数周到数月。这种策略有效规避了Marketplace的异常检测机制——单个新插件的发布不会触发警报。

受影响插件与供应商

section

伪装功能 插件ID示例 发布日期 目标API
AI单元测试 org.sm.yms.toolkit 2025-10-31 DeepSeek
Git提交助手 com.json.simple.kit 2025-11-01 DeepSeek
Bug查找器 org.bug.find.tools 2025-11-09 DeepSeek
代码审查助手 多个变体 2025-12至2026-06 OpenAI, SiliconFlow
AI编码助手 多个变体 2026-01至2026-06 OpenAI, DeepSeek, SiliconFlow

供应商账户: 7个独立账户,名称模仿知名AI工具品牌

总安装量: 70,000+

攻击持续时间: 2025年10月31日 — 2026年6月(约8个月)

检测与清理

检查是否安装了恶意插件:

# 在JetBrains 中检查已安装插件
# File → Settings → Plugins → Installed

# 或通过命令行检查插件目录
find ~/.config/JetBrains/ -name "*.jar" -path "*/plugins/*" | while read jar; do
    echo "=== $jar ==="
    unzip -p "$jar" -INF/MANIFEST.MF 2>/dev/null | grep -i "vendor\|name\|version"
done

# 检查是否有到已知外泄端点的网络连接
# (具体端点信息需参考安全厂商的IOC报告)
netstat -an | grep -i "ESTABLISHED" | grep -v "127.0.0.1"

如果已安装恶意插件,立即执行:

# 1. 卸载所有可疑插件
# 在IDE中: Settings → Plugins → 选择可疑插件 → Uninstall

# 2. 轮换所有AI API密钥
# OpenAI: https://platform.openai.com/api-keys
# DeepSeek: https://platform.deepseek.com/api_keys
# SiliconFlow: https://cloud.siliconflow./account/ak

# 3. 检查API使用记录是否有异常消费
# 查看API dashboard中的调用量和费用

# 4. 检查项目中是否有其他凭证泄露
grep -r "sk-\|api_key\|secret" ~/.config/JetBrains/ --include="*.xml" --include="*.json"

开发者供应链安全的系统性问题

这次攻击暴露的不仅是个别插件的问题,而是整个IDE插件生态的系统性安全风险。

问题一:插件审核机制薄弱

JetBrains Marketplace和VS Code Marketplace都面临同样的困境——插件数量增长快于审核能力。开发者期望Marketplace有丰富的插件生态,但审核每个插件的代码行为需要大量资源。攻击者利用了这个矛盾。

问题二:API密钥的明文存储

大多数IDE插件将API密钥存储在明文配置文件中。当插件请求读取这些配置时,IDE不会进行额外的权限验证——插件可以访问其权限范围内的所有数据。这与移动App的权限模型形成鲜明对比——和iOS至少会显示"此应用请求访问您的位置"之类的提示。

问题三:AI API密钥的经济价值被低估

一个被盗的OpenAI API密钥可以让攻击者免费使用-4级别的模型,而受害者继续为账单买单。这创造了一个活跃的暗网市场——被盗API密钥的转售价格远低于正常订阅费用。随着AI API的使用量增长,这类攻击的经济激励只会更强。

问题四:信任链的脆弱性

开发者信任JetBrains Marketplace上的插件,就像他们信任包或Docker镜像一样。但每一次信任传递都增加了攻击面。当一个70,000人安装的插件被证明是恶意的,受损的不仅是这70,000个开发者,还有整个生态系统的信任基础。

与近期供应链攻击的对比

攻击事件 平台 攻击向量 影响范围 持续时间
JetBrains恶意插件 JetBrains Marketplace 伪装AI助手插件 7万+安装 8个月
Axios npm供应链 npm 朝鲜黑客投毒 1亿+下载量 数月
n8n供应链攻击 npm 恶意社区节点 OAuth令牌窃取 数月
Nx s1ngularity npm/GitHub AI驱动恶意软件 2,180账户 数天
Mastra供应链攻击 npm 140+恶意包 广泛 数天
Shai-Hulud蠕虫 npm 自我传播 自动化供应链攻击 数周

防御建议

个人开发者:

  • 仅安装经过验证的插件,优先选择官方或知名开发者维护的插件
  • 使用环境变量或密钥管理器存储API密钥,而非IDE插件设置
  • 定期审查已安装插件列表,移除不再使用的插件
  • 启用API密钥的使用量告警,及时发现异常消费

企业团队:

  • 实施插件白名单制度,仅允许经过安全审查的插件
  • 使用集中式密钥管理(如HashiCorp Vault),避免API密钥分散在各开发者机器上
  • 监控API密钥的使用模式,检测异常调用来源
  • 考虑使用企业级IDE配置,限制Marketplace访问
# API密钥使用量异常检测脚本
import json
from datetime import datetime, timedelta

def check_api_anomaly(api_usage_log, threshold_multiplier=3):
    """检测API密钥使用量是否异常"""
    recent = [u for u in api_usage_log 
              if u['timestamp'] > datetime.now() - timedelta(hours=24)]
    baseline = [u for u in api_usage_log 
                if u['timestamp'] <= datetime.now() - timedelta(hours=24)]
    
    if not baseline:
        return False
    
    avg_daily = sum(u[''] for u in baseline) / len(baseline)
    recent_total = sum(u['tokens'] for u in recent)
    
    if recent_total > avg_daily * threshold_multiplier:
        print(f"[] API usage anomaly: {recent_total} tokens in 24h "
              f"(baseline avg: {avg_daily:.0f})")
        return True
    return False

数据来源与参考文献

  1. StepSecurity. "15 Malicious JetBrains Plugins Stole AI API Keys." stepsecurity.io, 2026.
  2. Penligent. "Malicious JetBrains Plugins Are a Developer Supply Chain Problem." penligent.ai, 2026.
  3. Navanem. "JetBrains Malicious Plugins Steal AI API Keys: 70K Installs." navanem.com, June 17, 2026.
  4. Satyam Rastogi. "JetBrains Malicious Plugins: AI API Key Harvesting Attack." satyamrastogi.com, 2026.
  5. Cyber . "Malicious JetBrains and VS Code Extensions Steal API Keys." cybersecuritynews.com, 2026.
  6. The Hacker News. "Coordinated Campaign on JetBrains Marketplace." thehackernews.com, June 17, 2026.

更新时间:2026-06-25

评论