Alpine Linux 项目团队披露,其运营的 GitLab 实例在 10 月 20 日至 21 日(美国时间)遭到攻击者利用一个 CVSS 评分满分 10.0 的远程代码执行漏洞 CVE-2026-97229 的尝试。由于部分日志丢失、无法排除代码已被执行的可能,项目最终选择从零重建该实例,而非简单清理。
服务器已于 10 月 27 日关闭,10 月 29 日以 Ruby 3.3.13 和 GitLab 19.3.7 恢复运行。GitLab 用户被要求重置密码、重新注册双因素认证、生成新的访问令牌并接受新的 SSH 主机密钥,项目维护者还需重新录入全部 CI/CD 环境变量。
漏洞与攻击经过
此次事件涉及的漏洞是存在于 GitLab 社区版(CE)和企业版(EE)中的远程代码执行缺陷 CVE-2026-97229,CVSS 基础评分为满分 10.0。按照 Alpine 的说明,未认证攻击者在特定条件下,可通过在 CI/CD 流水线配置文件中嵌入精心构造的正则表达式,在 GitLab 服务器上执行任意代码。问题的根源在于 Ruby 语言正则表达式引擎 Onigmo 的另一处缺陷。
攻击在美东时间 10 月 20 日至 21 日之间得到确认。在此期间,一个新注册的账号提交了构造过的 CI 配置,导致 GitLab worker 共崩溃八次,其中四次攻击者已推进到利用的中间阶段,但在下一步失败。Alpine 指出,攻击者曾获取该项目的 GitLab 容器镜像,这暗示攻击手法可能是针对项目的构建环境定制的。
GitLab 已于 10 月 12 日在 19.4.2、19.3.5 和 19.2.8 版本中修复该漏洞,修复方式是对 GitLab 自有软件包和容器镜像中捆绑的 Ruby 打上一系列补丁;上游 Ruby 也在 10 月 23 日发布了对应版本。
补丁为何未生效
Alpine 的更新过程出现多处失误,彼此叠加。10 月 13 日的一次更新中,项目误将版本升级到 19.3.4,而非原定的 19.3.5。10 月 22 日又升级到 19.3.6,但该版本并不包含针对上述缺陷的修复,原因是 Alpine 的镜像使用的是标准、未打补丁的 Ruby 构建。
这意味着表面上完成了版本更新,实际运行的代码中修复并未落地。Alpine 直到 10 月 26 日才意识到服务器仍处于易受攻击状态。GitLab 也明确提醒使用自定义镜像或自建 Ruby 运行时的管理员,仅升级 GitLab 本身并不足够,需要从软件栈顶层到底层逐层核实修复是否真正反映在正在运行的代码中。
重建与用户影响
Alpine 最终选择重建实例,而非简单清理。项目方的判断依据是:一次成功的利用不会在崩溃记录或 Web 日志中留下痕迹;攻击当日的部分日志已经丢失,且 Alpine 与其托管服务商均未记录出站流量。项目解释称,由于无法排除代码被执行的可能,而确认所需的证据已不复存在,因此选择了更艰难的道路,从零重建 GitLab 实例。
项目维护者还需重新录入全部 CI/CD 环境变量值,前提是假定此前的值可能已经泄露。
漏洞仍在被利用
该漏洞目前仍处于活跃利用状态。美国网络安全和基础设施安全局(CISA)于 10 月 30 日将 CVE-2026-97229 列入已知被利用漏洞(KEV)目录。非营利安全组织 Shadowserver Foundation 确认,截至当周末仍有超过 1000 台未打补丁的 GitLab 服务器暴露在外。
GitLab 近期接连出现最高严重级别的漏洞。9 月发现的仓库提交相关 API 缺陷 CVE-2026-85706 被认为可导致凭据等机密被窃取;10 月又发现正则表达式编译器中的 CVE-2026-110264,可允许任意代码执行。按 Shadowserver 的统计,约 3.9 万台 GitLab 实例中有超过 1.13 万台处于易受攻击状态。
GitLab 并非唯一目标。云安全公司 Radware 报告称,至少发生了 83 起针对 61 个公开暴露的 GitHub 仓库的攻击,多个知名开源项目受到影响。这些事件的节奏都很快:9 月的 GitLab 漏洞在修复发布约一天后即被观察到遭到攻击,而 Alpine 此次在修复发布八天后遭遇入侵尝试。许多攻击的目标是窃取开发者凭据,包括 CI/CD 变量、runner 令牌、SSH 密钥以及 AI 助手数据。
后续整改措施
为防止再次发生,Alpine 承诺在一天内应用 GitLab 的关键安全版本,并在每次发布时检查是否需要在自建构建中应用 Ruby 等组件补丁;同时捕获出站连接日志,将日志保留期延长至 14 天或以上,并采用可独立于 GitLab 验证的签名发布标签。
这一案例显示,认为仅把应用更新到最新版本就足够是危险的。除补丁管理外,限制已泄露账号、工作流和服务器的影响范围同样重要,包括强制双因素认证与通行密钥、为工作流令牌授予最小必要权限、以 OpenID Connect 等方式用短期凭据替代长期云密钥,并定期轮换密码、API 令牌、证书和部署密钥。
在构建环节,不受信任的构建应放在一次性、隔离的 runner 上处理,避免特权容器,不应在共享构建机上放置部署凭据和 SSH 密钥。由于必要证据已丢失,Alpine 无法排除攻击成功,只能承担全面重建的代价;延长日志保留、记录出站流量以及采用可独立验证的发布标签,正是判断系统能否通过打补丁恢复、还是必须从零重建所依赖的材料。
要点
- 漏洞 CVE-2026-97229 的 CVSS 评分为 10.0
- 攻击确认发生在 10 月 20 日至 21 日
- GitLab 工作进程在攻击期间崩溃八次
- 服务器 10 月 29 日以 GitLab 19.3.7 恢复
- CISA 已于 10 月 30 日将该漏洞列入 KEV 目录

正在读取登录状态…
暂无讨论,说说你的看法吧