关于 fix-gitlab-vuln
fix-gitlab-vuln 是面向管理自托管 GitLab 的 Agent 修复技能,用于处理受 CVE-2026-110264 影响的部署。它先只读盘点部署代码并等待审批,再更新获批的 IaC,并准备包含发布安排和部署后检查的 PR。
主要功能
- 01只读盘点 GitLab 部署配置
- 02分类部署的漏洞状态
- 03选择并确认修复版本或 Chart
- 04验证部署配置
- 05准备包含停机和部署后检查的 PR
适用场景
- 01从基础设施仓库查找自托管 GitLab 版本
- 02修补获批的 Omnibus、Docker、Helm 或源码部署
- 03为旧版实例规划所需升级路径
- 04准备 GitLab 发布的验证步骤
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ cognitionai/ devin-vuln-fixes --skill fix-gitlab-vuln安装后在 Claude Code 中输入/fix-gitlab-vuln确认已加载。
详细介绍
修复 GitLab 漏洞(CVE-2026-110264,2026 年 10 月 21 日关键补丁)
概述
查找并修复受 CVE-2026-110264 影响的自托管 GitLab 实例。这是一个 CVSS 10.0 级、无需身份验证即可远程执行代码的漏洞,由 Onigmo 正则表达式编译器中的整数溢出导致,影响从 7.0 开始的所有 CE/EE 版本。已修复的版本:19.5.1、19.4.3、19.3.6、19.2.9、19.1.9、19.0.10 和 18.11.13。同一补丁版本还修复了 2 个高危、6 个中危和 4 个低危问题,并包含 10 月 8 日针对 CVE-2026-97229 的修复(CVSS 10.0,已在 19.4.2/19.3.5/19.2.8 中修复)。GitLab.com 和 GitLab Dedicated 已完成修补,因此本操作手册仅适用于自托管安装。先以只读方式盘点。编辑前请等待批准。修补部署 GitLab 的 IaC,验证运行版本,并创建范围明确的 PR。
需要用户提供的信息
- 存放 GitLab 基础设施代码的仓库或组织(Helm values、Terraform、Ansible、Compose、Packer)。默认:用户指定的仓库,或 Agent 可访问的所有仓库。
- 用户运行的是 GitLab.com、GitLab Dedicated 还是自托管实例;如果是自托管实例,还需提供实例 URL。
- 批准要修补的部署,并为单节点实例提供维护窗口。
流程
- 在克隆之前,使用 Git 托管平台的代码搜索功能,以只读方式搜索所有可访问的仓库(如果没有代码搜索功能——这在 GitHub Enterprise Server 和自托管 GitLab 中很常见——则进行浅克隆,并运行
rg -n --hidden --glob '!.git')。查找:gitlab/gitlab-ee和gitlab/gitlab-ce镜像,以及 CNG 镜像(registry.gitlab.com/gitlab-org/build/cng/*)。gitlabHelm chart(charts.gitlab.io)和 GitLab Operator。- Ansible/Chef/Puppet/cloud-init/Packer 中的
gitlab-ee/gitlab-ceOmnibus 软件包。 - 部署 GitLab 的 Terraform 模块和 AMI。
- 源码安装(
gitlab-foss/gitlab检出)。
- 生成一张清单表,列出:仓库、文件:行号、部署类型(Omnibus、Docker、Helm、Operator、源码)、版本、当前版本或 chart 版本、精确/浮动固定方式、节点拓扑(单节点或多节点)以及置信度。单独列出无法搜索的仓库。如果用户使用 GitLab.com 或 Dedicated,则说明无需采取任何操作并停止。
- 将每项标记为已修复、易受攻击或未知。如果实例 URL 可访问,则与
/help或/api/v4/version的结果进行比较(需要令牌)。否则依据固定的版本判断。 - 停止。展示表格,标出升级时会发生停机的单节点实例,并询问用户要修补哪些部署。在此发现阶段不要做任何更改。
- 逐个处理获批的部署。如果你的 Agent 支持子 Agent,则每个仓库运行一个,最多同时运行五个。编辑前,重新核对该仓库的清单。
- 对每个仓库,选择同一 minor 版本中已修复的补丁版本,并在编辑前确认该版本存在。当公共主机受阻时,检查仓库 CI 已使用的镜像仓库或软件包镜像(Artifactory、Nexus、Harbor 或云镜像仓库);如果两者都无法访问,则在 PR 中将目标版本标记为未经验证,并由 CI 构建来验证。
- Docker:
gitlab/gitlab-ee:<ver>-ee.0或gitlab/gitlab-ce:<ver>-ce.0。如果按摘要固定,则解析并固定新的摘要。 - Helm/Operator:在 https://docs.gitlab.com/charts/installation/version_mappings/ 查询 chart 版本(例如,GitLab 19.5.1 对应 chart 10.5.1,GitLab 18.11.13 对应 chart 9.11.14)。如果该页面无法访问,则针对 chart 仓库或集群使用的镜像运行
helm search repo gitlab/gitlab -l。升级 chart 版本,而不只是global.gitlabVersion。 - Omnibus:在配置管理代码中固定
gitlab-ee=<ver>-ee.0(或对应的 CE 版本)。 - 源码:检出已修复的标签,并遵循目标版本的源码升级指南。
- Docker:
- 如果当前版本落后一个以上的 minor 版本,或处于不受支持的分支,则报告所需的升级路径中间步骤(https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/),不要跳跃升级。只有获得用户批准后,才能进行多步升级。
- 在每个 PR 中添加发布说明:
- 升级前备份。
- 单节点实例需要停机,因为 GitLab 启动前必须完成迁移。
- 多节点实例的零停机流程。
- 部署后迁移。
- 在不访问生产环境的情况下,尽可能进行验证:
helm template/helm lint、terraform validate/plan、ansible-lint和 Compose 配置检查。列出供用户运行的部署后检查:gitlab-rake gitlab:env:info显示已修复的版本。gitlab-rake gitlab:check。gitlab-ctl status,或 Helm 上的 Pod 就绪状态。- 后台迁移已完成。
- Web、通过 SSH 和 HTTPS 的 Git,以及 CI 运行器均正常工作。
- 每个仓库单独开一个范围明确的 PR,列出每项部署的变更前 → 变更后、chart/镜像/软件包版本、摘要、升级路径说明、停机预期、验证结果以及部署后检查清单。
- 将各仓库的结果汇总到一张表中:仓库、PR、部署类型、变更前 → 变更后、停机情况、验证、受阻事项、后续工作。提醒用户,变更部署之前,实例仍然易受攻击。
规格
- 发现过程为只读,并在明确的审批关口结束。
- 确认每个目标镜像、图表或软件包存在后,才能进行编辑。
- 每个 PR 都要说明停机影响,并附上部署后的验证清单。
- 完成意味着每个获批部署都有一个 PR,或已报告为受阻并给出明确的下一步。
建议和提示
- 可通过互联网访问的实例优先级最高,因为此漏洞无需身份验证即可利用。
- GitLab 为自托管实例发布了两项威胁检测:“Onigmo native worker crash”和“Org mode render error burst”。请安全团队关注这些检测,以便查找此前的利用行为。
- GitLab Runner 和 GitLab Agent 的版本单独管理,且未列入本安全公告。请勿将它们作为此次修复的一部分进行升级。
- Geo 辅助节点以及多节点安装中的每个节点都必须运行相同版本。
禁止的操作
- 用户批准部署前,不得进行编辑。
- 不得猜测镜像标签、图表版本或软件包版本。
- 不得跳过所需的升级路径步骤,也不得告知用户跳过迁移。
- 不得更改版本类型(CE↔EE)或部署类型。
- 不得对生产环境中的 GitLab 实例运行命令。
评论
支持 Markdown