要点
- 社内に置く GitLab に、ログインしていない人でもサーバー上で好きなプログラムを動かせる欠陥(CVE-2026-97229、深刻度は最高の 10.0)が見つかった。
- 米国の CISA(サイバーセキュリティ・インフラストラクチャー安全保障庁)は 2026年10月29日、この欠陥を「実際に悪用されている欠陥」の一覧に加えた。
- Alpine Linux の GitLab は、修正が出てから約1週間後に狙われた。GitLab を新しくしても、組み合わせて使う Ruby が古いままだと直らない場合がある。
何が起きたか
GitLab は 10月12日、緊急の修正版 19.2.8、19.3.5、19.4.2 を出した。GitLab の発表によると、CI/CD(コードを置くたびに自動でテストや組み立てをする仕組み)の設定に細工した正規表現(文字の並びを探すための書き方)を入れると、ログインしていない人でもサーバー上で任意のコードを動かせるおそれがあった。深刻度の点数は 10 点満点の 10.0 である。
原因は、GitLab が使うプログラミング言語 Ruby の、正規表現を処理する部品にあった。Ruby の開発チームも 10月23日に、この欠陥を直した Ruby 3.3.13、3.4.12、4.0.9 を出している。
セキュリティ会社の Rapid7 は、実験の環境でコードを動かすところまで再現した。Rapid7 によると、攻撃するには、CI/CD の設定をどこかのプロジェクトに置ける必要がある。ただし、誰でもアカウントを作れてプロジェクトも作れる GitLab では、この条件は無いのと同じだという。
10月28日、Linux ディストリビューションの Alpine Linux は、自分たちの GitLab が狙われたと公表した。Alpine の報告によると、流れはこうだ。
- 10月13日、Alpine は修正版の 19.3.5 ではなく、誤って 19.3.4 に上げた(Alpine 自身が「誤り」と書いている)。
- 10月20〜21日、新しく作られたアカウントが細工した CI 設定を送り、GitLab の処理が8回落ちた。サイトがエラーを返し、CI の作業も失敗した。
- 10月22日、19.3.6 に上げたが直らなかった。Alpine は、GitLab が自分で抱える Ruby ではなく、ふつうの Ruby を使っていたからだ。
- 10月25〜26日、攻撃者が戻ってきたが失敗した。27日に GitLab を閉じて作り直した。28日に全員のパスワードを初期化し、GitLab 自体の秘密の鍵も入れ替えた。
Alpine は、攻撃者のコードが動いた証拠は見つからなかったとしている。一方で、攻撃がうまくいった場合は、処理が落ちることもなく、Web のログにも跡が残らない。当日の記録の一部も失われていた。そのため「動いた可能性は否定できない」として、乗っ取られた前提で対応した。配布しているソフトに手が加えられていないことは、外部の記録と照らして確かめたという。
CISA は 10月29日、この欠陥を KEV(悪用が確かめられた欠陥の一覧)に加えた。米国の連邦機関には 11月1日までの対応を求めている。
日本の利用者への影響
日本で GitLab がどれだけ使われているか、日本の組織に被害が出ているかは、今回確かめた一次情報からは分からない。
ただし、狙われるのは自分で置いている GitLab(self-managed)である。そこにはソースコード、パスワードやトークンなどの秘密の情報、CI で使う鍵がまとまって置かれている。乗っ取られると、Alpine が挙げたように、利用者のメールアドレス、パスワードのハッシュ(元に戻しにくい形にしたもの)、二段階認証の秘密、CI の変数、非公開のリポジトリまで外に出るおそれがある。
GitLab.com と GitLab Dedicated(GitLab が運用する版)は、GitLab がすでに直している。
今すぐやること
- 自社の GitLab の版を確かめる。 管理者に、19.2〜19.4 の古い版のままでないかを聞く。
- その系列の最新版に上げる。 10月21日には別の深刻な欠陥(CVE-2026-110264)の修正も出ている。Rapid7 は、ふだんの更新の予定を待たずにすぐ上げるよう勧めている。
- Ruby も確かめる。 GitLab 公式のパッケージやコンテナを使っていなければ、Ruby を自分で上げる必要がある。Alpine はここで失敗した。
- 誰でもアカウントを作れる設定を見直す。 Alpine の攻撃者は、新しく作ったアカウントから攻撃した。Rapid7 は、修正までのあいだ、公開プロジェクトに誰が書き込めるかを絞るよう勧めている。根本の修正にはならない。
- 跡を探す。 10月12日以降に、GitLab の処理が落ちる、エラーが続く、知らないアカウントが増える、といったことがなかったかを見る。怪しければ、パスワードやトークンの入れ替えを考える。
背景
今回の要点は、ソフトの中に組み込まれた部品にある。GitLab の公式パッケージは Ruby を中に抱えていて、修正版にはその Ruby の手直しも入っていた。しかし、ソースから組み立てた GitLab や、独自に作ったコンテナでは、自分で用意した Ruby が使われる。GitLab を新しくしても、Ruby は古いまま残る。
The Hacker News によると、10月29日の時点で、GitLab の修正の告知は自分で組み立てる人に Ruby を上げるよう求めていなかった。GitLab の手順書は、Ruby 3.2 を最低の版としたままだった。Ruby 3.2 には修正は出ない見込みだという。
Alpine は反省として、重大な修正は1日以内に当てること、外への通信の記録を取ること、記録を14日より長く残すことを挙げている。
技術者向けの詳細
- 影響を受ける版(GitLab の発表): CE/EE の 19.2.8 未満の 19.2、19.3.5 未満の 19.3、19.4.2 未満の 19.4。修正は 19.2.8 / 19.3.5 / 19.4.2(2026-10-12)。
- あわせて当てたい版: CVE-2026-110264(同じく CVSS 10.0)の修正を含む 18.11.13 / 19.0.10 / 19.1.9 / 19.2.9 / 19.3.6 / 19.4.3 / 19.5.1(2026-10-21)。
- Ruby: 3.3.13 / 3.4.12 / 4.0.9 以降。Ruby によると
Regexp.timeoutでは防げない。 - Alpine の利用者:
apk upgradeで修正済みの Ruby が入る。alpinelinux/gitlab:19.3.6は 10月27日以降に取り直したものだけが修正済み。 - 版の確かめ方(Linux パッケージ版の例):
sudo gitlab-rake gitlab:env:info
/opt/gitlab/embedded/bin/ruby -v
ソースから組み立てた環境では、GitLab を動かしているユーザーで ruby -v を確かめる。Web 画面ではヘルプ(/help)にも版が出る。
- 侵入の跡: GitLab は検知ルールを6つ公開している(Onigmo native worker crash、ci regexp oversized non ascii path など)。中身は GitLab の告知と gitlab-security-oss/tldr を見る。
- Alpine で見えた兆候: 新しいアカウントによる偵察、細工した CI 設定、ワーカーのクラッシュ、502 エラー、CI ジョブの失敗、漏れたパスワードによる自動ログインの試み。Alpine によると、成功した攻撃はクラッシュも Web のログも残さない。ログが無いことを「無事」の証拠にしない。
- CISA KEV: 2026-10-29 追加。期限 2026-11-01。ランサムウェアでの利用は「不明」。