お問い合わせ
ブログ

CVE-2021-39935:GitLab CI Lint API におけるサーバーサイドリクエストフォージェリ脆弱性

本稿では CVE-2021-39935 を中心に、外部に露出した GitLab インスタンスがどのように実際の攻撃へとつながるのか、またそれを識別・管理するための 攻撃対象領域 の観点に基づく対応戦略について解説します。...................

2026年2月初旬、米国サイバーセキュリティ・インフラセキュリティ庁(CISA)は、GitLab Community Edition および Enterprise Edition に影響を及ぼすサーバーサイドリクエストフォージェリ(Server-Side Request Forgery、SSRF)の脆弱性である CVE-2021-39935 を、Known Exploited Vulnerabilities(KEV)カタログに追加しました。本脆弱性はすでに 2021 年に修正されていましたが、インターネットに露出した未パッチの GitLab インスタンスを対象とした実際の悪用が再び確認されたことから、緊急対応が必要な事案として位置付けられました。

CISA は連邦機関に対し、2026 年 2 月 24 日までに対応を完了することを求めており(BOD 22-01)、民間組織に対しても同等レベルの対応を優先するよう強く推奨しています。本稿では CVE-2021-39935 を中心に、外部に露出した GitLab インスタンスがどのように実際の攻撃へとつながるのか、そしてそれらを識別・管理するための 攻撃対象領域 の観点に基づく対応戦略について解説します。

CVE-2021-39935 脆弱性の概要

  • 脆弱性 ID:CVE-2021-39935
  • 影響を受ける製品:GitLab Community Edition(CE)、Enterprise Edition(EE)
  • タイプ:サーバーサイドリクエストフォージェリ(SSRF)、CWE-918
  • 攻撃条件:認証不要でのリモート悪用が可能(Unauthenticated)
  • 主な影響:GitLab サーバーが攻撃者により指定された任意の URL に対してサーバー側リクエストを実行し、内部リソースへのアクセス、スキャン、メタデータの取得、二次的な脆弱性連鎖につながる可能性

CVE-2021-39935 は、GitLab の CI Lint API(CI/CD 設定の検証およびパイプラインシミュレーションに使用)において、ユーザー入力として指定される URL の検証処理が不十分であることに起因する脆弱性です。攻撃者は細工された API リクエストを送信することで、GitLab サーバーに内部ネットワーク(例:RFC1918 アドレス空間)や外部リソース宛てのリクエストを発生させることが可能になります。特に CI/CD や DevOps プラットフォームは、ソースコード、トークン、デプロイキー、レジストリ認証情報などの高価値な機密情報が集約されるポイントであるため、単一の SSRF 脆弱性が「一つのサービス侵害」にとどまらず、組織全体へと影響が拡大する初期侵入ベクトルに転じやすい点が特徴です。

CISA は、本脆弱性が実際に悪用されている事実を根拠として、KEV カタログに追加しました。これは、攻撃者がすでに自動化されたスキャンやエクスプロイトチェーンを用いて未パッチの GitLab インスタンスを積極的に探索しており、外部に露出した CI/CD プラットフォームを足掛かりとして内部環境へピボットしようとする動きが再び活発化していることを示しています。

攻撃メカニズムおよびシナリオ

攻撃メカニズム

攻撃メカニズムを示したイメージ例

SSRF は、「ユーザー入力 → サーバーが代理でリクエストを実行 → サーバーから到達可能な範囲へ攻撃者が間接的にアクセスする」という比較的単純な仕組みを持つ攻撃手法です。重要な点は、CI Lint API が CI 設定検証の過程においてユーザー入力として指定された URL を十分に検証できておらず、その結果、GitLab サーバーが当該 URL へリクエストを実行できる余地を生んでいることです。認証を必要としない外部攻撃者であっても、CI Lint API を呼び出せるリクエストを構成できる条件が成立すると、GitLab サーバーは攻撃者の指示に従い、内部または外部のリソースへ接続を試みることになります。

想定される攻撃シナリオ

想定される攻撃シナリオを示したイメージ例
  1. 外部に露出した GitLab の特定
    攻撃者は GitLab のリソースパターンを基にインターネットスキャンを行い、外部に公開されたインスタンスを特定します。
  2. CI Lint API を利用した SSRF の実行
    細工された API リクエストにより、GitLab サーバーが攻撃者指定の URL へリクエストを実行するよう誘導します。
  3. 内部リソースへのアクセスおよびスキャン
    内部 IP アドレスやポートへの接続成否を確認することで、内部ネットワークのマッピングが可能となります。
  4. 機密情報の漏えい
    クラウドのメタデータサービスや内部サービスからの応答を通じて、トークン、キー、設定情報などが漏えいする可能性があります。
  5. 二次的な脆弱性や認証情報を利用した拡大
    取得した情報を基に、レジストリや内部 API などへのラテラルムーブメントが試みられます。

