Giteaに存在する重大な脆弱性(CVE-2026-59774として追跡)により、認証を受けていないリモート攻撃者が脆弱なサーバー上の任意のファイルを読み取り、さらにはリモートコード実行(RCE)へとエスカレーションできる可能性があります。
GHSA-6v53-hr58-556rで開示されたこの欠陥は、Giteaのバージョン1.22.1から1.27.0までに影響し、バージョン1.27.1で修正されています。
この脆弱性のCVSS v3.1スコアは「Critical(緊急)」で、ベクターはCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hです。認証もユーザー操作も、権限昇格も必要としないため、インターネットに公開されているGiteaインスタンスは特に注意が必要です。
この問題は、GiteaのリポジトリマークアップレンダリングエンドポイントPOST /{owner}/{repo}/markupに起因します。このルートにはリポジトリの割り当てチェックや読み取り権限チェックが組み込まれているものの、読み取り可能なコードユニットが有効になっている公開リポジトリを対象にすれば、匿名ユーザーでもこれらのチェックを通過できてしまいます。
攻撃者はこのエンドポイントにマークアップデータを送信し、汎用レンダラーのfileモードを選択したうえで.orgという拡張子のファイル名を指定できます。これによりGiteaはOrg-modeレンダラーを呼び出しますが、このレンダラーはgo-orgライブラリに依存しています。
Gitea 1.27.0では、アプリケーションがorg.New()を通じてgo-orgを初期化する際、同ライブラリのデフォルトのファイル読み取りコールバックを置き換えていません。影響を受けるgo-orgのバージョンでは、このコールバックはioutil.ReadFileにマッピングされます。
Org-modeの#+INCLUDEディレクティブは絶対パスを受け付け、意図したディレクトリへのアクセス制限を行わないままデフォルトのリーダーにそのパスを渡してしまいます。
Xbow Securityによると、認証を受けていない攻撃者は公開リポジトリのマークアップエンドポイントを悪用し、Giteaのサービスアカウントが読み取り可能なファイルを取得できるとのことです。この攻撃には、リポジトリへのコミットもリポジトリへの書き込み権限も、既存のユーザーアカウントも必要ありません。
この任意ファイル読み取りのプリミティブにより、Giteaのapp.ini設定ファイル、内部ベアラートークン、OAuthやJWTの署名用素材、デプロイメントの詳細情報など、非常に機密性の高い情報が流出する恐れがあります。
アドバイザリでは、app.iniからGiteaのINTERNAL_TOKENを抜き出すことで、より深刻な攻撃チェーンにつながりかねないと警告しています。攻撃者はこのトークンを使ってGiteaの内部機能とやり取りし、内部のロガー機構を通じて悪意のあるGitフックを注入できる可能性があります。
その後、匿名でのGit cloneが実行された際に、このフックがGiteaを動かしているOSユーザーとしてコマンドを実行する恐れがあります。
これにより、当初はパストラバーサルおよび情報漏えいの欠陥に見えていたものが、サーバー全体の侵害につながる可能性を秘めた問題へと変わります。この問題はCWE-22(制限されたディレクトリへのパス名の不適切な制限)に分類されています。
影響を受けるGiteaのリリースを稼働させており、かつマークアップルートが受け付けるコードユニットを持つ、公開読み取り可能なリポジトリを少なくとも1つホストしている組織は、この脆弱性の影響を受けます。
また、Giteaの標準的なストレージ権限設定では、サービスアカウントがGiteaが管理するグローバルなGit設定を変更できる場合があり、これによりRCEのリスクがさらに高まります。
管理者はただちにGitea 1.27.1以降へアップグレードすべきです。また、Giteaのサービスユーザーがアクセスできた可能性のある内部トークン、OAuth認証情報、JWTキー、その他のシークレットについてもローテーションを行うべきです。
セキュリティチームは、Webログおよびアプリケーションログを確認し、リポジトリのマークアップエンドポイントに対する不審な匿名リクエスト、特にOrg-modeレンダリングに関連するリクエストがないか調査すべきです。
ANY.RUNで、SOC調査の死角を減らしましょう。脅威をより早期に封じ込め、対応コストと事業への影響を抑えることができます。
翻訳元: https://cyberpress.org/critical-gitea-vulnerability-exposed/