TeamCity CVE-2026-63077 修复:2026 企业应急升级指南

本文面向负责 TeamCity On-Premises、Mac 构建节点和 iOS CI/CD 的企业 IT 团队,按应急时间轴说明漏洞发现后的隔离、升级、调查、凭证轮换与生产恢复顺序。重点解决“补丁已安装但环境是否可信”这一实际决策问题,并提供可执行的恢复检查清单。

截至 2026 年 9 月 6 日,JetBrains 已确认未修复的 TeamCity On-Premises 服务器存在主动利用和尝试利用;官方修复版本为 2025.11.72026.1.3。因此,TeamCity CVE-2026-63077 修复不能只看“补丁是否安装成功”:企业应先限制外部访问,再完成修复、调查、凭证轮换和干净流水线验证。若发现可疑日志或未知 Agent,应暂停签名发布,不要直接把旧 Mac 节点重新接回生产队列。官方安全公告

判断框:适合需要立即处置 TeamCity On-Premises、Mac Agent 和 iOS CI/CD 风险的企业管理员;不适合把“服务器已能登录”当成“构建环境已经可信”的团队。

这篇指南适合三类读者:TeamCity 管理员需要在不中断关键交付的前提下完成升级;iOS CI/CD 负责人需要判断 Mac Agent、签名凭证和既有制品是否仍可信;安全与技术管理者需要形成隔离、调查、恢复和重新放量的跨团队决策。

000—30 分钟:暴露面控制

TeamCity CVE-2026-63077 影响 TeamCity On-Premises,未修复服务器可能被无需认证的攻击者通过 HTTP(S) 访问触发,并以 TeamCity 服务器进程权限执行操作系统命令。TeamCity Cloud 不需要用户执行这次修复,官方表示必要缓解措施已经在云端完成。TeamCity 安全公告

发现漏洞后的前 30 分钟,处置顺序应固定下来:

  • ✅ 将 TeamCity 管理端、REST API 和相关访问入口限制到 VPN、内网或明确的可信网络。
  • ✅ 暂停高权限配置变更,冻结新建用户、修改构建配置、调整 Agent 授权和发布凭证的操作。
  • ✅ 暂停生产签名、部署和自动发布任务;普通编译任务也应根据制品敏感度决定是否暂缓。
  • ✅ 保留服务器日志、访问日志、反向代理日志、数据库备份和当前 Data Directory,避免调查时只剩升级后的状态。
  • ✅ 单独记录当前服务器版本、暴露地址、运行账户、数据库、插件和在线 Agent 清单。

这里需要区分“阻断后续利用”和“证明过去没有被利用”。升级或安装安全补丁只能降低继续触发漏洞的风险,不能自动清除已经被写入的文件、读取的凭证或被污染的构建工作区。

01维护窗口:修复路径与证据保全

修复版本选择

官方确认的修复路径主要有两条:

  • 同分支升级:TeamCity 2025.11.7 和 2026.1.3 已包含 CVE-2026-63077 修复。若当前环境接近这两个分支,通常更容易控制插件、数据库和构建配置变化。
  • 安全补丁插件:无法立即升级时,可使用适用于 TeamCity 2017.1 及更高版本的官方安全补丁插件。但该插件只处理 CVE-2026-63077,不能替代完整版本升级。

截至 2026 年 9 月 6 日,TeamCity 2026.2 已于 2026 年 9 月 1 日发布。是否直接从旧版本跨入 2026.2,必须结合许可证、Java、数据库驱动、插件以及升级说明判断,不能因为版本更新就默认适合所有生产实例。TeamCity 2026.2 发布说明

如果团队当前目标是快速消除公网暴露风险,应优先选择已经验证过的修复版本;如果必须跨大版本,则应先在隔离测试服务器复现关键流水线,再安排生产升级。TeamCity 官方说明,跨主要版本升级后通常不能依靠普通方式降级,回退往往需要恢复对应版本的备份。服务器与 Agent 升级文档

备份内容

普通数据库备份并不等于完整灾备。维护窗口前至少要分别确认:

  • TeamCity 数据库及数据库连接参数;
  • TeamCity Data Directory,包括项目配置、插件、加密配置和构建相关数据;
  • 服务器安装目录中被修改过的配置;
  • 反向代理、TLS 证书、网络访问控制和服务启动配置;
  • 必要的构建记录、制品元数据和审计日志;
  • Agent 的 buildAgent.properties、服务或 launchd 配置,以及 Mac 节点上的工具链清单。

