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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-71557-poc — CVE-2026-71557 のローカル概念実証(PoC)。go-git のファイルシステム参照ストレージにおけるパストラバーサルを実証し、悪用ロジックと脆弱版/修正版のバージョン比較を含みます。 | Kitploit
ツール/GitHubGitHub/saku0512/cve-2026-71557-poc
脆弱性分析エクスプロイトペネトレーションテストサプライチェーンセキュリティ学習と教育
GitHubsaku0512/cve-2026-71557-poc

CVE-2026-71557-poc

CVE-2026-71557 のローカル概念実証(PoC)。go-git のファイルシステム参照ストレージにおけるパストラバーサルを実証し、悪用ロジックと脆弱版/修正版のバージョン比較を含みます。

リポジトリを見る
51ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

CVE-2026-71557: go-git reference name path traversal PoC

English version

概要

このリポジトリは、go-git の公開アドバイザリ GHSA-qgq7-7hm3-q39j に基づく CVE-2026-71557 の安全なローカル PoC です。

修正前の storage/filesystem は、loose reference の名前を十分に検証せず .git/<reference-name> のパスとして使用していました。そのため、 refs/heads/../../config のような参照名を渡すと .. が正規化され、 本来の reference storage 外にある .git/config を上書きできます。

この PoC は実際の go-git API を呼び出し、一時ディレクトリ内に作成した ダミー .git/config だけを対象にします。外部 Git サーバーへの接続、既存 リポジトリの変更、任意コマンドの実行は行いません。

免責事項

このプロジェクトは、教育目的および許可された倫理的なセキュリティ検証のみを 目的としています。許可のない環境に対して使用しないでください。

脆弱性の詳細

  • CVE ID: CVE-2026-71557
  • GitHub Advisory: GHSA-qgq7-7hm3-q39j
  • 種別: Path Traversal (CWE-22)
  • 深刻度: Medium
  • CVSS v3.1: 6.3 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:L)
  • 影響を受けるバージョン:
    • github.com/go-git/go-git/v5 <= 5.19.1
    • github.com/go-git/go-git/v6 <= 6.0.0-alpha.4
  • 修正済みバージョン:
    • v5: 5.19.2
    • v6: 6.0.0-alpha.5
  • 影響するストレージ: storage/filesystem の dotgit reference storage
  • 影響しないストレージ: storage/memory

根本原因

修正前の v5.19.1 では、DotGit.SetRef が参照名をそのままファイル名として setRef へ渡していました。

root@kitploit:~
fileName := r.Name().String()
return d.setRef(fileName, content, old)

filesystem-backed storage のルートは通常 .git です。参照名 refs/heads/../../config はパス正規化後に config となるため、参照値の書き込みが .git/config の書き込みへ変わります。悪意ある Git サーバーがこのような参照名を advertise し、clone/fetch 時の refspec mapping 後も traversal が残る場合に、 攻撃者制御の参照名がこのコードパスへ到達する可能性があります。

修正版は filesystem storage の SetRef、Ref、RemoveRef などの入口で 参照名を検証し、reference storage を逸脱する名前を拒否します。

PoC

必要環境

  • Go 1.25 以降、または toolchain 自動取得が有効な Go
  • 初回の module download に必要なネットワーク接続

脆弱版での再現

go.mod は脆弱な v5.19.1 に固定されています。

root@kitploit:~
go run .

期待される主要出力:

root@kitploit:~
[*] go-git version: v5.19.1
[*] crafted reference: refs/heads/../../config
[*] SetReference error: <nil>
[!] VULNERABLE: .git/config was overwritten through the reference name.

PoC は次の処理を行います。

  1. OS の一時ディレクトリに filesystem-backed Git storage を作成する
  2. .git/config に安全な marker を書き込む
  3. refs/heads/../../config という hash reference を SetReference へ渡す
  4. marker が参照 hash に置き換わったことを検証する
  5. 一時ディレクトリを自動削除する

脆弱版と修正版の比較

次のスクリプトは、リポジトリ内の go.mod を変更せず、一時 module を使って v5.19.1 と v5.19.2 の同じ PoC を順番に実行します。

root@kitploit:~
./scripts/run-version-matrix.sh

期待される判定:

root@kitploit:~
go-git v5.19.1
[!] VULNERABLE: .git/config was overwritten through the reference name.

go-git v5.19.2
[+] FIXED: the crafted reference was rejected and .git/config stayed intact.

一時ファイルを確認したい場合は -keep を付けてください。表示されたディレクトリは 自動削除されないため、確認後に手動で削除してください。

root@kitploit:~
go run . -keep

PoC の範囲

この PoC は、アドバイザリで説明されている filesystem storage の脆弱な入口を 直接呼び出して、パストラバーサルによる metadata overwrite を検証します。 悪意ある Git protocol server や clone/fetch の transport 層は実装していません。

対策

v5 利用者は v5.19.2 以降、v6 alpha 利用者は v6.0.0-alpha.5 以降へ更新して ください。更新できない間は、filesystem-backed storage で信頼できない Git サーバーから clone/fetch しないでください。storage/memory のみを利用する アプリケーションは、この脆弱性の影響を受けません。

参考資料

  • GHSA-qgq7-7hm3-q39j
  • go-git PR #2247 (v6 fix)
  • go-git PR #2254 (v5 backport)
  • v5 fix commit f3d0cc1
  • v5 additional safety commit 3b306ef
ツールをダウンロード