Gogsに深刻なパストラバーサル脆弱性、Gitフックを悪用したリモートコード実行が可能に

セルフホスト型Gitサービス「Gogs」に深刻なパストラバーサル脆弱性が見つかりました。認証済みの攻撃者は、本来のリポジトリ保存ディレクトリの外部に悪意あるGitフックを設置することで、リモートコード実行を達成できる可能性があります。

CVE-2026-52813として追跡されているこの脆弱性は、サニタイズされていない組織のユーザー名を受け付け、それをファイルシステムのパス構築処理に渡してしまうAPIエンドポイントに起因します。Aikidoの研究者Jorian Woltjer氏の報告によると、この問題はGogs 0.14.3で修正済みです。

今回の発見は、Gitホスティングソフトウェアにおけるわずかな検証の抜け穴が、Gitのファイルシステム上の挙動と組み合わさることで、リモートでGit操作を実行するために使われるサービスアカウントの権限でサーバー側のコード実行につながりかねないことを浮き彫りにしています。

脆弱性のあるコードは、設定済みのリポジトリルートに組織名を追加する際にfilepath.Joinを使用していました。Gogsは通常のユーザー登録に対しては、英数字・ハイフン・アンダースコア・ピリオドのみを許可する安全な制限を課していましたが、API経由の組織作成リクエストには同等の検証が適用されていませんでした。

そのため攻撃者は、たとえば/tmpを狙うトラバーサルパスのように、../を含む組織名を付けたうえで、その組織内にリポジトリを作成することが可能でした。

Gogsは、そのリポジトリのベアGitディレクトリを、攻撃者が指定したファイルシステム上の場所に作成してしまいます。ベアリポジトリには通常、作業コピーではなくメタデータのみが含まれるため、当初このパストラバーサルは任意のファイル置き換えではなく、限定的なファイル書き込みにとどまるプリミティブでした。

Jorian Woltjer氏は、Gogsがウェブベースのファイル編集用に一時的なワークツリーを作成する仕組みを悪用し、このプリミティブをエスカレーションさせました。

同氏はまず正規の編集可能なリポジトリを作成し、続いてトラバーサル名を付けた組織を使って、その一時ワークツリー内に悪意あるベアリポジトリを配置しました。正規リポジトリのクローンから、traversal.git/hooks/updateにフックをコミットしたのです。

Gogsのウェブエディタは.git/を含むパスを拒否しますが、通常のGitプッシュではtraversal.gitというパスが通ってしまいました。これは、その検証ロジックが「厳密に.gitという名前のパスセグメント」を要求していたためです。

その後、API経由でネストされたリポジトリに対してコミットが行われるとupdateフックが呼び出され、サーバー上でgitサービスユーザーとして攻撃者のコマンドが実行されてしまいます。

この勧告ではさらに、CVE-2026-52810についても説明されています。これはGogsのGit HTTPハンドリングにおける、別の認可に関する脆弱性です。アプリケーションは、リクエストが読み取り専用のプルであるかどうかを、一部サービスのクエリパラメータから判断する一方で、リクエストのルーティングはパスに基づいて行っていました。

git-receive-packのリクエストにservice=git-upload-packを指定すると、認可レイヤーがそのプッシュをプルとして分類してしまい、読み取り専用の権限しか持たない共同作業者がプライベートリポジトリに書き込める可能性がありました。

Jorian Woltjer氏が実証したところによると、この問題はプライベートリポジトリ、あるいはリポジトリ閲覧前にサインインを必須とする設定のデプロイメントに影響します。

当初のルート検証修正では、本番環境で大文字のreceive-packパスが見落とされていたと報告されており、現在提案されている修正案ではアクションを正規化したうえで大文字小文字を区別しない比較を用いています。

Gogsのユーザーは、CVE-2026-52813への対処のためバージョン0.14.3以降へアップグレードし、外部に露出しているインスタンスについて不審な組織・リポジトリ・フック、および想定外のファイルシステムパスがないか確認することが推奨されます。

また管理者は、receive-packの認可バイパスについても、上流での修正が提供されるまでは未解決のリスクとして扱うべきです。特にプライベートリポジトリがCI/CDパイプラインに連携している環境では注意が必要です。

ノートブックレンダラーの問題は、さらに別の攻撃対象領域を示しています。古いバージョンのnotebookjsは、サーバー側のサニタイズが行われる前にinnerHTMLを通じて信頼できないJupyter形式のMarkdownを処理しており、イベントハンドラが実行されてしまう可能性がありました。

今回の一連の公表は、Gitプラットフォーム運用者にとって重要な教訓を改めて示しています。ファイルシステムに由来するすべての識別子を検証すること、認可処理とルーティング処理を分離すること、そしてリポジトリのコンテンツが実行可能なフックの場所に到達しないようにすることです。

不審な活動をより迅速に調査し、ビジネスへの影響が拡大する前に脅威を封じ込めるための可視性とコンテキストを、セキュリティチームに。ANY.RUNで調査力を強化

翻訳元: https://cyberpress.org/critical-gogs-path-traversal-flaw/

本記事は cyberpress.org の記事を翻訳・要約したものです。