上周GitHub出事了。
我刷到这条新闻的时候正在摸鱼,差点把咖啡喷在键盘上。105秒,73个仓库,全是微软的。
说实话第一反应是不信。微软?GitHub?这两家不是穿一条裤子的吗?
结果点进去一看,是真的。Azure Functions整个组织没了,durabletask项目家族全灭,连带着49个Azure相关项目一起消失。页面统一显示:"该仓库已被禁用。由于违反GitHub服务条款,GitHub工作人员已禁用了对此仓库的访问权限。"
什么叫服务条款违规?微软官方仓库能违规到哪里去?
原来是被人黑进了开发流程。
攻击者是怎么做到的
说起来也不算多高科技。攻击者往durabentask项目里塞了一批配置文件。
配置文件这种东西,懂的都懂,谁会仔细看?.json、.yaml、.toml,塞进项目里就跟背景板一样,没人会多瞄一眼。
但这批配置文件不是普通货色。它们被设计成一旦开发者用AI编程工具加载项目,就会自动执行。
自动执行。
Claude Code会读、Gemini CLI会读、Cursor会读、VSCode也会读。AI工具为了"了解你的项目",会自动扫描配置文件、读取本地配置、解析项目结构。这本是提升体验的贴心设计,结果成了攻击者的入口。
主要目标很明确:偷凭证。
GitHub Token、云平台访问密钥、API Key、环境变量里的敏感数据、企业内部账号认证信息。拿到这些玩意儿,攻击者能做的事太多了。一个开发者账号沦陷,可能导致企业云资源被接管、CI/CD流水线被篡改、内部代码库被洗劫、客户数据暴露、下游软件被感染。供应链攻击,一环套一环。
安全机构把锅扣在了黑客组织TeamPCP头上。这帮人在2026年上半年疯狂作案,专门盯着开源生态下手。控制开源项目、劫持依赖包、在开发工具里埋后门,什么脏活都干。
有意思的是,durabletask早在今年5月就中过一次招了。当时微软发公告说已经清理干净,结果才过了多久,又来一轮。
要么是第一次没清干净,留了后门;要么是攻击者换了新姿势,搞了次全新入侵。不管哪种,都挺让人不安的。
Java开发者尤其要当心
我不是在吓你们。
durabletask是什么?是Java和.NET的分布式任务框架。这玩意儿在Java生态里用得挺广,很多项目直接依赖它。
Java项目的依赖链是什么样子,做过的都清楚。一个mvn dependency:tree打出来,几百个包层层嵌套。你敢保证每个依赖都干净?你敢保证上游没有被人埋雷?
而且,Java项目里application.yml或application.properties那堆配置,数据库密码、Redis密钥、第三方API Key,哪次不是随手一填就完事?这些敏感数据就在配置文件里躺着,一旦被攻击者盯上,后果自己想。
我认识个哥们,在某云厂商做后端。他们团队去年开始推AI编程工具,产品要求全员配Claude Code。提效确实提效了,代码写得飞快。但我问他们有没有考虑过安全风险,他愣了一下,说"微软的模型应该没事吧"。
微软的模型没事,但Claude Code是个客户端工具,它读取的配置文件在本地。攻击者只要往项目里塞个恶意的.cursorrules或者在.vscode/settings.json里埋点东西,你让AI加载项目的时候不就等于自己把门打开了?
你以为AI在帮你写代码,其实AI在帮你把钥匙递给小偷。
我踩过的坑
去年有个项目,Spring Boot的,接了第三方支付。配置里有个notify_url,还有个secret_key,是支付通道给的。
当时赶进度,我直接让GPT帮我写了配置读取的代码,复制粘贴到application.yml里就完事了。后来做代码审计的时候才发现,那段prompt的上下文还挂在对话窗口里,secret_key明晃晃的。
我说这个不是要吓你们,是想说:AI编程工具带来的便利是真实的,但它记住的东西比我们以为的多得多。你让它加载个项目,它会把项目里的配置文件全读一遍。你让它执行个命令,它会调你本地的环境变量。你在它的视角里,就是个透明的程序员。
这种信任关系,以前只有同事之间才会有。现在交给了一个工具。
同事不会偷你东西,但攻击者会伪装成工具。
安全建议,我不想写了
说几条实在的:
第一,别迷信官方。 微软的仓库说没就没,官方不代表安全。来源可信不代表交付链安全。
第二,慎用AI加载未知项目。 你让Claude Code或Cursor去读一个陌生仓库,就是在给它开读取权限。想用AI分析开源项目,先手动看看项目结构再说。
第三,检查本地环境。 git status、git remote -v,看看本地有没有克隆过那些被删的仓库。有的话,删干净。
第四,GitHub Token权限别给太大。 工作需要多少就给多少,别图省事全给read:user、repo这些大开权限。Token丢了就等于钥匙丢了。
第五,依赖检查做起来。 mvn dependency-check:check、gradle dependencyCheckAnalyze,用起来。这些工具不一定能查出所有问题,但总比什么都不做强。
我不打算在这里列个12345的清单让你照着做。那些安全建议你去搜一搜到处都是,但看完该忘还是忘。
真正重要的是改变一个认知:AI编程工具不是你的助手,它是你授予了权限的访客。 助手不会偷你东西,但访客可能会——如果有人提前在他口袋里塞了东西的话。
最后说两句
这次事件的影响范围微软没公布,说"少量"可能中招。少量是几个?几百个?几千个?不知道。
但有一点是确定的:攻击者的手法在进化。从攻击开源包到攻击开发工具本身,从被动等待下载到主动触发执行,这套玩法越来越成熟了。
供应链攻击的本质是信任传递。你信任npm的包,信任Maven的仓库,信任GitHub的官方账号,信任AI工具的安全设计。这些信任链上的每一环都可能成为突破口。
没有绝对安全的系统,只有相对谨慎的态度。
就这样吧,写多了你们也不看。
夜雨聆风