
说出来你可能觉得讽刺:一家做网络安全的公司,自己被黑了。
9月17-18日,法国网络安全公司CrowdSec披露:攻击者复制了它约170个私有GitHub仓库,暴露了内部源代码、数据科学模型、部署工具,甚至还有部分用户和早期投资人的个人数据。
更有意思的是,入侵的根源要追溯到今年5月的TanStack npm供应链攻击。
很多人看到这个新闻的第一反应是:"做安全的公司都能被黑,那我们普通企业还有安全可言吗?"
这话没毛病。但CrowdSec被黑这件事,暴露的不是某一家公司的问题,而是现代软件供应链的系统性脆弱。你的代码可能不直接被攻击,但你依赖的某个npm包、某个GitHub账号,可能早就被入侵了。
今天我们就来拆解一下:安全公司怎么也会被黑?供应链攻击是怎么链式传导的?开发者和企业该怎么防?
一:事件复盘
根据Cloud Security Alliance 9月20日的分析报告:
- 受害者:CrowdSec,法国网络安全公司,做众包威胁情报的
- 事件:约170个私有GitHub仓库被攻击者复制
- 泄露内容:内部源代码、数据科学模型、部署工具、部分用户和早期投资人个人数据
- 入侵根源:追溯到2026年5月11日的TanStack npm供应链攻击事件
- 时间线:5月被入侵,9月才发现并披露——中间隔了四个月
也就是说,攻击者在CrowdSec内部待了四个月才被发现。
二:技术核心拆解
1. 供应链攻击是怎么链式传导的?
这次入侵不是攻击者直接黑进了CrowdSec的系统,而是通过供应链层层渗透进去的。
链条大概是这样的:
- 攻击者先入侵了TanStack——一个很流行的前端开源项目
- 在TanStack的npm包里植入恶意代码
- CrowdSec作为开发者,在自己的项目里依赖了TanStack
- 当CrowdSec的开发人员在本地或CI环境安装依赖时,恶意代码执行了
- 恶意代码窃取了CrowdSec的GitHub凭证
- 攻击者用偷来的凭证访问CrowdSec的私有仓库,复制代码
看到没?这就是供应链攻击的可怕之处——你不需要直接攻击目标,只需要攻击它依赖的某个小环节。
2. 为什么安全公司也防不住?
很多人觉得,做安全的公司安全意识肯定很强,怎么也会被供应链攻击打穿?
问题在于:供应链攻击利用的是信任。
开发者默认相信npm上下载的包是安全的——毕竟那是开源社区维护的、大家都在用的包。你不会去逐行检查每个依赖包的代码。当攻击者入侵了一个大家都信任的开源项目,所有用这个项目的公司都可能受影响。
而且TanStack这种项目在前端圈非常流行,用的人成千上万。CrowdSec用了它,太正常了。这不是安全意识的问题,是现代软件开发模式本身的脆弱性。
3. 为什么四个月才发现?
攻击者拿到GitHub凭证后,行为可以做得非常隐蔽——就是正常地clone仓库、下载代码。从外部看,这跟开发人员的正常操作没区别。
而且CrowdSec这种小公司,可能没有专门的威胁检测团队盯着每一个代码访问日志。等他们发现异常的时候,攻击者已经拿走了想要的东西。
这就是高级持续威胁(APT)的特点:不着急、不破坏、悄无声息地拿走想要的东西就走。
三:常见技术误区
误区一:"我们公司小,没人会黑我们"
供应链攻击不是定向攻击——它是无差别覆盖的。攻击者入侵TanStack后,所有用它的公司都可能受影响,不管大小。
你公司小不小不重要,重要的是你是不是那个"用了被入侵依赖"的人。
误区二:"我们用的都是知名开源项目,不会有问题"
越知名的开源项目,被攻击后影响越大,所以攻击者越喜欢挑知名项目下手。TanStack、event-stream、coa——历史上很多npm供应链攻击,目标都是大家都在用的流行包。
误区三:"我们有代码审查,不会让恶意代码进主分支"
供应链攻击不是让你在自己的代码里提交恶意内容,而是在你安装依赖的时候就执行了恶意代码。你的代码审查管的是你自己的代码,管不了npm包里面的东西。
四:实操指引
对开发者:
- 锁版本:用package-lock.json或yarn.lock锁定依赖版本,不要每次都装最新版
- 用npm audit:定期跑安全审计,看看有没有已知漏洞的依赖
- 最小化依赖:不要为了一个小功能引入整个npm包——依赖越多,攻击面越大
- CI环境用专用凭证:不要把生产凭证放在开发环境能访问到的地方
对技术管理者:
- 建立软件物料清单(SBOM):清楚知道自己的项目用了哪些开源依赖
- 关键项目的依赖做定期安全扫描
- GitHub等代码平台开启双因素认证——就算凭证被偷了,没有第二步验证也登不进去
- 异常访问监控:谁在什么时候从什么IP clone了代码,要有日志和告警
对企业决策者:
- 供应链安全不是纯技术问题,是风险管理问题
- 核心业务系统的开源依赖要有清单、有审计、有应急方案
- 不要默认"开源=安全",也不要默认"小公司不会被黑"
五:结尾
CrowdSec被黑这件事,最讽刺也最有警示意义的地方在于:安全公司自己都防不住供应链攻击,普通企业怎么办?
答案不是"彻底防御"——供应链攻击在可预见的未来无法被完全消除。答案是:认识到风险存在,做好基本防护,出了事知道怎么应对。
现代软件是建立在几百万个开源包之上的金字塔。任何一个底层砖块被抽掉,上面的建筑都可能晃动。我们能做的,是把这个金字塔的每一层都检查得仔细一点。
对每一个写代码的人来说,下次npm install的时候,多想一秒:这个包安全吗?可能就是这一秒,帮你躲过一场大麻烦。