不要把签名私钥、云访问密钥和部署令牌直接复制到普通备份中。备份本身应受到单独访问控制,否则为了恢复 CI/CD 而集中保存的敏感资料,可能扩大调查期间的泄露范围。

兼容性盘点

建立一份服务器与节点清单,至少记录以下项目:

  • TeamCity 当前版本和目标修复版本;
  • TeamCity 服务器运行的 Java 版本;
  • 数据库类型、版本和 JDBC 驱动;
  • 第三方插件及其用途;
  • Mac Agent 的名称、主机身份、macOS 版本、Apple Silicon 架构和 Xcode 版本;
  • Agent 的授权状态、连接地址 serverUrl、启动方式和自动升级状态;
  • 是否使用签名 Keychain、App Store Connect 密钥或部署凭证。

从 TeamCity 2026.1 开始,服务器和 Agent 启动时要求 Java 21;如果直接跨入 2026.1 或更高版本,Java 11 或更早版本会成为明确的启动前置条件,而不是升级完成后再慢慢处理的问题。Java 21 官方说明

02升级窗口:服务器修复与阻断验证

升级窗口不应写成一串通用安装命令,而应围绕“每一步完成后能否继续”推进:

  1. 停服并确认队列状态。 停止新构建进入生产队列,记录正在运行的任务、待处理任务和必须回退的发布动作。
  2. 确认备份可读。 不要只确认备份文件存在,应至少验证数据库备份、Data Directory 和关键配置能够被恢复工具识别。
  3. 安装修复版本或官方安全补丁。 优先使用 TeamCity 管理端自动更新或官方安装包;如果服务器处于离线网络,提前准备安装包、校验值、插件和内部传输路径。
  4. 启动后核对管理端。 检查服务器版本、授权状态、数据库连接、项目配置和系统健康项,确认没有因为插件加载失败而隐藏关键功能。
  5. 验证 VCS 和队列。 用低风险项目测试代码拉取、触发构建、取消构建和重新排队,不能只打开一个项目页面就宣布升级成功。
  6. 确认安全补丁状态。 如果使用补丁插件,记录插件启用状态和安装时间;如果已升级到修复版本,记录版本号、构建号和升级日志。
  7. 观察 Agent 更新。 TeamCity 会对连接正常且安装正确的 Agent 执行对应版本升级;正在运行的构建通常会先完成,Agent 空闲后才进入升级流程。显示为 “Agent disconnected(Will upgrade)” 时,不应强制关闭控制台或重启进程。官方 Agent 升级说明

如果服务器无法访问官方更新地址,自动升级可能无法下载版本或 Agent 分发包。离线环境应改用经过校验的安装包,并把下载、传输和校验过程记录到变更单中,避免升级完成后无法解释安装来源。

03Mac Agent:隔离与逐台验证

服务器恢复并不代表 Mac Build Agent 可以立即接单。Mac Agent 可能保存源码、依赖缓存、构建脚本、签名证书、Keychain 访问权限和临时制品,因此应作为独立调查对象处理。

单节点隔离顺序

每台 Mac Agent 都按以下顺序处理:

  • ✅ 在 TeamCity 中先禁用生产路由,不让它接收新的签名或发布任务;
  • ✅ 核对 Agent 名称、主机名、资产标识、macOS 用户和 serverUrl
  • ✅ 检查 Agent 是否已授权、是否曾被改名、是否出现异常重连;
  • ✅ 核对 Java、TeamCity Agent 版本和自动升级结果;
  • ✅ 检查启动配置、launchd 文件、Agent 日志和最近工作区;
  • ✅ 对来源不明或无法解释的 Agent 保持未授权状态,必要时从服务器删除并保留本地磁盘取证副本。

TeamCity 的授权状态决定 Agent 是否被允许执行构建任务。官方 REST 文档同时区分了已授权、已连接、已启用和需要升级等状态,因此不要把“在线”误判为“可信”,也不要把“未授权”直接判定为“已入侵”。Agent 状态与授权文档

干净流水线验证

在隔离的干净 Mac 节点上,创建一条不携带生产签名凭证的测试流水线,依次完成:

  1. 从指定 VCS 分支拉取代码;
  2. 安装或读取锁定版本的依赖;
  3. 执行 Xcode 构建;
  4. 运行单元测试和必要的集成测试;
  5. 生成未签名或测试签名归档;
  6. 清理工作区、派生数据和临时制品;
  7. 记录构建日志、工具链版本和输出摘要。

只有在这条流水线可以稳定复现,且新节点与服务器之间的连接、授权和队列路由都符合预期后,才进入受控签名验证。签名任务应最后恢复,因为它直接接触 Apple Developer 凭证、证书私钥和可发布制品。

