你正在刷招聘消息,一个技术栈对口、薪资合理的远程岗位找上门。对方态度专业,聊了几句就发来GitHub仓库链接,让你"提前熟悉代码,准备技术面试"。
这是本周真实发生在一位开发者身上的事。仓库里埋着精心设计的恶意代码,一旦运行安装命令,你电脑里的所有API密钥、AWS凭证、GitHub令牌都会被偷走。
![]()
这篇文章拆解攻击者的完整手法——包括三个让人不得不叹服的"巧思",以及一个能防住整类攻击的简单操作。
第一阶段:伪装成正常项目的"面试准备"
攻击起点是一份看似正规的招聘流程。LinkedIn上的"招聘人员"用合理的话术建立信任:远程软件工程师岗位、去中心化交易所(DEX)背景、技术栈恰好匹配目标。
经过几轮友好交流后,对方提出一个常见要求——"技术面试前先看看代码库"。同时附上一张Calendly预约链接,强化"正规流程"的印象。
仓库本身做足功课。前端是React框架,后端有数百行看起来像正经MEV套利机器人的代码,package.json文件毫无破绽。开发者即使快速浏览,也很难第一时间察觉异常。
恶意代码藏在app/controllers/frontController.js的第591到619行,一个名为getGoogleDriveValue的函数里。
第二阶段:五层攻击链如何运转
这段代码在你运行npm install的瞬间激活,形成完整的窃取链条。
第一层,向Google Docs发起请求。攻击者把命令控制服务器(C2)的地址编码后存进一份公开文档,文档ID硬编码在代码里。请求返回的是经过base64编码的URL。
第二层,解码获取真实C2地址。Google Doc的内容被trim清理后传入changedQueue函数。
第三层,验证并获取最终载荷。setApiKey和verify函数完成一轮校验,从真正的控制服务器下载最终执行代码。
第四层,动态执行任意代码。最关键的一行:(Function.constructor)("require", responseData)。这行代码创建一个新函数,把require作为参数注入,然后执行服务器返回的任意JavaScript代码。
第五层,窃取与持久化。最终载荷会遍历环境变量,抓取所有API密钥、云服务凭证、npm/GitHub令牌,外传到攻击者指定的接收端。
整个过程无需用户点击任何可疑链接,只需要执行常规的依赖安装命令。
第三阶段:三个让人意外的"设计巧思"
抛开恶意目的,这个攻击方案在工程层面有几处值得拆解的亮点。
第一个巧思是用Google Doc当命令控制通道。传统木马通常硬编码域名或Vercel链接,容易被安全规则批量封禁。Google Doc让攻击者可以随时编辑文档内容、更换后端服务器,无需提交新的GitHub commit。更关键的是,企业防火墙几乎不会拦截对*.docs.google.com的HTTPS请求——这是"寄生在可信基础设施上"的典型手法。
第二个巧思是绕过静态代码分析。(Function.constructor)("require", responseData)实现了eval的同等效果,但避开了所有针对eval的检测规则。主流linter和安全扫描工具都会标记eval,但对Function构造器的这种用法缺乏覆盖。攻击者显然研究过常见SAST工具的盲点。
第三个巧思是时间窗口的精准控制。整个攻击链在npm install阶段触发,早于开发者真正阅读代码的时间。大多数人会先跑安装命令让项目跑起来,再慢慢看实现细节——这个习惯被精准利用。
第四阶段:为什么现在特别危险
这个攻击模式在当前环境下杀伤力倍增。
就业市场承压,大量开发者处于主动求职状态。人对"机会"的警惕性会降低,对"流程"的服从性会升高。一个看起来专业的招聘人员、一次看似合理的"提前准备"要求,很容易被执行下去。
远程岗位天然适合这种手法。没有线下见面、没有公司域名邮箱、没有可交叉验证的办公地址,所有身份都可以伪造。而"先clone代码看看"在远程技术面试中又是完全合理的步骤。
技术栈选择也有讲究。Web3/DEX领域本身代码公开程度高、项目fork频繁,开发者对陌生仓库的容忍度更高。MEV机器人代码复杂、依赖多,给恶意代码提供了完美的藏身背景。
第五阶段:一个操作阻断整类攻击
防御方案出奇简单:在隔离环境中运行陌生代码。
具体做法包括——使用Docker容器或虚拟机打开不明仓库,限制网络出口,禁止访问主机文件系统;或者至少在运行npm install前,用代码搜索工具全局扫描eval、Function.constructor、axios.get等敏感调用,定位可疑网络请求。
更基础的习惯是:任何来自LinkedIn陌生人的仓库链接,先假设有问题。花两分钟看package.json中的依赖、搜索网络请求代码、检查是否有动态执行字符串的逻辑。这两分钟可能避免一次凭证全失的事故。
GitHub Trust & Safety已收到该仓库的举报,域名metabiteorg/NitroGem的封禁处理正在进行中。但攻击者可以瞬间创建新账号、新仓库、新Google Doc,这个游戏不会结束。
这件事的核心启示在于:招聘场景正在成为供应链攻击的新入口。当"面试准备"这个原本无害的流程被武器化,开发者需要把安全习惯前置到最早期的接触阶段——不是怀疑每一个机会,而是在验证之前,不给任何代码执行的机会。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.