Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions ko/news/_posts/2026-10-23-regexp-fixes-for-gitlab-cves.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
layout: news_post
title: "GitLab의 CVE-2026-89078, CVE-2026-93577, CVE-2026-97229, CVE-2026-110264와 관련된 정규표현식 컴파일 수정"
author: "k0kubun"
translator: "shia"
date: 2026-10-23 03:11:22 +0000
lang: ko
---

Ruby 4.0.9, 3.4.12, 3.3.13을 릴리스했습니다. 이번 릴리스에서는 Ruby의 정규표현식 엔진(Onigmo)에 있는 여러 버그를 수정했습니다. GitLab은 이 버그들을 악용하면 GitLab 서버에서 원격 코드를 실행할 수 있다는 것을 발견했습니다. GitLab은 이 문제들에 대해 CVE 4건을 공개했으며, 이번 Ruby 릴리스에는 그 원인이 된 Ruby 버그의 수정이 포함되어 있습니다.

## 배경

GitLab은 CI 설정의 패턴 등 사용자가 제공한 정규표현식을 `Regexp.new`로 컴파일합니다. GitLab은 의도적으로 조작된 패턴을 Ruby가 컴파일하는 도중 메모리가 손상될 수 있고, 이를 악용하면 GitLab 서버에서 원격 코드를 실행할 수 있다는 것을 발견했습니다. GitLab은 자체 배포하는 Ruby에 패치를 적용한 릴리스로 이 문제들에 대응했으며, 다음 CVE 번호를 할당했습니다.

