Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526- — HackTheBox「Nexus」の権限昇格に関するPoCおよび解説: root権限で実行されるGiteaテンプレート同期サービスが、細工されたGitオブジェクトを介したパストラバーサルに対して脆弱。教育目的のみ。 | Kitploit
ツール/GitHubGitHub/shirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-
特権昇格脆弱性分析エクスプロイトウェブアプリケーション悪用ポストエクスプロイトCTFペネトレーションテスト学習と教育ペイロード開発

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ラボと実践
GitHubshirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-

Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526-

HackTheBox「Nexus」の権限昇格に関するPoCおよび解説: root権限で実行されるGiteaテンプレート同期サービスが、細工されたGitオブジェクトを介したパストラバーサルに対して脆弱。教育目的のみ。

リポジトリを見る
6時間45分前未レビュー

Nexus — ローカル権限昇格 PoC

偽造 Git オブジェクトを介した Gitea テンプレート同期のパストラバーサル → root

HackTheBox マシン Nexus 向けの概念実証(PoC)権限昇格エクスプロイト。 root 所有の systemd サービスが Gitea の テンプレート リポジトリをディスクへ同期する際に、 エントリ名をサニタイズしていないため、認証済みの低権限ユーザーがディレクトリトラバーサルを 通じて root として任意のファイルを書き込める — ここでは /root/.ssh/authorized_keys に SSH 鍵を植え付けるために使用する。


⚠️ 免責事項

このコードは 教育目的および許可されたセキュリティテストのみ — つまり HackTheBox などの ラボ環境、またはあなたが所有するか、明示的な書面による許可を得てテストするシステム — に 提供される。あなたが管理していないシステムに対する不正使用は 違法 である。作者は 誤用に対して一切の責任を負わない。

Nexus マシンが HackTheBox 上でまだ アクティブ な場合、このエクスプロイトを公開または 共有しないこと — HTB のルールはアクティブなマシンへの解答の配布を禁止している。


脆弱性の概要

クラスパストラバーサル (CWE-22) → ローカル権限昇格
コンポーネントgitea-template-sync.service (カスタム /etc/gitea/template-sync.py)
実行ユーザーroot、gitea-template-sync.timer により約60秒ごとに起動
根本原因Git ツリーオブジェクトから取得した未サニタイズの名前に対する os.path.join()
影響認証済み低権限ユーザー → root

同期スクリプトは Gitea で テンプレート としてフラグ付けされたリポジトリからファイルを 読み取り、ローカルファイルシステムへ書き込む。書き込み先パスは概ね次のように構築される:

root@kitploit:~
dest = os.path.join(base_dir, name)   # name comes straight from the Git tree
open(dest, "w").write(content)

os.path.join() は .. シーケンスを 無効化しない。したがって、名前がトラバーサルパス (例: ../../../../../root/.ssh/authorized_keys) であるツリーエントリは、特権プロセスに 意図されたディレクトリの 外側 へ書き込ませる。


なぜ偽造 Git オブジェクトなのか?

Git はコンテンツと名前を別々に保存する:

  • blob はファイルの生コンテンツを保持する (名前はない);
  • tree は name → object をマッピングする (ファイル名はここにある);
  • commit はトップレベルのツリーを指す。

ツリーエントリ内のファイル名は単なるテキストであるため、.. に なり得る — しかし標準の Git クライアントは、まさにこの攻撃を防ぐために、そのようなエントリの作成を 拒否する。

この PoC は、生の Git オブジェクト を .git/objects/ に直接書き込み (SHA-1 id を手計算で)、 refs/heads/main を手動で細工することで、そのクライアント側チェックを回避する。プッシュされた リポジトリには .. という名前のツリーエントリが含まれ、root 同期プロセスがそれを解決して 辿る。


攻撃チェーン (ボックス全体のコンテキスト)

  1. 足がかり — Krayin CRM の無制限ファイルアップロード (CVE-2026-38526) → www-data として RCE。
  2. 横展開 — 本番 .env 内の平文認証情報がシステムパスワードとして再利用される → 低権限ユーザーとして SSH。
  3. 権限昇格 — この PoC → root。

3段階すべてに共通するテーマ: 検証なしに攻撃者制御のデータを信頼する特権プロセス (偽装された MIME タイプ、再利用されたパスワード、未サニタイズのファイル名)。


要件

  • ターゲットホスト上で、認証済みの低権限ユーザーとして実行すること。
  • Gitea が http://localhost:3000 で到達可能であること。
  • git、python3、curl、ssh が利用可能であること (ボックスのデフォルト)。

使用方法

root@kitploit:~
chmod +x nexus_privesc.sh
./nexus_privesc.sh -t <TARGET_IP> -u <GITEA_USER> -p <GITEA_PASS> [-d DEPTH]

例:

root@kitploit:~
./nexus_privesc.sh -t 10.129.21.192 -u jones -p 'REDACTED' -d 5

スクリプトの動作

  1. ed25519 SSH 鍵ペアを生成する (/tmp/.exploit_key)。
  2. 基本認証で Gitea API トークンを要求する。
  3. リポジトリを作成し、テンプレート としてフラグ付けする。
  4. /root/.ssh/authorized_keys にマッピングされる .. トラバーサルツリーをエンコードした 生の Git オブジェクトを偽造する。コンテンツは攻撃者の公開鍵。
  5. 汚染されたリポジトリをプッシュする。
  6. root 所有の同期タイマー (約60秒) を待つ。
  7. 植え付けた鍵で root としてログインする。

ターゲット上で同期を監視するには:

root@kitploit:~
tail -f /var/log/template-sync.log

成功した実行では次のような行がログに記録される:

root@kitploit:~
synced: ../../../../../root/.ssh/authorized_keys

DEPTH の調整

DEPTH は、同期/ステージングディレクトリからファイルシステムルート (/) まで登るのに 必要な .. の階層数である。ログ上で同期が成功しているのに root SSH が失敗する場合、 トラバーサルが誤った階層に着地している — -d 4 または -d 6 で再試行すること。正確な値は /etc/gitea/template-sync.py 内のステージングパスを読むことで確認できる。


緩和策

  • 信頼できない名前から os.path.join() だけでファイルシステムパスを構築しないこと。 パスを正規化して制限する。例:

    root@kitploit:~
    base = os.path.realpath(base_dir)
    dest = os.path.realpath(os.path.join(base, name))
    if not dest.startswith(base + os.sep):
        raise ValueError("path traversal blocked")
    
  • ..、絶対パス、またはパス区切り文字を含むツリーエントリ名を拒否する。

  • 同期サービスを root ではなく 専用の低権限アカウント で実行する。

  • Gitea で receive.fsckObjects = true を有効にして、不正な形式のプッシュされたオブジェクトを拒否する。


参考文献

  • CWE-22 — パス名の制限されたディレクトリへの不適切な制限 (パストラバーサル)
  • CVE-2026-38526 — Krayin CRM 無制限ファイルアップロード (足がかり段階)
  • Git 内部 — オブジェクト (blob / tree / commit): https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
  • MITRE ATT&CK — T1068 権限昇格のためのエクスプロイト

作者

<your name / handle> — HackTheBox での教育目的使用向け。

ツールをダウンロード
フラグ説明デフォルト
-tターゲット IP (最終的な root SSH 用)— (必須)
-uGitea ユーザー名— (必須)
-pGitea パスワード— (必須)
-d同期ディレクトリから / に到達するための .. の階層数5