개요

GitLab CE/EE의 CI/CD 파이프라인에서 정규식을 컴파일하는 경로에 정수 오버플로 취약점 CVE-2026-97229가 확인되었습니다. GitLab은 이 문제를 크리티컬 패치 릴리스 19.4.2, 19.3.5, 19.2.8에서 수정했다고 공지했고, 같은 공지문에는 특정 조건을 전제로 인증되지 않은 사용자와 관련된 가능성이 언급되어 있습니다. 다만 우리가 확보한 공지 발췌는 문장이 잘린 형태로 끝나므로, 그 표현이 포함하는 정확한 조건과 범위는 공지 원문으로 확인해야 합니다.
이 취약점이 주목받는 이유는 트리거 지점이 CI/CD 워크플로의 한가운데 있다는 점입니다. Metasploit 프레임워크에는 GitLab CI lint를 경유하는 RCE를 표방하는 익스플로잇 모듈 추가 PR(PR #22017)이 제출되었고, 그 설명문은 CVE-2026-97229가 Ruby 정규식 컴파일러의 정수 오버플로이며 GitLab의 CI lint API를 통해 트리거될 수 있다고 서술합니다.
분명히 해 둘 선이 있습니다. 이번에 확인된 것은 패치된 정수 오버플로 취약점, GitLab 보안 팀의 Onigmo native worker 크래시 탐지 문서, 그리고 CI lint API를 지목하는 공개 PR입니다. 확인되지 않은 것은 실제 환경의 악용 관측, CISA KEV 등재 여부, 공식 CVSS 점수와 심각도 등급, 정확한 취약 버전 범위입니다.
영향 범위
제공된 자료에서 확인되는 영향 범위는 다음입니다.
- GitLab CE/EE의 CI/CD 정규식 컴파일러 경로, 즉 Ruby의 Onigmo 엔진이 호출되는 지점
- GitLab의 CI lint API를 통해 정규식 컴파일이 일어나는 경로. PR 설명문은 이 API를 트리거 지점으로 지목합니다
- CI 파이프라인 정의의
rules:*:regexp패턴이 컴파일되는 경로 - PR 설명문이 조건으로 언급하는 Ruby 3.3 계열 런타임 환경. 다만 이 문장은 발췌에서 잘려 있어 버전 조건의 완전한 의미는 단정할 수 없습니다
정확한 취약 버전의 상한과 하한은 이번 자료 어디에도 명시되어 있지 않습니다. 따라서 적용 대상은 GitLab 패치 릴리스 공지가 안내하는 19.4.2 / 19.3.5 / 19.2.8 체인과, 각 조직이 따르고 있는 GitLab 공식 지원 문서를 대조해 확인해야 합니다. 이 글은 버전 번호만으로 노출 여부를 자동 판정하는 규칙을 제시하지 않겠습니다.
기술적 분석
정규식 컴파일에서 열리는 정수 오버플로
GitLab 보안 팀의 Onigmo native worker 크래시 탐지 문서가 확인하는 사실은 명확합니다. 공격자가 제어한 입력이 Ruby의 Onigmo 엔진으로 전달되는 경로에서, 조작된 rules:*:regexp 패턴이 INT_MAX(2 GiB)보다 큰 정규식 프로그램으로 컴파일되고, 그 과정에서 부호 있는 32비트 점프 오프셋이 음수로 래핑됩니다. 이 유형은 CWE-190으로 분류되는 정수 오버플로입니다.
여기까지가 자료로 확인되는 지점이고, 그 너머는 출처마다 서로 다른 표현을 씁니다. GitLab 공지문은 특정 조건을 전제로 인증되지 않은 사용자와 관련된 가능성을 언급합니다. Metasploit PR은 같은 CVE에 대해 Ruby 정규식 컴파일러의 정수 오버플로를 CI lint API로 트리거할 수 있다고 적으며 RCE를 표방하는 모듈 추가를 요청합니다. 반대로 정수 오버플로가 어떤 단계로 코드 실행 가능한 상태까지 이어지는지에 대한 기술적 설명은 이번 근거에 없습니다. 따라서 오버플로와 코드 실행을 하나의 사실로 잇지 않고, 확인된 메커니즘과 각 출처가 주장하는 결과를 분리해 이해하는 것이 정확합니다.
우회(bypass)로 파생된 취약점이라는 의미
GitLab 보안 팀의 탐지 문서는 CVE-2026-97229를 선행 수정인 CVE-2026-93577의 우회(bypass)로 설명하고, 같은 Onigmo native worker 크래시 계열 문서가 CVE-2026-93577, CVE-2026-97229, CVE-2026-110264를 함께 다룹니다.
여기서 독자가 가져가야 할 판단은 두 가지입니다. 첫째, 예전에 배포된 패치로 종결된 문제로 다루면 우회 경로에 그대로 남을 수 있습니다. 둘째, 같은 컴포넌트에서 수정과 우회가 반복 관찰된다는 사실은, 버전 점검 시 가장 최근 크리티컬 패치 릴리스를 기준으로 삼아야 할 근거가 됩니다. 두 CVE의 세부 기술적 차이는 이번 자료로 확인되지 않았으므로 그 차이 자체는 단정하지 않습니다.
트리거 지점으로서의 CI lint API
공개된 두 자료는 공통된 지점을 가리킵니다. Metasploit PR 설명문이 GitLab의 CI lint API를 통한 트리거 가능성을 명시하고, GitLab 공지문은 특정 조건에서의 미인증 관련 가능성을 언급합니다.
다만 이 둘을 하나의 결론으로 합치지는 않겠습니다. CI lint API 경로 도달에 필요한 인증 조건과 그 밖의 전제조건은 근거 자료에 정의되어 있지 않으며, 인스턴스의 설정과 PoC 구현 방식에 따라 달라질 수 있는 항목입니다. 공지문이 말한 특정 조건이 무엇을 뜻하는지도 발췌 범위로는 확정할 수 없습니다. 따라서 열려 있으면 악용된다는 식의 단정 대신, 우리 인스턴스에서 그 경로가 어떤 인증·접근 조건에 놓여 있는지를 직접 확인해야 하는 미검증 항목으로 다루는 것이 정확합니다.
공개 PoC·익스플로잇 분석
출처. 이번에 확인된 공개 근거는 Metasploit PR #22017입니다. 이 PR은 GitLab CI lint를 경유하는 RCE를 겨냥한 익스플로잇 모듈 추가 요청이고, 설명문은 CVE-2026-97229가 Ruby 정규식 컴파일러의 정수 오버플로이며 GitLab의 CI lint API를 통해 트리거될 수 있다고 적고 있습니다. 같은 설명문은 어드바이저리 GHSA-9hj5-r43h-h3xg를 참조하고 Ruby 3.3을 현재 조건으로 언급합니다.
전제조건. 자료에 드러난 전제는 CI lint API에 도달 가능한 네트워크 경로, 정규식 컴파일러로 입력이 전달되는 rules:*:regexp 처리 경로, PR이 언급하는 Ruby 계열 조건입니다. 이 중 인증 요구 여부와 그 밖의 실행 조건은 명시되지 않았으므로 인스턴스별·구현별 확인 대상입니다. Ruby 3.3 관련 문장은 잘린 형태로 확인되어 버전 조건의 전체 의미를 단정할 수 없습니다.
입증 범위. 이 근거로 확인할 수 있는 것은 RCE를 표방하는 모듈 추가 PR이 존재하고, 그 PR이 CI lint API를 통한 트리거를 설명한다는 사실까지입니다. 여기서 확인되지 않는 것은 PR의 머지 및 배포 완료 여부, 특정 환경에 대한 완전한 익스플로잇 동작, 실제 악용 관측, CISA KEV 등재 여부, 공식 심각도 등급과 CVSS 점수, 정확한 취약 버전 범위, CVE-2026-93577와의 세부 기술적 차이입니다.
운영상 의미. PoC 공개의 실효적 의미는 트리거 경로와 입력 형태가 공개 문서로 남는다는 점입니다. PR 제출 사실 자체가 완전한 익스플로잇의 동작이나 재현 난이도 하락을 증명하지는 않으며, 머지·배포 여부와도 별개의 상태입니다. 따라서 운영에서 확인할 지점은 PR 배포 상태를 기다리는 것이 아니라, 근거에 이미 제시된 두 변수, 즉 현재 버전과 CI lint API 경로의 도달 조건입니다.
탐지에서 확인되는 것과 남는 공백
탐지 측면의 기준점은 GitLab 보안 팀의 Onigmo native worker 크래시 탐지 문서입니다. 이 문서가 다루는 관측 가능 증상은 Onigmo native worker 크래시이고, CVE-2026-93577 / CVE-2026-97229 / CVE-2026-110264를 같은 문서에서 함께 다루는 만큼, 해당 문서가 안내하는 로그와 규칙 범위가 이번에 따라갈 수 있는 탐지 기준입니다. 그 밖의 세부 탐지 지침은 제공된 근거에 없어 이 글에서는 다루지 않습니다. CISA KEV 등재 여부도 확인하지 못해 미검증 항목으로 남습니다.
대응 방안
패치 적용
근거가 뒷받침하는 핵심 조치는 GitLab이 공지한 패치 릴리스로의 업그레이드입니다. 19.4.2 / 19.3.5 / 19.2.8 중 자신의 릴리스 체인에 해당하는 버전으로, 계획이 아닌 실행 단계로 올립니다. 이 취약점이 CVE-2026-93577의 우회로 설명되는 만큼 과거에 한 번 패치했다는 이력은 확인 근거가 되지 못합니다. 현재 설치 버전을 직접 확인해 최신 크리티컬 패치 릴리스 도달 여부를 봐야 합니다.
점검 범위
- Onigmo native worker 크래시 탐지 문서를 기준으로, 문서가 안내하는 로그와 규칙 범위에서 Onigmo native worker 크래시 징후를 확인합니다.
- CI lint API 경로가 우리 인스턴스에서 어떤 인증·네트워크 조건에 도달 가능한지는 근거에 없는 정보이므로 실제 설정에서 직접 확인합니다.
- 버전 적용 범위는 패치 릴리스 공지문과 조직이 따르는 GitLab 공식 지원 문서를 대조해 판단합니다.
우선순위 판단
확인된 사실은 세 가지입니다. GitLab이 이미 패치 릴리스를 제공했다는 점, CI lint API를 통한 트리거 가능성이 공개 자료에 서술되어 있다는 점, RCE를 표방하는 Metasploit 모듈 추가 PR이 제출되어 있다는 점입니다. 이 사실만으로는 특정한 순위나 마감 시한을 도출할 수 없습니다. 이번 근거에는 실제 악용 사례도, KEV 등재도, 공식 심각도 등급도 없기 때문입니다. 따라서 패치 일정은 각 조직의 위험평가, 특히 CI lint API 경로의 도달 조건과 CI/CD 파이프라인이 다루는 자산의 민감도를 확인한 뒤 정해야 합니다. 이 해석은 확인된 사실에 미검증 조건을 얹은 조건부 판단이며, 관측된 공격이나 KEV 등재를 전제로 하지 않습니다.
패치 외 조치에 대하여
이번 근거가 뒷받침하는 대응은 패치 릴리스 적용으로 한정됩니다. CI lint API나 특정 처리 경로에 대한 네트워크 레벨 차단, 인증 요구 강화 같은 임시 구성 완화는 제공된 자료에 근거가 없어 제안하지 않습니다. 효과가 확인되지 않은 구성 조치를 패치보다 앞에 두는 편이 좋다는 근거도 이번 자료에는 없습니다. 구성 완화가 필요해지는 상황은 GitLab 공식 지침이나 벤더 권고가 확인된 뒤, 우리 환경의 위험평가에 따라 판단하는 편이 안전합니다.
지속 관리
- GitLab 크리티컬 패치 릴리스를 정기적으로 반영하는 업그레이드 주기를 유지합니다.
- 같은 Onigmo 및 CI 정규식 컴파일 경로에서 CVE-2026-93577, CVE-2026-97229, CVE-2026-110264가 반복 관찰된 만큼, 단일 CVE가 아니라 컴포넌트 단위의 보안 advisory 이력을 추적하는 편이 점검에 더 유용합니다.
참고자료
- GitLab Critical Patch Release: 19.4.2, 19.3.5, 19.2.8
- Add Exploit Module for GitLab RCE via CI Lint [CVE-2026-97229] (PR #22017)
- Onigmo native worker crash detection (CVE-2026-93577 / CVE-2026-97229 / CVE-2026-110264)
함께 읽으면 좋은 글
- External Secrets Operator CVE-2026-26287: Webhook Generator 레이블 우회와 시크릿 반출 경로 점검
- CVE-2026-97229: GitLab CI/CD 정규식 컴파일러 정수 오버플로와 인증 없는 RCE 점검
- CVE-2026-41709 VMware ESX 로깅 불충분 취약점: CVSS 2.7과 KEV 등록 사이에서 점검할 것
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!