从 TeamCity 到语义漂移 — CI/CD 平台的认证绕过模式与披露伦理
从 TeamCity 到语义漂移 — CI/CD 平台的认证绕过模式与披露伦理 免责声明:本博客文章仅用于教育和研究目的。提供的所有技术和代码示例旨在帮助防御者理解攻击手法并提高安全态势。请勿使用此信息访问或干扰您不拥有或没有明确测试权限的系统。未经授权的使用可能违反法律和道德准则。作者对因应用所讨论概念而导致的任何误用或损害不承担任何责任。 系列说明:本文是该系列的第二篇,讨论漏洞的利用影响、披露争议,以及将 CVE-2024-27198 放入更广阔的"语义漂移"模式中进行横向比较。技术层面的代码分析、实验环境和发现方法论见第一篇:[[teamcity-cve-2024-27198-discovery]]。 目录 引言:跳出单个漏洞 漏洞可利用性与在野利用 漏洞披露与社区争议 语义漂移:同类漏洞的横向比较 五条件审计清单 结论 参考与来源 1. 引言:跳出单个漏洞 第一篇还原了 CVE-2024-27198 的发现过程——从不带答案的基线建模,到语义变异、灰盒收敛,再到定向验证。 但如果只把它看成一个孤立事件,就错过了它背后更值得关注的东西。做完这篇分析后我横向翻了翻过去几年类似的认证绕过漏洞,发现它们不是散点,而是同一根因的反复出现:请求在流经多个路径解析器时,语义发生了漂移,而鉴权决定发生在漂移之前。 这篇文章想做的事就是把这条线拉通。先还原漏洞造成的真实影响和披露过程中的争议,再用几个同行案例说明这个模式有多常见,最后给一个可以在审计时直接用的检查清单。 2. 漏洞可利用性与在野利用 2.1 影响能力边界 结合 Rapid7 在 2024-03-04 披露中给出的公开利用样例,漏洞的实际危害可以拆成一条更具体的能力链: 图2-1 从未认证访问到供应链外溢的能力升级路径。 未认证调用管理 REST 接口(跨越登录边界) 攻击者可构造类似 /does-not-exist?jsp=/app/rest/...;.jsp 的请求,把本应受保护的 REST 端点暴露给未登录请求。 这一步代表的是直接获得对管理 API 的未认证调用能力。 直接创建管理员账号(权限立刻提升到 SYSTEM_ADMIN) Rapid7 的公开示例显示,攻击者可向 /app/rest/users 发起创建用户请求,并在请求体中赋予 SYSTEM_ADMIN 角色。 返回结果中的用户对象会包含管理员角色字段,这意味着攻击者无需先拿低权限账号,起手就是全局管理员。 生成管理员访问令牌(持久化控制) 除了创建管理员用户,攻击者还可针对用户 token 接口(如 /app/rest/users/id:1/tokens/...)生成管理员 token。 一旦 token 生成成功,即使后续密码策略变更,攻击者仍可能通过 API 持续访问,形成较强持久化。 接管 TeamCity 控制面(项目/构建/制品/代理) 在管理员权限下,影响范围不是单一页面,而是整个 TeamCity 控制面: ...