在 macOS 上,官方建议使用 launchd 管理 Agent 的自动启动,并要求 Agent 目录归属于构建用户,以确保自动升级和配置写入不会因权限错误失败。macOS Agent 启动文档

04首日调查:日志、凭证与构建产物

官方公告给出了两类日志线索:

  • 未修复服务器中出现 com.thoughtworks.xstream.converters.ConversionException,可能表示尝试利用或成功利用;
  • 已修复服务器中出现 com.thoughtworks.xstream.security.ForbiddenClassException,可能表示补丁或修复版本阻断了之后的利用尝试。

这两条记录都不能单独证明已经入侵。调查时应以日志时间戳为主,不能仅依据未授权 Agent 页面显示的日期判断攻击发生时间。名称以 scan 开头的异常未授权 Agent 值得优先调查,但也只能作为线索。官方主动利用调查指引

建议为每个线索建立调查记录:

  • 事件时间、时区和日志来源;
  • 当时服务器是否仍未修复;
  • 请求来源地址及反向代理记录;
  • 是否出现异常进程、文件、用户或权限变化;
  • 是否读取或修改过项目配置、构建脚本和凭证;
  • 是否有 Agent 新增、重命名、重连或授权变化;
  • 相关构建是否生成了发布制品;
  • 调查结论、责任人和下一步动作。

凭证轮换范围

不要只重置 TeamCity 管理员密码。若服务器进程拥有访问权限,下列凭证都应根据实际暴露可能性评估:

  • VCS 访问令牌、部署密钥和 SSH Key;
  • 制品库账号、上传令牌和镜像仓库凭证;
  • 云平台访问密钥、临时角色和基础设施部署凭证;
  • Apple Developer 证书、App Store Connect API Key;
  • Mac 签名节点 Keychain 中的证书、私钥和解锁相关配置;
  • 发布系统、通知系统和下游部署平台的 Webhook 或 Token。

轮换后还需检查旧凭证是否仍被流水线、脚本、环境变量或本地缓存引用。若只在管理端修改一处,而旧密钥仍留在 Mac 工作区或构建参数中,下一次构建仍可能使用已经失效或已经暴露的访问路径。

05FAQ:企业恢复决策

TeamCity CVE-2026-63077 修复应该选择哪个版本?

官方确认的修复版本是 TeamCity 2025.11.7 和 2026.1.3。若现有环境尚未准备好跨入 2026.2,应优先选择与当前分支、许可证、Java、数据库及插件兼容的修复版本;无法立即升级时,可先安装适用的官方安全补丁插件。

安全补丁安装完成后,还需要核查哪些项目?

仍需核对服务器版本或补丁状态、重启与管理端可用性、VCS 连接、构建队列、未授权 Agent、服务器日志和漏洞窗口内生成的制品。补丁只阻断特定漏洞,不能证明此前没有命令执行、凭证读取或构建环境污染。

怎样判断 TeamCity 服务器是否可能已经被利用?

日志中出现 ConversionException,或未授权 Agent 中出现名称以 scan 开头的异常条目,都只能作为调查线索,不能单独证明入侵。应结合时间戳、服务器权限、进程与文件变化、凭证使用记录及制品来源进行取证。

漏洞修复后,Mac Build Agent 怎样恢复才安全?

先禁用生产路由并保持旧节点隔离,再核对 Agent 名称、主机身份、授权状态、serverUrl、Java 和自动升级结果。随后在干净 Mac 节点上完成代码拉取、Xcode 构建、测试、归档和受控签名;只有关键流水线结果可复现且制品来源可追溯,才逐步恢复生产流量。

TeamCity 被攻击后,哪些 CI/CD 凭证需要轮换?

应按实际连接关系划分责任,至少检查 VCS、制品库、云账号、部署密钥、Apple Developer 凭证、App Store Connect 密钥以及签名节点 Keychain 中的证书和私钥。轮换顺序应先处理能改变代码、制品或发布状态的高权限凭证,并同步审查漏洞窗口内生成的构建产物。

06生产放量:五项准入结论

