
Gitea
diffpatchGitフックリモートコード実行脆弱性に対する、スタンドアロンの発見・評価・契約連携検証ツールです。
scanner.py は、ペネトレーションテスター、防御担当者、セキュリティ研究者に、依存関係のない単一ツールを提供します:
このプロジェクトは、認可されたセキュリティテスト、防御的検証、研究、教育のみを目的として提供されています。アクティブモードは、所有しているシステム、または明示的な書面による許可を得たシステムに対してのみ実行してください。適用されるすべての法律、契約、交戦規則、開示要件を遵守する責任は利用者にあります。
著者および貢献者は、誤用、損害、サービス中断、データ損失、法的結果について責任を負いません。アクティブPoCはGiteaオペレーティングシステムユーザーとしてコマンドを実行し、プライベートリポジトリを作成することでサーバー状態を変更します。他のRCE検証ツールと同様に扱ってください。
CVE-2026-60004はGiteaのリポジトリ diffpatch ワークフローに影響します。リポジトリ書き込み権限を持つユーザーは、共有ベア一時クローンにGitフックをインストールする制御されたパッチコンテンツを送信できます。細工されたパッチを2回適用するとadd/add衝突が発生し、Giteaサービスアカウントとしてフックが実行されます。
Forgejoおよび他のフォークは自動的に脆弱性ありとは分類されません。それらの実装は個別にレビューする必要があります。
アクティブモードはターゲットリストやワイルドカードを受け付けません。
PATH で利用可能なGitdiscover 用のLeakIX APIキースキャナーはPythonの標準ライブラリのみを使用します。pip install は不要です。
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
バージョン検出は評価シグナルであり、悪用可能性の証明ではありません。バックポートパッチ、カスタムビルド、リバースプロキシ、フォークは手動レビューが必要な場合があります。
シェル履歴にパスワードを残さないよう、コマンドの環境変数に配置してください:
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
自動化用に --yes-i-am-authorized を指定しない限り、confirm は契約に基づく確認フレーズの入力を求めます。デフォルトのリモートコマンドは id です。
これは、交戦規則でアカウント作成が許可されている場合にのみ使用してください:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
パスワードはプライベート資格情報ログにのみ保存され、JSONエビデンスやターミナル結果パネルには複製されません。
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test はアクティブな便利コマンドです。登録が有効な影響を受けるターゲットでは、自動的にアカウントとプライベートリポジトリを作成し、契約マーカーを書き込み、id を実行し、結果を afterdark-results/ の下に保存します。追加の対話プロンプトは意図的にないため、実行自体が認可の確認となります。
狭い範囲で明示的に承認された検証の場合、confirm と test は --cmd を受け付けます。十分な場合はデフォルトの id プロファイルを優先してください。
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='replace-with-your-key'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
既知の1つのホストについて、そのホストに接触せずにLeakIXレコードを検査する場合:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
発見結果はリードであり、リストされたシステムのスキャンや悪用の認可ではありません。
hooks/post-index-change ファイルを追加するパッチを構築します。diffpatch APIエンドポイントに2回送信します。0600 ファイルを使用して契約連携エビデンスを書き込み、既存のエビデンスの上書きを拒否します。認証済みHTTPリダイレクトは選択したターゲットオリジンに制限されます。Git出力取得も、認証ヘッダーがアクティブな間はリダイレクトを無効にします。
アクティブ実行では以下が生成される可能性があります:
confirmation.json — タイムスタンプ、ターゲット、アカウント名、バージョン評価、リターンコード、取得出力confirmation.command-output.txt — 完全なリモートコマンド出力credentials.txt — 要求された場合の生成済み使い捨てアカウントパスワードembedded-result.txt コンテンツはJSONエビデンス内に保持これらのファイルには機密のエンゲージメントデータが含まれる場合があります。これらは同梱の .gitignore で無視され、モード 0600 で作成され、エビデンス取り扱いポリシーに従って保存時に暗号化する必要があります。
このツールは、エビデンスをレビュー可能な状態に保つため、自動削除を意図的に回避します。テスト後、ターゲット管理者は以下を行う必要があります:
audit-* アカウントを削除afterdark-* リポジトリを削除/tmp/gitea-validation-*/client.txt マーカーを削除1.27.1 以降にアップグレードPoC実行の成功は、Giteaサービスアカウントとしてのコマンド実行を示します。それ自体がルートアクセス、永続化、横移動、または基盤ホストの侵害を証明するものではありません。
id または whoami に制限confirm 用の明示的な --execute-poc スイッチ同梱のテストはローカルで実行され、ネットワークリクエストを行いません:
python3 -m unittest discover -s tests -v
責任ある改善を歓迎します—特に互換性修正、誤検知の削減、エビデンス品質の向上、より安全なクリーンアップワークフローです。実際のターゲット詳細、資格情報、プライベートエビデンス、または武器化されたペイロードを提出しないでください。
このツール自体のセキュリティ問題については、SECURITY.md に従ってください。
優れたPoCは再現可能で、帰属可能で、クリーンアップが退屈であるべきだと信じる慎重な研究者のために作られました。🛡️
| 項目 | 詳細 |
|---|
| 製品 | Gitea |
| 影響を受けるリリース | >= 1.17.0, < 1.27.1 |
| 修正済みリリース | 1.27.1 |
| 影響 | Gitea OSユーザーとしてのリモートコマンド実行 |
| 必要なアクセス権 | リポジトリ書き込みアクセス; オープン登録により攻撃者が作成できる可能性あり |
| アドバイザリ | GHSA-rcr6-4jqh-j84m |
| モード | ネットワーク動作 | ターゲット状態を変更? | 目的 |
|---|
discover | LeakIXのみにクエリ | いいえ | 既存のサードパーティインデックスを検索; 発見されたホストには接触しません |
recon | 正確に1つのターゲット | いいえ | 固定公開ルートとターゲット公開Swaggerドキュメントを一覧化 |
verify | 正確に1つのターゲット | いいえ | /api/v1/version を読み取り、報告されたGiteaバージョンを分類 |
test | 正確に1つのターゲット | はい | 便利フロー: バージョンゲート、登録確認、使い捨てアカウント、マーカー、id、エビデンス |
confirm | 正確に1つのターゲット | はい | 承認済みアカウントまたは明示的な使い捨て登録による制御された確認 |