开源不是安全边界
2026年5月14日,英国Government Digital Service发布了面向公共部门的AI、开放代码与漏洞风险指南。该指南问对了问题:AI可能降低漏洞发现成本,但代码仓库的私密性仍然不会因此变成安全边界。1
9天前的一篇公开报道提到,NHS England计划将数百个GitHub代码仓库设为私有,原因是内部担心AI漏洞工具可以大规模检查公开代码。2这种担忧可以理解,但拟议控制措施并不成立。隐藏代码等于把“发现”当作威胁;严肃的安全工作会把“未修复的弱点”当作威胁。
当团队减少真实暴露面时,开源安全才会改善:代码中没有密钥、例外规则清晰、代码仓库有人负责、披露路径可用、补丁发布迅速,并且有公开证据证明修复已经到达用户。代码仓库私有化可以支撑某个具体例外,但无法取代这套运转体系。
要点速览
GDS认为,公共部门团队应默认保持代码开放,审慎评估例外,并聚焦那些真正改变实际风险的因素。1这个答案优于一场围绕代码仓库私有化的恐慌,因为公开代码可能已经存在于分支、镜像、缓存、包产物、容器镜像、截图、生成的客户端和既往克隆中。更重要的是,公开代码允许更多人检查、复用、报告问题并改进它。13
面对AI漏洞发现,正确回应不是“把一切都设为私有”。正确做法是:移除密钥,分类敏感代码,发布明确例外,运行依赖项和密钥扫描,维护漏洞披露路径,快速打补丁,并保留证据证明开放代码有明确负责人。145
核心结论
- 对工程负责人而言:私有化可以在少数场景下降低暴露,但无法替代所有权、清单、补丁和披露机制。
- 对公共部门团队而言:只要配套明确的例外规则,默认开放依然有效。例外应覆盖密钥、欺诈控制、敏感架构和未发布政策。
- 对安全团队而言:AI提高了响应能力的价值。没有分诊路径的私有代码仓库仍然会失守。
- 对代理团队而言:代码可见性只是攻击面之一。工具权限、状态边界、出站控制和发布关口,比代码仓库看起来是否私有更重要。
- 对维护者而言:少制造神秘感。良好的文档、清晰的安全联系人和小而有主的服务,比一堵私有代码仓库之墙更能降低风险。
恐慌把可见性误认为漏洞
AI漏洞扫描器改变了检查工作的成本结构。过去,一个人需要时间、技能和耐心,才能搜索整个代码库。一个能力足够的模型可以更快检查更多代码,串联多个文件中的线索,并产出更多候选发现。这种变化会给本就代码脆弱、责任模糊、补丁路径缓慢的团队带来更大压力。
但代码仓库可见性并不等于漏洞。公开代码可能暴露一个bug,私有代码也可能包含同一个bug。攻击者往往可以从二进制文件、API流量、客户端包、软件包内容、容器层、日志、文档、依赖元数据或旧克隆中推断行为。GDS也提出了同样务实的观点:把一个曾经公开的代码仓库改为私有,并不一定能阻止有能力的对手访问,因为热门项目通常已有分支或镜像,即使是低调的代码仓库,也可能早已到达研究人员或攻击者手中。1
这个提醒很重要,因为“关掉它”看起来像是在行动。但这种行动可能减少公共问责,却把技术弱点留在原处。团队可能失去外部审查、共享修复和复用机会,却很难阻止那些已经复制代码的人。
开源还会形成审计轨迹。公开历史显示谁改了什么、修复何时落地、维护者如何回应报告,以及项目是否仍在被积极维护。私有代码会向同行团队、供应商、研究人员和其他可能复用或改进工作的公共机构隐藏这些信号。
默认开放并不天真
GDS并没有主张每一行代码都应该出现在公共互联网上。较早的GOV.UK开源指南已经列出了保持代码闭源的正当理由,包括密钥、凭据、欺诈检测算法和未发布政策。3Technology Code of Practice也把开放性与安全和隐私义务放在一起,而不是让它们相互对立。4
更强的规则是默认开放,并设置具体例外。这种政策结构会迫使团队说清风险,而不是把“安全”当成包罗万象的分类。密钥不应该存在于代码仓库中。欺诈信号可能需要限制可见性。未发布政策服务可能需要限时保留。一个只是让人觉得尴尬的代码库,并不符合例外条件。
英国公共部门手册也指向同一方向。它描述了一项预期:在适当情况下,政府软件和代码应默认开源、以开放方式开发,并使用获批许可证发布。5DWP的开源代码发布政策遵循同样模式:鼓励以开放许可证发布,同时通过定义明确的控制措施保护敏感源代码。6
这种区分能够保护质量。公开写代码的团队往往会编写更好的README、更清楚的安装说明、更明晰的问题历史和更明确的数据边界,因为外部人员可能会阅读这些工作。GOV.UK指南指出,发布代码可以改善文档、可维护性、数据清晰度和安全反馈。3当团队面对AI压力而把一切掩埋起来时,这些收益就会消失。
真正的控制手段是修复速度
AI改变的是时钟。发现更快了。报告数量上升了。误报也会增加。我在当您的代理发现漏洞时中讨论过同样的能力压力:没有验证和修复,发现本身意义有限。团队需要分诊、责任人路由、补丁、披露和发布证据。代码仓库私有化无法提供其中任何一项。
CISA的Vulnerability Disclosure Policy平台正是为此存在。该平台为联邦民事机构提供渠道,用于接收、分诊并路由公共安全研究人员报告的漏洞。7CISA的协调漏洞披露计划也覆盖关键基础设施中的漏洞,包括开源软件和AI系统,并强调在公开披露前协调缓解措施。8
NCSC通过漏洞报告和披露指南,为英国组织提供了同样的运作框架,其中包括工具包和面向政府部门的现成报告路径。9共同主线很简单:承认外部人员会发现bug,然后让报告和修复机制真正运转起来。
这个框架会把AI漏洞发现从“隐藏代码的理由”转变为“改进响应闭环的理由”。如果模型能在您的公开代码中找到bug,团队应该问5个问题:
| 问题 | 比“设为私有”更好的答案 |
|---|---|
| 谁负责这个易受攻击的服务? | 一个具名团队,并有当前有效的升级路径 |
| 研究人员能否安全报告问题? | 已发布的披露政策和安全联系人 |
| 团队能否复现该发现? | 可测试的bug报告格式和分诊运行手册 |
| 团队能否快速修补并发布? | CI、发布说明、回滚和依赖项更新路径 |
| 用户能否判断自己是否受到保护? | 安全公告、版本指导和清晰的修复证据 |
无论代码开放还是关闭,这些答案都会降低风险。隐藏代码仓库只会改变今天谁能看见源代码。它不会创造负责人、补丁或披露路径。
更好的决策规则
团队需要一条决策规则,把尴尬、暴露和真正的敏感性区分开来。
| 代码类型 | 默认处理 | 原因 |
|---|---|---|
| 不含密钥的公共服务代码 | 开放 | 支持复用、审查、共享修复和问责 |
| 文档、示例、SDK、模式和客户端 | 开放 | 用户和集成方需要准确的源材料 |
| 已清理标识符的基础设施即代码 | 通常开放 | 只要密钥和实时细节不外泄,架构模式可以共享 |
| 包含凭据、私钥或实时令牌的代码 | 移除密钥、轮换,然后再决策 | 密钥暴露是安全事件,不是开源问题 |
| 欺诈控制、滥用启发式规则或检测逻辑 | 限制或延迟发布 | 发布可能削弱控制本身 |
| 未发布政策或市场敏感工作 | 限时限制 | 敏感窗口关闭后,理由也随之失效 |
| 所有权不清晰的代码 | 先修复所有权,再改变可见性 | 私有化不会让无人负责的软件变安全 |
这条规则还可以避免一种常见失败:因为团队无法分类任何东西,所以把一切都关闭。代码仓库清单应回答服务做什么、接触哪些数据、由谁负责、运行哪些密钥扫描器、哪些依赖项重要,以及报告如何到达维护者。如果团队缺少这些答案,说明团队存在运作缺口。改变代码仓库可见性也许能把缺口从公众视野中藏起来,但缺口仍然存在。
代理让边界问题更大
AI编程代理让同一教训更加鲜明。代码仓库边界并不能阻止代理在允许权限内做出不安全决策。我在代理沙箱安全只是一种建议中写过这种模式:危险动作往往发生在权限集合之内,而不是之外。同样的组合问题也驱动了软件供应链攻击,即单个看似合理的部分组合成了一条有害路径。
不可见代理问题同样适用于开源政策。团队无法治理自己看不见的东西:工具路径、生成产物、缓存、发布状态、披露队列和所有权交接都很重要。
开源政策应该向代理安全学习。有用的边界存在于动作层和响应层:
- 在工具接触不可信输入之前先完成分类;
- 从代码、历史记录、日志、软件包和生成资产中移除密钥;
- 按信任级别隔离构建缓存和发布产物;
- 限制自动化工作流的出站网络路径;
- 在发布、部署或宣布修复完成前要求证据;
- 为外部研究人员提供安全且有文档说明的报告路径。
这些控制并不依赖源代码保密。它们依赖团队知道敏感材料位于哪里,以及哪些动作可能造成伤害。如果代码仓库包含真实密钥,在暴露之后把它设为私有是在解决错误问题。应当轮换密钥,尽可能从历史记录中移除它,使旧产物失效,并记录事件路径。发布边界之所以重要,是因为外部输出需要比本地分析更强的关口。
这就是GDS指南显得正确的原因。该指南没有否认AI会改变漏洞发现。它拒绝了肤浅结论。AI让弱系统更容易被检查,因此答案应当让系统更容易被负责、审计、报告和修复。
我今天会怎么做
面对AI驱动的代码仓库恐慌,团队应在改变默认策略前,先进行一次48小时开放代码审查:
- 盘点公开代码仓库,并把每个仓库映射到负责人。
- 对当前代码树和git历史运行密钥扫描。
- 检查每个代码仓库是否有安全联系人或披露政策。
- 识别欺诈、滥用、实时架构和未发布政策方面的例外。
- 确认依赖项更新、补丁发布和回滚路径。
- 只关闭或延迟那些符合具名例外的具体代码仓库。
- 发布决策规则,避免未来团队重复恐慌。
这个计划为负责人提供了真实可控的操作面。它也会创造证据。未来审查者可以看到为什么某个代码仓库保持开放,为什么另一个转为私有,以及哪些工作降低了实际风险。
FAQ
AI会让公开代码更危险吗?
AI可以让公开代码更容易被检查,因此团队应预期收到更多漏洞报告,也会遇到更多自动化探测。危险来自未修复漏洞、暴露的密钥和薄弱的响应闭环。公开可见性可能增加发现概率,但私有化不会移除底层bug。1
团队是否应该在某些情况下把代码仓库设为私有?
是的。团队应限制那些包含或暴露密钥、欺诈控制、敏感实时架构、未发布政策或其他具体伤害的代码。团队还应记录例外,并在理由失效时重新审视。36
为什么不在审查完成前先全部关闭?
一刀切关闭会用真实的公共收益换取不确定的保护。GDS警告说,曾经公开的代码可能已经存在于镜像、分支或克隆副本中。1短期、定向的审查优于一种无限期默认策略,因为后者只会隐藏所有权问题。
团队说一个公开代码仓库“足够安全”之前,它至少应包含什么?
至少应具备:没有密钥、明确负责人、许可证、清晰的安装说明、依赖项更新实践、安全联系人或漏洞披露路径,以及能够快速发布修复的发布流程。
这与AI编程代理有什么关系?
代理扩大了同一个边界问题。风险很少只存在于一个可见文件中。它存在于权限、生成产物、缓存、出站请求、构建状态和发布权限中。良好的代理安全和良好的开源政策,都需要在这些边界上提供证据。
参考资料
-
Government Digital Service,《公共部门中的AI、开放代码与漏洞风险》,GOV.UK,发布于2026年5月14日。本会话验证发现状态码为200,并找到“Keep open by default”、“closing by default”、镜像或分支,以及公开代码审查收益等标记。 ↩↩↩↩↩↩↩
-
Connor Jones,《NHS因AI和安全担忧将数百个GitHub代码仓库转为闭源》,The Register,2026年5月5日。本会话验证发现状态码为200,并找到NHS代码仓库、公开代码仓库和5月11日私有化截止日期等标记。 ↩
-
Government Digital Service and Central Digital and Data Office,《保持开放并使用开源》,GOV.UK,发布于2017年11月6日,更新于2021年3月31日。该来源支持公共部门发布代码的理由,以及可接受的闭源例外示例。 ↩↩↩↩
-
Government Digital Service and Central Digital and Data Office,《Technology Code of Practice》,GOV.UK。该来源支持第3点“Be open and use open source”,以及相邻的安全要求和隐私内建要求。 ↩↩
-
Cabinet Office and Central Digital and Data Office,《Digital, Data and Technology Playbook》,GOV.UK。该来源支持公共部门预期:在适当情况下,政府软件和代码应默认开源。 ↩↩
-
Department for Work and Pensions,《Open-Source Code Publishing Policy》,GOV.UK。该来源支持部门级政策:鼓励开放发布,同时保护敏感源代码。 ↩↩
-
Cybersecurity and Infrastructure Security Agency,《Vulnerability Disclosure Policy (VDP) Platform》,CISA。该来源支持接收、分诊和路由公共安全研究人员报告的漏洞。 ↩
-
Cybersecurity and Infrastructure Security Agency,《Coordinated Vulnerability Disclosure Program》,CISA。该来源支持协调披露、缓解措施协调,以及对开源软件和AI系统的覆盖。 ↩
-
National Cyber Security Centre,《漏洞报告与披露》,NCSC。该来源支持英国漏洞披露指南、工具包引用和面向政府部门的报告路径。 ↩