恢复生产前,技术负责人应明确写出以下结论,而不是只在聊天工具中回复“构建正常”:

  • [ ] TeamCity 服务器已经安装修复版本,或已安装并验证官方安全补丁插件。
  • [ ] 外部访问已恢复到明确的可信网络边界,服务器运行账户符合最小权限要求。
  • [ ] 日志、未授权 Agent、进程和文件变化已经完成首轮调查,异常线索有责任人跟进。
  • [ ] VCS、制品库、云平台、Apple Developer 和签名 Keychain 凭证已完成必要轮换。
  • [ ] 干净 Mac Agent 已完成拉取代码、构建、测试、归档和受控签名验证。
  • [ ] 漏洞窗口内生成的关键制品已重新确认来源、提交关联、构建记录和完整性。
  • [ ] 旧 Mac 节点已决定重装、继续取证、隔离保留或退役,不能无结论地重新加入 Agent 池。
  • [ ] 已保留服务器备份、Agent 配置、日志和变更记录,能够在异常复发时回退或继续调查。

企业如果没有备用 Mac 节点,可以先准备短期隔离环境,用于重建 Agent、复跑关键构建和保留旧节点证据。需要评估远程 Mac 作为临时恢复资源时,可先参考 远程 Mac 方案入口按需租赁 Mac 的配置页面,重点核对节点隔离、访问权限、重置方式和团队交付流程,而不是只比较单次使用价格。

07当前方案与 Mac 方案:恢复阶段取舍

如果企业完全依赖一台长期运行的本地 Mac mini 作为签名节点,漏洞应急时常见的问题是:没有备用节点、重装会中断交付、旧工作区难以保全,而且服务器与 Mac 节点之间的权限边界往往不清晰。临时采购新硬件又会受到采购审批、交付周期、资产登记和团队远程接入方式的限制。

远程 Mac 租赁并不适合所有场景。长期稳定的高负载任务、必须接入专用物理设备,或需要完全控制机房网络和硬件生命周期的团队,仍应评估自购 Mac 或自建节点。但对于漏洞修复后的短期隔离、干净 Agent 重建、关键流水线复跑和灾备容量补位,按需准备一台真实 Mac 主机,通常比让可疑旧节点继续承担签名职责更容易控制风险。

关键不是把原有节点直接迁移到另一台机器,而是把新的 Mac 节点当作一次可审计的恢复环境:重新安装工具链,最小化授权,使用经过轮换的凭证,先完成未签名构建,再逐步开放签名和发布权限。这样做能让“服务器已修复”和“生产制品重新可信”成为两个分别验收的结论。

如果团队正在制定远程 Mac PoC,可从 远程 Mac 试用与隔离验收入口 开始,先验证 Agent 重建、权限隔离、流水线复跑和节点重置是否符合内部应急流程,再决定是否扩大到长期 iOS CI/CD 容量。

最后更新于 2026 年 9 月 6 日,数据核实自 JetBrains TeamCity 安全公告、TeamCity 升级文档、Java 21 说明、Agent 文档及 TeamCity 2026.2 官方发布记录。

FAQ常见问题

TeamCity CVE-2026-63077 应该升级到哪个版本?
官方确认的修复版本是 TeamCity 2025.11.7 和 2026.1.3。若现有环境尚未准备好跨入 2026.2,应优先选择与当前分支、许可证、Java、数据库及插件兼容的修复版本;无法立即升级时,可先安装适用于 TeamCity 2017.1 及更高版本的官方安全补丁插件。
安装 TeamCity 安全补丁后还要检查什么?
补丁安装完成后,仍需核对服务器版本或补丁状态、重启与管理端可用性、VCS 连接、构建队列、未授权 Agent、服务器日志和漏洞窗口内生成的制品。补丁只阻断特定漏洞,不能证明此前没有命令执行、凭证读取或构建环境污染。
如何判断 TeamCity 服务器是否已经被利用?
日志中出现 com.thoughtworks.xstream.converters.ConversionException,或未授权 Agent 列表中出现名称以 scan 开头的异常条目,都只能作为调查线索,不能单独证明入侵。应结合时间戳、服务器权限、进程与文件变化、凭证使用记录及制品来源进行取证。
漏洞修复后 Mac Build Agent 如何安全恢复?
先禁用生产路由并保持旧节点隔离,再核对 Agent 名称、主机身份、授权状态、serverUrl、Java 和自动升级结果。随后在干净 Mac 节点上完成代码拉取、Xcode 构建、测试、归档和受控签名;只有关键流水线结果可复现且制品来源可追溯,才逐步恢复生产流量。
TeamCity 被攻击后需要轮换哪些 CI/CD 凭证?
应按实际连接关系划分责任,至少检查 VCS、制品库、云账号、部署密钥、Apple Developer 凭证、App Store Connect 密钥以及签名节点 Keychain 中的证书和私钥。轮换顺序应先处理能改变代码、制品或发布状态的高权限凭证,并同步审查漏洞窗口内生成的构建产物。