Criminal IP を通じて観測した外部露出 GitLab インスタンスの状況

脆弱性対応は、GitLab をパッチ適用したと認識していても、実際にはテスト用、PoC 用、部門別に構築されたインスタンスが残存している場合に最も困難になります。インスタンスが残っている場合、その一部が外部に露出したままとなり、攻撃者にとって最も容易な標的となるためです。そのため、本件における本質は CVE の有無そのものではなく、外部からアクセス可能な GitLab インスタンスがどこに、どれだけ残存しているかを先行して把握する点にあります。

Criminal IP IT資産検索 において title: GitLab を検索した結果

Criminal IP 検索クエリ: title: GitLab

この状況を確認するため、Criminal IP の IT資産検索 において上記の検索クエリを適用しました。その結果、2026 年 2月6日時点で 71,069 件の資産が検索されることを確認しました。これらの外部露出 GitLab インスタンスは、CVE-2021-39935 のように認証前段階で悪用可能な SSRF 脆弱性が存在する場合、即座に 攻撃対象領域 へと転化する可能性があります。攻撃者は、GitLab のログインページ、静的リソース、CI 関連エンドポイントの応答などを通じて、GitLab のバージョンや構成情報を間接的に推測した上で、未パッチ環境を優先的に標的とする可能性が高いと考えられます。

Criminal IP IT資産検索 において title:”GitLab” AND port:443 OR port:80 を検索した結果

Criminal IP 検索クエリ: title:”GitLab” AND port:443 OR port:80

前述で確認された GitLab 資産のうち、GitLab の Web インターフェースが標準的な Web ポート(HTTP/HTTPS)を通じて外部から直接アクセス可能な状態で露出している資産を追加で特定しました。その結果、合計 311 件の露出資産が確認されており、これは認証の有無に関係なく、サービスの存在自体が即座に識別可能な GitLab インスタンスが相当数存在することを意味します。

Criminal IP IT資産検索 を通じて外部に露出した特定の GitLab インスタンスを分析した結果

さらに、特定の GitLab インスタンスを分析した結果、4 つのポートが同時に開放されており、20 件を超える脆弱性が併せて特定されました。これは、当該資産が単一サービスの露出にとどまらず、Web インターフェース、リモートアクセス、管理機能が複合的に外部へ露出している状態であることを示しています。このように複数のポートおよび脆弱性が同時に露出している環境では、CVE-2021-39935 のような認証前 SSRF 脆弱性が単独の攻撃ベクトルではなく、初期侵入ポイントとして機能する可能性が高まります。攻撃者は、SSRF を通じて内部リクエストを誘発した後、同一資産上に露出している SSH(22)、Web サービス(80/443)、その他の脆弱な構成要素を連鎖的に探索し、攻撃範囲を拡大することが可能となります。

Criminal IP の観測観点において重要なのは、組織内部の資産管理台帳に含まれていない GitLab インスタンスであっても、外部からの応答が確認された時点で、攻撃者にとっては同一の「外部資産」として認識される点です。テスト用、一時的なプロジェクト用、過去に使用され放置された GitLab インスタンスは、この理由から特に攻撃にさらされやすい状態にあるといえます。

対応および推奨事項

CVE-2021-39935 はすでにパッチが提供されている脆弱性ですが、CISA の KEV への登録が示すとおり、外部に露出した未パッチの GitLab インスタンスが実際の攻撃に利用されている状況です。そのため、対応は単なるバージョン更新にとどまらず、外部露出の有無を軸とした点検を併せて実施する必要があります。

  • 即時パッチ適用およびバージョン確認
    • パッチ適用済みバージョン(14.3.6/14.4.4/14.5.2 以上)へ直ちにアップグレード
    • テスト用、バックアップ用、一時的なインスタンスを含め、すべての GitLab 展開環境を点検CI Lint API 및 관련 API 접근 통제
  • CI Lint API および関連 API のアクセス制御
    • 外部利用者に CI Lint API へのアクセスが本当に必要か再検討
    • 不要な API エンドポイントは、ネットワークまたは設定レベルで遮断
  • ログに基づく異常挙動の点検
    • 内部 IP や不審な URL を対象とした接続試行の有無を確認
    • 失敗した接続(タイムアウト、拒否)のログが急増していないかを確認
  • 外部露出資産の継続的な点検
    • Criminal IP の IT資産検索 などの資産検索ツールを活用し、外部から識別可能な GitLab インスタンスを継続的に点検
    • 新規デプロイや環境変更時に、外部露出の有無を自動的に確認するプロセスを整備

