八月对自建CI/CD的人来说有点过于热闹了:TeamCity、Gitea、pnpm三条战线几乎同月爆雷,打的都是同一个东西——你那台负责构建代码、还攥着全套部署凭据的机器。而且这次不是纸面风险,TeamCity的洞从披露到出现在野利用只用了几天。知乎我把三簇漏洞捋了一遍,顺手说个观察:知乎上高热度的CI/CD内容几乎全在讲"怎么搭",安全视角近乎空白。文末附一份3分钟自查清单,自建用户可以直接抄作业。
① TeamCity:9.8分未授权RCE,打到就是总开关
动静最大的是JetBrains TeamCity的CVE-2026-63077:漏洞出在Agent轮询协议的反序列化处理上,CVSS 3.1评分9.8,CVSS 2.0直接给了满分10.0。知乎攻击门槛低到几乎没有:只要攻击者能触达8111服务端口,无需账户、Cookie、Token、访客权限,就能发起攻击,触发链路完全绕开登录模块,关掉Guest账号也不形成任何防护。知乎而TeamCity这类服务器权限极高——连代码仓库、跑构建脚本、管部署凭据、控生产发布,被打穿相当于交出整条软件交付链的总开关。

受影响范围也够广:2017.1到2026.1.2的自建本地部署版全部中招,只有TeamCity Cloud托管实例完全不受影响。知乎这已经不是TeamCity第一次出这种级别的事,2023年底的CVE-2023-42793同样是未认证RCE,当时在野利用来得非常快。知乎所以下面的自查别偷懒,尤其是把TeamCity暴露在公网、或者习惯用root跑的。
② Gitea:一个恶意工作流,容器直接逃逸到宿主机
Gitea的CVE-2026-58053离大多数个人自建用户更近。CI的安全假设本来很朴素:工作流跑在容器里,动不了宿主机。这个洞把这层假设直接击穿:攻击者只要提交一个恶意工作流,就能创建一个共享宿主机PID/IPC命名空间、拥有全部Linux能力、安全配置被禁用的容器,然后用nsenter进入宿主机命名空间以root执行任意命令。知乎也就是说,Runner主机上的仓库密钥、部署凭据,甚至同宿主机其他作业容器的数据,都可能被一并带走。更麻烦的是,漏洞细节和POC都已公开,官方补丁却还没影。

③ pnpm:一份lockfile,放倒整条流水线
第三簇爆在依赖链上:7月6日,pnpm同批修复了三个路径遍历漏洞(CVE-2026-59194/59195/59196)。攻击方式简单得吓人,攻击者只需提交一个构造的pnpm-lock.yaml,受害者克隆仓库并执行pnpm install,攻击就完成了。知乎不用社工、不用控制私服,走公开代码渠道就能投毒。其中CVE-2026-59195最阴险:通过configDependencies的符号链接逃逸,可以覆盖.bashrc和CI runner配置做持久化驻留,还顺带绕过了"禁用生命周期脚本"这道常见防线。

有个误区必须纠正
“线上只部署产物、不执行install,所以跟我无关”——很多团队都这么想,但这是典型的认知错误。知乎镜像构建、代码打包、资源预编译、依赖缓存生成,这些环节全都会执行pnpm的安装与挂载逻辑,哪怕最终交付的只是静态资源,构建过程中产生的符号链接、文件删除行为照样会污染构建节点、泄露流水线密钥。
自建用户3分钟自查
TeamCity: 先确认版本,2017.1到2026.1.2之间的自建实例尽快安排升级,官方没有给出临时缓解措施,升级是唯一可靠出路。知乎业务停不了机的老版本,可以部署JetBrains官方提供的独立补丁插件,最低兼容2017.1。知乎另外把root/Administrator启动TeamCity的习惯改掉,低权限账号运行能明显降低被打穿后的损失。
Gitea: Actions功能从1.21.0起默认启用,先确认你的实例是不是真的在跑Actions。知乎官方补丁尚未发布,现阶段靠缓解措施防守:限制fork PR触发工作流、收紧container.options可用参数,同时盯紧官方修复版本的发布。

pnpm: 修复版本7月6日已经发布,把构建机、镜像构建链、开发者本机的pnpm全部升上去。别心存侥幸:只要机器、集群、容器环境里装的pnpm版本低于安全基线,所有使用场景全部存在风险,不存在豁免场景。知乎再抽查一下仓库里的pnpm-lock.yaml,对来历不明的lockfile保持警惕——这次三个洞的入口都是它。
最后两句
还有个趋势值得盯住:AI Agent正在接管流水线上的提交、评审、部署,传统静态扫描很难抓住语义层的东西——问题不在语法,而在语义,在于Agent如何理解“用户输入”和“内部数据”的边界,目前几乎没有团队能回答。知乎CI/CD早就是软件供应链信任链的核心节点,自建图的是自由和省钱,但安全这块的账,这个八月之后不能再省了。