GitLab CE/EE의 CI/CD 정규식 컴파일러에서 정수 오버플로(integer overflow) 취약점 CVE-2026-97229가 수정됐습니다. 긴급 패치 릴리스가 이미 나와 있고, 이 CVE는 CISA KEV(알려진 악용 취약점) 목록에 추가됐으며 Metasploit용 익스플로잇 모듈도 제출된 상태입니다. 자체 관리(self-managed) GitLab 인스턴스를 운영한다면 이번 점검 1순위는 단순한 정보 확인이 아니라 실제 버전 비교가 됩니다.
개요

CVE-2026-97229는 GitLab 공식 패치 공지에서 CI/CD 정규식 컴파일러의 정수 오버플로 문제로 명시된 취약점입니다. GitLab은 특정 조건에서 인증 없는 공격자에게 악용될 수 있었던 문제를 긴급 패치 릴리스 GitLab 19.4.2, 19.3.5, 19.2.8로 해결했다고 밝혔습니다. 관련 내용은 GitLab Critical Patch Release 공지에서 확인할 수 있습니다.
CVE 레코드는 GitLab CNA 명의의 PUBLISHED 상태로 등재돼 있고, CVE List V5 원문에는 'CVE-2026-97229 added to CISA KEV' 기록이 포함돼 있습니다. KEV 등재는 해당 취약점이 이미 악용 가능성이 인정된 목록에 올라 있다는 뜻이므로, 패치 우선순위를 계산할 때 일반 취약점과는 다른 취급 기준이 적용됩니다.
다만 근거로 확보한 GitLab 공지 인용은 문장 중간에서 끊겨 있어, 인증 없는 원격 코드 실행(RCE)이 성립하는 정확한 전제 조건과 CVSS 점수·심각도 등급은 이번 자료에서 확인되지 않았습니다. 이 글에서는 확인된 범위까지만 서술하고, 나머지 항목은 마지막 한계로 정리했습니다.
영향 범위
| 구분 | 근거에서 확인된 내용 |
|---|---|
| 제품 | GitLab CE/EE, CI/CD 정규식 컴파일러 결함의 영향을 받는 구성 |
| 패치 릴리스 | GitLab 19.4.2, 19.3.5, 19.2.8 (Critical Patch Release) |
| 운영 형태 | 자체 관리(self-managed) 인스턴스가 점검 초점. GitLab-managed 인프라는 GitLab 측에서 별도 관리 |
| 상태 | CVE PUBLISHED, CISA KEV 추가 |
영향 범위를 좁혀 보면 점검의 초점은 자체 관리 인스턴스입니다. GitLab은 self-managed 고객을 위해 CVE-2026-97229 악용 시도 탐지용 위협 탐지 규칙을 공개했다고 안내하고 있으며, GitLab.com 등 GitLab-managed 인프라는 이 안내 대상에서 분리됩니다.
잠재적 파급은 GitLab 서버 프로세스 권한으로 코드가 실행될 수 있다는 점에서 시작합니다. GitLab은 소스 코드 저장소, CI/CD 파이프라인, 시크릿과 토큰을 한곳에 모아두는 성격상, 이런 권한 획득이 저장소·파이프라인·DevOps 자격증명 전반의 침해를 넓힐 수 있습니다. KEV 등재 사실은 연방 기관 및 이를 준용하는 조직 기준에서 규제·컴플라이언스 관점의 긴급 패치 근거로 이어질 수 있습니다.
한편 영향을 받는 시작(하한) 버전과 릴리스 라인별 상세 버전 범위는 근거에 명시돼 있지 않습니다. 따라서 '몇 이상은 안전' 형태의 단정은 불가능하고, 자신이 운영하는 인스턴스가 속한 릴리스 라인의 패치 버전으로 올라갔는지를 직접 확인하는 방식이 필요합니다.
기술적 분석
취약점의 근본 원인은 Ruby 정규식 컴파일러의 정수 오버플로입니다. 잘못된 정규식 컴파일 처리가 경계를 벗어난 메모리 조작으로 이어지고, 최종적으로 서버 프로세스 권한의 코드 실행으로 연결되는 경로로 분석됩니다. 공개된 Metasploit 모듈 설명에 따르면 이 오버플로는 GitLab의 CI lint API를 통해 트리거될 수 있습니다. CI lint는 파이프라인 설정을 검증하는 기능인 만큼, 본래 정규식이나 YAML 검증용 입력을 만드는 지점이 공격 진입점으로 지목되는 것입니다.
공개 PoC·익스플로잇 분석
- 출처: Rapid7이 유지보수하는 Metasploit Framework에 CI lint 경유 GitLab RCE용 익스플로잇 모듈을 추가하는 Pull Request #22017이 공개돼 있습니다. 모듈 설명은 이 취약점을 Ruby 정규식 컴파일러의 정수 오버플로로 규정하고, GitLab의 CI lint API를 통해 유발할 수 있다고 서술합니다.
- 전제조건: 모듈 walkthrough에 제시된 동작은 대상 GitLab 버전과 설치 레이아웃(native layout) 확인, 임시 액세스 토큰을 이용한 페이로드 브랜치 준비, CI lint 요청으로 특수하게 구성된 정규식 입력 전송이라는 순서로 정리됩니다. 즉 공개 모듈이 전제로 삼는 환경은 CI lint API에 도달 가능한 self-managed GitLab이며, 버전·레이아웃 확인과 토큰 발급·브랜치 생성이라는 준비 단계를 포함합니다.
- 입증 범위: 근거에서 확인되는 것은 동작 절차가 기술된 익스플로잇 모듈 PR의 존재와 CVE List V5의 CISA KEV 추가 기록입니다. KEV 등재는 악용 가능성이 기관 차점에서 인정됐다는 뜻이고, 모듈 PR은 재현 가능한 코드가 공개 영역에 있다는 뜻입니다. 그러나 두 사실 모두 특정 환경에서 실제 침해가 일어났다는 증거는 아니며, 제공된 근거에는 실제 악용 사례의 대상 조직·시점·방식 같은 세부 내용이 없습니다. 모듈 설명 인용문도 문장 중간에서 끊겨 있어 Ruby 버전 등 실행에 필요한 세부 조건 전체는 확인되지 않습니다.
- 운영 의미: 인증 없는 취약점으로 안내되는 항목이라 해도, 익스플로잇 모듈의 실제 절차에는 버전·레이아웃 확인 트래픽, 임시 토큰 발급, 페이로드 브랜치 생성, CI lint 요청이 얽혀 있습니다. 따라서 탐지 관점의 관찰 지점은 CI lint 요청 단 하나의 이벤트가 아니라 이 이벤트들의 조합이 됩니다. 단일 로그 항목만 보는 모니터링이나 CI lint 경로만 좁혀 보는 알림 규칙은 이 조합을 놓치기 쉽고, 공개 모듈 존재 자체가 자동화된 시도를 늘린다는 점에서 노출된 self-managed 인스턴스는 패치 전까지 접근 통제와 로그 상관 분석을 함께 봐야 합니다.
악용 위협 수준과 관련해, 근거에서 확인되는 사실은 두 가지입니다. 첫째 CVE는 CISA KEV 목록에 추가됐습니다. 둘째 Metasploit Framework에 CI lint 경유 GitLab RCE용 익스플로잇 모듈 추가 PR이 존재합니다. 이 두 사실은 재현 가능한 도구가 공개 영역에 있다는 뜻이므로, 노출된 self-managed 인스턴스의 악용 가능성은 높게 잡아 점검해야 합니다. 다만 제공된 근거에는 실제 침해 사례의 구체적 세부(대상 조직, 시점, 방식)가 없어 피해 규모나 특정 위협 행위자와의 연관은 확인하지 못했습니다. 이 구분은 '야생에서 대규모 공격이 진행 중'이라는 서사와 '악용 가능한 조건과 도구가 확인됨'이라는 서사를 혼동하지 않기 위해 필요합니다.
대응 방안
즉시 점검
- 자체 관리 GitLab 인스턴스의 현재 버전을 확인하고, 19.4.2 / 19.3.5 / 19.2.8 중 해당 릴리스 라인 패치 버전으로 즉시 업그레이드합니다. 버전 확인 없이는 다른 모든 조치가 순서가 없는 작업이 됩니다.
- 업그레이드 전까지 CI lint API로 향하는 접근을 내부 신뢰 네트워크로 제한하거나 역방향 프록시, IP 허용 목록 등 접근 통제 강화로 노출면을 줄입니다.
- GitLab이 self-managed 고객을 위해 공개한 위협 탐지 항목 중 CVE-2026-97229 악용 시도 탐지용 규칙을 SIEM·로그 파이프라인에 연동하고, GitLab 위협 탐지 안내에서 적용 범위를 확인합니다.
- CI lint API로 향하는 비정상적으로 복잡하거나 반복적인 정규식 페이로드 요청 패턴을 모니터링합니다.
- 버전 및 레이아웃 확인, 임시 토큰 발급, 예상치 못한 브랜치 또는 커밋 생성, GitLab 서버와 CI runner의 비정상 프로세스라는 이벤트 순서를 상관 분석 규칙으로 묶어 점검합니다. 이는 위 공개 PoC 분석에서 확인된 모듈 동작 순서를 그대로 관찰 지점으로 옮긴 것입니다.
지속 대응
- GitLab Critical Patch Release 추적과 신속한 업데이트 체계를 유지합니다. 인증 없는 RCE 등급의 패치는 일반 패치와 같은 변경 관리 창구를 기다리지 않도록 절차를 단축해 두는 편이 실무적으로 맞습니다.
- Ruby 런타임 의존성을 포함한 GitLab 구성 요소의 취약점 스캔을 주기적으로 수행합니다. 컨테이너 기반 배포라면 이미지 태그를 패치 버전으로 고정하고 갱신합니다.
- CI lint 등 외부에 노출된 API에 대한 접근 통제와 최소 권한 원칙을 지속적으로 적용합니다. 이 취약점의 경우 패치 전 노출면 축소와 패치 자체가 같은 축의 대응입니다.
근거상 한계
- GitLab 공식 공지 인용이 잘려 있어 인증 없는 RCE의 정확한 전제 조건과 CVSS 점수·심각도 등급을 근거 기반으로 특정할 수 없습니다. 패치 우선순위는 KEV 등재와 공개 익스플로잇 존재라는 확인된 사실로 판단해야 합니다.
- 영향을 받는 시작 버전과 릴리스 라인별 상세 범위, CISA KEV 등재 날짜가 근거에 없어 등재 시점 기반의 대응 기한을 산정할 수 없습니다.
- 실제 야생 악용 사례의 세부 내용, GitLab 위협 탐지 규칙의 개별 규칙 이름과 구체 적용 방법, Metasploit 모듈 설명 인용의 잘린 부분(세부 실행 조건)도 제공된 근거에서 확인되지 않습니다.
참고자료
- GitLab Critical Patch Release: 19.4.2, 19.3.5, 19.2.8 — CVE-2026-97229
- CVE-2026-97229 record — CISA KEV addition timeline
- Add Exploit Module for GitLab RCE via CI Lint [CVE-2026-97229] (PR #22017)
함께 읽으면 좋은 글
- CVE-2026-111357: Ivanti Connect Secure 핵심 기능 인증 누락과 권한 상승 체인 점검
- CVE-2026-114437: go-chi ClientIPFromXFF의 X-Forwarded-For 기반 클라이언트 IP 스푸핑 점검
- CVE-2026-118527: Ivanti Connect Secure 예측 가능한 식별자와 파일 업로드 체인 점검
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!