* [CVE-2026-89078](https://www.cve.org/CVERecord?id=CVE-2026-89078): 정규표현식 파서의 중복 할당 해제 문제([GitLab 19.4.1](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-1-released/))
* [CVE-2026-93577](https://www.cve.org/CVERecord?id=CVE-2026-93577): 정규표현식 컴파일러의 정수 오버플로 문제([GitLab 19.4.1](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-1-released/))
* [CVE-2026-97229](https://www.cve.org/CVERecord?id=CVE-2026-97229): CI/CD 정규표현식 컴파일러의 정수 오버플로 문제([GitLab 19.4.2](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-2-released/))
* [CVE-2026-110264](https://www.cve.org/CVERecord?id=CVE-2026-110264): 정규표현식 컴파일러의 정수 오버플로 문제([GitLab 19.5.1](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-5-1-released/))

## Ruby에서의 수정

다음 표는 각 CVE의 원인이 된 버그를 수정한 Ruby의 변경 사항과, 버전대별로 그 수정이 처음 포함된 릴리스를 정리한 것입니다.

| GitLab CVE | Ruby의 버그 | 변경 사항 | Ruby 4.0 | Ruby 3.4 | Ruby 3.3 |
|---|---|---|---|---|---|
| CVE-2026-89078 | 선택(alternation) 이후 패턴 파싱에 실패할 때 발생하는 중복 할당 해제 | [#13332](https://github.com/ruby/ruby/pull/13332) | 4.0.0 | 3.4.12 | 3.3.13 |
| CVE-2026-93577, CVE-2026-97229 | 컴파일된 패턴 크기의 정수 오버플로 | [#19020](https://github.com/ruby/ruby/pull/19020) | 4.0.8 | 3.4.12 | 3.3.13 |
| CVE-2026-110264 | 반복이 많은 패턴에서 발생하는 내부 ID 오버플로 | [#16801](https://github.com/ruby/ruby/pull/16801) | 4.0.9 | 3.4.12 | 3.3.13 |

Ruby 4.0.9, 3.4.12, 3.3.13은 이 수정을 모두 포함하고 있습니다.

## 영향을 받는 경우

이 버그들은 애플리케이션이 공격자가 조작할 수 있는 문자열로 정규표현식을 컴파일하는 경우에만 발생합니다. 예를 들어 그 문자열을 `Regexp.new`, `Regexp.union`, `Regexp.compile`에 넘기거나, `/#{input}/`과 같은 정규표현식 리터럴에 삽입하는 경우입니다. 개발자가 직접 작성한 정규표현식만 사용하는 애플리케이션은 영향을 받지 않습니다.

`Regexp.timeout`으로는 이 버그들을 막을 수 없습니다. 일부 버그는 짧은 패턴으로도 일으킬 수 있으므로, 패턴 길이를 제한하는 것도 확실한 대책이 되지 못합니다.

## 권장 조치

Ruby 4.0.9, 3.4.12, 3.3.13 또는 그 이후 버전으로 업그레이드하는 것을 권장합니다.

업그레이드할 수 없다면, 신뢰할 수 없는 입력으로 정규표현식을 컴파일하지 마세요.

Ruby 3.3은 보안 유지보수 단계로, 보통은 취약점 수정만 릴리스합니다. 하지만 GitLab이 이 버그들에 기반한 문제에 CVE를 할당했으므로, 예외적으로 Ruby 3.3.13에 이 수정들을 포함했습니다.

## CVE 번호에 대해

적어도 현재로서는 이 수정들에 대해 Ruby에서 CVE 번호를 요청하지 않았습니다.

Ruby는 일반적으로 신뢰할 수 없는 입력으로 만든 정규표현식을 컴파일하고 사용하는 것을 안전하지 않다고 간주해 왔습니다. 이는 [CVE-2022-28738]({% link ko/news/_posts/2022-04-12-double-free-in-regexp-compilation-cve-2022-28738.md %})의 보안 권고에서도 밝힌 바 있지만, 당시에는 종합적인 평가 끝에 정규표현식 컴파일의 중복 할당 해제를 취약점으로 다루었습니다. [CVE-2024-27282]({% link ko/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md %})도 마찬가지였습니다.

그러나 현재 [Regexp 문서](https://docs.ruby-lang.org/en/master/Regexp.html#class-Regexp-label-Timeouts)는 신뢰할 수 없는 패턴을 서비스 거부 관점에서만 다루며, 타임아웃 설정을 권장하고 있습니다. 신뢰할 수 없는 패턴을 컴파일하는 것을 Ruby가 지원하는지는 명확히 밝히고 있지 않습니다. 이를 어떻게 문서화할지, 이런 종류의 문제를 Ruby의 취약점으로 다룰지, 그리고 이 수정들에 대해 CVE 번호를 요청할지를 논의할 예정입니다. CVE 번호를 요청하게 되면 이 페이지를 갱신하겠습니다.

그때까지는 보안 스캐너 등에서 이 문제들을 추적할 때 위에 나열한 GitLab의 CVE 번호를 사용해 주세요.

## 도움을 준 사람

GitLab의 버그 바운티 프로그램을 통해 [#19020](https://github.com/ruby/ruby/pull/19020)에서 수정된 정수 오버플로를 발견해 준 Johan Carlsson([joaxcar](https://github.com/joaxcar))과, 이 문제들을 보고하고 수정을 조율해 준 GitLab에 감사를 표합니다.

## 수정 이력

* 2026-10-23 03:11:22 (UTC) 최초 공개
47 changes: 47 additions & 0 deletions ko/news/_posts/2026-10-23-ruby-4-0-9-released.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
layout: news_post
title: "Ruby 4.0.9 릴리스"
author: k0kubun
translator: "shia"
date: 2026-10-23 03:11:22 +0000
lang: ko
---

Ruby 4.0.9가 릴리스되었습니다.

이번 릴리스는 GitLab의 CVE-2026-110264의 원인이 된 정규표현식 컴파일 버그 수정을 포함합니다.
자세한 내용은 아래 항목을 참조하세요.

* [GitLab의 CVE-2026-89078, CVE-2026-93577, CVE-2026-97229, CVE-2026-110264와 관련된 정규표현식 컴파일 수정]({% link ko/news/_posts/2026-10-23-regexp-fixes-for-gitlab-cves.md %})

자세한 내용은 [GitHub 릴리스](https://github.com/ruby/ruby/releases/tag/v4.0.9)를 참조하세요.

## 다운로드

{% assign release = site.data.releases | where: "version", "4.0.9" | first %}

* <{{ release.url.gz }}>

SIZE: {{ release.size.gz }}
SHA1: {{ release.sha1.gz }}
SHA256: {{ release.sha256.gz }}
SHA512: {{ release.sha512.gz }}

* <{{ release.url.xz }}>

SIZE: {{ release.size.xz }}
SHA1: {{ release.sha1.xz }}
SHA256: {{ release.sha256.xz }}
SHA512: {{ release.sha512.xz }}

* <{{ release.url.zip }}>

SIZE: {{ release.size.zip }}
SHA1: {{ release.sha1.zip }}
SHA256: {{ release.sha256.zip }}
SHA512: {{ release.sha512.zip }}

## 릴리스 코멘트

많은 커미터, 개발자, 버그를 보고해 준 사용자들이 이 릴리스를 만드는 데 도움을 주었습니다.
그들의 기여에 감사드립니다.
Loading