FAQ

Q1. すでに 2021 年に修正された脆弱性であるにもかかわらず、なぜ今になって KEV に追加されたのでしょうか。

CVE-2021-39935 は 2021 年にパッチが提供されましたが、その後も当該脆弱性が修正されていない GitLab インスタンスがインターネット上に多数露出した状態で存在してきました。CISA が KEV に追加した背景は、脆弱性の新規性ではなく、現在の時点においても実際の攻撃に悪用されていることが確認された点にあります。特に GitLab は、テスト環境、臨時プロジェクト、部門別運用インスタンスなどとして分散配置されるケースが多く、一部のインスタンスがパッチ適用や管理の対象から漏れやすいという特性があります。このような未パッチかつ外部露出した環境は攻撃者にとって格好の標的となるため、CISA はこれを根拠として緊急対応が必要な脆弱性として分類しました。

Q2. パッチを適用するだけで十分でしょうか。

パッチ適用は必須の対応ではありますが、それだけで十分であるとは言えません。CVE-2021-39935 は認証前段階で悪用可能な SSRF 脆弱性であり、外部に露出している状態そのものが攻撃成立の可否を左右する重要な要素となります。

パッチ適用以前に外部へ露出していた GitLab インスタンスが存在する場合、攻撃者がすでに内部ネットワーク構成を探索したり、機密情報へアクセスしていた可能性も否定できません。また、組織がすべての GitLab インスタンスを正確に把握できていない場合、一部の資産はパッチ適用後も外部に露出したまま残存する恐れがあります。そのため、パッチ適用と併せて、外部露出資産を継続的に識別・検証する 攻撃対象領域管理(ASM)の観点に基づく対応を並行して実施することが重要です。

結論

CVE-2021-39935 は、過去の GitLab 脆弱性が再び注目された事例にとどまらず、外部に露出した CI/CD インフラがいかに容易に実際の攻撃へと転化し得るかを示す代表的なケースです。CISA による KEV への登録は、本脆弱性が理論上のリスクではなく、現在もインターネット上に残存する未パッチの GitLab インスタンスが実際の攻撃対象となっていることを明確に示しています。

組織は、単に脆弱なバージョンを使用しているかどうかだけを確認すべきではありません。外部からアクセス可能な GitLab インスタンスがどこに存在しているのかを継続的に特定し、パッチ適用や設定変更の後も、露出状態が実際に解消されているかを繰り返し検証する必要があります。脆弱性情報と外部 攻撃対象領域 の可視性を組み合わせた対応こそが、CVE-2021-39935 のような認証前段階で悪用可能な SSRF 脆弱性から CI/CD 環境を守るための、現実的な防御戦略となります。

なお、関連して CVE-2026-24061: GNU Inetutils telnetd 認証バイパス脆弱性の分析 の記事も参考にしてください。

Criminal IP(search.criminalip.io/ja/register) に登録すると、すぐに脆弱資産の検知を開始できます。さらに、下記ボタンからデモをご依頼いただくことで、エンタープライズ環境において外部に露出した資産を対象としたCriminal IP の脅威インテリジェンス(TI)分析を直接ご確認いただけます。


本レポートは、サイバー脅威インテリジェンス検索エンジン Criminal IP のデータを基に作成されています。
今すぐCriminal IP の無料アカウントを作成すれば、本レポートで引用された検索結果を直接確認したり、さらに膨大な脅威インテリジェンスを自由に検索することができます。

データソース : Criminal IP (https://www.criminalip.io/ja), BleepingComputer(https://www.bleepingcomputer.com/news/security/cisa-warns-of-five-year-old-gitlab-flaw-exploited-in-attacks/), CyberSecurityNews (https://cybersecuritynews.com/cisa-warns-gitlab-ssrf-vulnerability-exploit/)

関連記事 : https://www.criminalip.io/ja/knowledge-hub/blog/7936

CVE-2021-39935:GitLab CI Lint API におけるサーバーサイドリクエストフォージェリ脆弱性 | Criminal IP(クリミナルアイピー) | Criminal IP