Alpine Linux、Ruby の正規表現エンジンにおける重大な脆弱性を悪用した攻撃を受け GitLab を再構築
Alpine Linux は、GitLab アップグレード後も残存していた Ruby の正規表現エンジンの CVSS 10.0 評価の重大な脆弱性を標的とした攻撃に対し、GitLab サーバーを完全に再構築し、すべてのパスワードをリセットしました。
英語の原文から自動翻訳されました。
Alpine Linux は 10 月 28 日、重大な脆弱性を悪用した標的型攻撃を受けたことを受け、GitLab サーバーを完全に再構築し、全ユーザーのパスワードをリセットしたと発表しました。この事件は、自己管理型のインスタンスにおいて、GitLab アプリケーション自体を更新しても基盤となる Ruby ランタイムが脆弱なまま残るという、パッチ適用手順における危険なギャップを浮き彫りにしています。
何が起きたか
攻撃者は、aports リポジトリをホストする Alpine 自身の GitLab インスタンスに対し、完全な CVSS スコア 10.0 を持つ CVE-2026-97229 の脆弱性の悪用を試みました。この脆弱性は、CI 設定内の細工された正規表現を通じてリモートコード実行(RCE)を可能にします。Alpine は攻撃者がコードの実行に成功した決定的な証拠は見つかりませんでしたが、ログの欠落やエクスプロイトの性質上、その可能性を排除できませんでした。そのため、サーバーが侵害されたとみなし、10 月 27 日に停止させ、10 月 28 日までに完全な再構築を完了しました。
攻撃は、GitLab が修正版をリリースしてからわずか 1 週間後の 10 月 20 日に始まりました。新規登録アカウントがサーバーを偵察し、ワーカープロセスを 8 回クラッシュさせるような悪意のある CI 設定を送信しました。10 月 21 日には、攻撃者により 502 エラーと CI ジョブの失敗が発生しました。Alpine は 10 月 23 日に当該アカウントをブロックしましたが、攻撃者は 10 月 25 日と 26 日に再び現れました。重要な点として、Alpine は 10 月 26 日、10 月 22 日に行った GitLab 19.3.6 へのアップグレードでは脆弱性が実際に修正されていないことを発見しました。これは、彼らのインストール環境が GitLab の公式パッケージに含まれるパッチ済みバージョンではなく、標準的なシステム Ruby を使用していたためです。
仕組み
根本原因は、Ruby に組み込まれている正規表現エンジン「Onigmo」にあります。CVE-2026-97229 は、CI 設定ファイル内で攻撃者によって提供される特定の正規表現パターンによって引き起こされる Onigmo エンジンのバグです。GitLab がこれらの設定を処理する際、Ruby を使用して正規表現をコンパイルします。Ruby のバージョンが脆弱である場合、このコンパイルステップがリモートコード実行につながる可能性があります。
GitLab は 10 月 12 日のリリースで、公式の Linux パッケージおよびコンテナイメージに含まれる Ruby インタープリターにパッチを当てることでこの問題に対処しました。しかし、Alpine チームを含む多くの管理者は、独自にシステムへインストールした Ruby やカスタムコンテナイメージ上で GitLab を実行しています。このような構成では、GitLab アプリケーションコードをアップグレードしても、基盤となる Ruby インタープリターは更新されません。修正は Ruby 言語自体にあるため、パッチ未適用の Ruby バージョンを実行しているサーバーは、インストールされている GitLab のバージョンに関係なく、引き続きリスクにさらされます。Alpine のイメージは標準的な Ruby を使用していたため、GitLab のアップグレードだけでは脆弱なエンジンが残ったままであり、Ruby を明示的にバージョン 3.3.13、3.4.12 以降に更新するまで問題は解決しませんでした。
主要な詳細
- 脆弱性: Ruby の Onigmo 正規表現エンジンにおける CVE-2026-97229(CVSS 10.0)。
- 攻撃経路: CI 設定を通じて送信された
.gitlab-ci.ymlファイル内の細工された正規表現。 - パッチ適用のギャップ: 自己コンパイルによるインストールやカスタムイメージの場合、GitLab だけのアップグレードでは不十分であり、Ruby 自体を 3.3.13、3.4.12、4.0.9 以降に更新する必要があります。
- インシデントのタイムライン: 10 月 20 日に攻撃の偵察が始まり、10 月 27 日にサーバーを閉鎖、10 月 28 日に再構築が完了。
- データリスク: コード実行が発生した場合、ユーザーメール、パスワードハッシュ、2FA シークレット、CI/CD 変数、プライベートリポジトリなどの露出が考えられます。
- 検証: Alpine は外部記録に基づき 10 月 20 日から 24 日までのパッケージ整合性を確認し、ビルド済みパッケージにおけるサプライチェーン侵害がないことを確認しました。
なぜ重要なのか
この事件は、セルフホスト型インフラストラクチャを管理するエンジニアリングチームにとって厳しい教訓となります。アプリケーションを更新すれば自動的にランタイム環境も保護されると仮定するという、依存関係管理における一般的な盲点を暴露しています。AI や複雑な CI/CD パイプラインを用いて製品を開発する開発者にとって、アプリケーションレベルのパッチとランタイムレベルのパッチの違いを理解することは極めて重要です。基盤となる言語インタープリターの更新を怠ると、アプリケーションベンダーが問題を解決済みと主張していても、システムは重大なエクスプロイトに対して無防備な状態のまま放置されることになります。
さらに、結果の不確実性は、クラウドネイティブ環境におけるフォレンジック分析の難しさを強調しています。この種の成功したエクスプロイトは、クラッシュやログエントリーといった従来の痕跡を残さない可能性があるため、組織はインシデント対応においてゼロトラストアプローチを採用する必要があります。クリーンアップを試みるのではなく、スクラッチから再構築するという Alpine の決定は、こうした脆弱性に伴う高い運用コストを示しています。技術系創業者や IT リーダーにとって、堅牢なロギング、イミュータブルなインフラプラクティス、そしてソフトウェアサプライチェーン内のすべてのコンポーネントに対する厳格な検証の必要性を強化するものです。
実施すべき対策
- Ruby バージョンの確認: 自己コンパイルした GitLab やカスタムコンテナを実行している場合、直ちに Ruby を 3.3.13、3.4.12、4.0.9 以降に更新してください。
- GitLab アップグレードの検証: GitLab のインストール方法がパッチ適用済みの Ruby をバンドルしているか確認してください。そうでない場合は、システム Ruby を手動で更新してください。
- シークレットのローテーション: 露出が疑われる場合、すべての CI/CD 変数、ランナートークン、パーソナルアクセストークン、Webhook 認証情報をローテーションしてください。
- アクセス制限: 公開プロジェクトへの匿名アクセスを制限し、信頼できないユーザーが公開リポジトリを作成または書き込みできないようにしてください。
- 指標の監視: GitLab が公開している Sigma 検出ルールを使用し、敵対的な正規表現パターン、非 ASCII 文字を含む異常に長いファイルパス、Ruby のクラッシュレポートを探知してください。
- 更新済みイメージの取得: Alpine の GitLab イメージを使用している場合、修正済み Ruby を含むよう 10 月 27 日以降に公開された
alpinelinux/gitlab:19.3.6を再度プルしてください。



