← Back to Feed CACHED · 2026-10-07 20:20:33 · CACHE_KEY CVE-2026-42018
CVE-2026-42018 · CWE-287 · Disclosed 2026-08-12

JFrog Artifactory Anonymous-User Token Disclosure via Trailing-Slash Bypass

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

A locksmith accidentally leaves a master key in the mail slot, and burglars use it to copy the building's entire keyring

CVE-2026-42018 is an improper-authentication flaw in JFrog Artifactory's Access API. An unauthenticated attacker sends a POST to /access/api/v1/aws/token/ — note the trailing slash — and receives a valid JWT for Artifactory's internal anonymous-user identity, even on instances where anonymous access has been explicitly disabled. Affected versions span every supported branch: < 7.111.20, 7.117.0–7.117.27, 7.125.0–7.125.19, 7.133.0–7.133.28, and 7.146.0–7.146.8. JFrog Cloud instances were patched silently; self-hosted instances require a manual upgrade.

JFrog rated this HIGH 7.5 with a confidentiality-only vector (C:H/I:N/A:N). That score is technically accurate *if you evaluate the CVE in isolation* — the leaked anonymous token only reads what the anonymous identity can reach. In practice, however, virtually every instance vulnerable to CVE-2026-42018 is also vulnerable to CVE-2026-42016 (scope-validation bypass, fixed in 7.133.11), because the affected version ranges overlap almost completely. The chain converts the anonymous token into an admin-scoped access token in a single follow-up POST request, and real-world attackers executed this end-to-end in under five minutes. With admin control of an artifact repository, the blast radius is supply-chain-scale: poisoned packages, exfiltrated secrets, and persistent Rust backdoors that survive patching. The vendor score of 7.5 dramatically understates the real-world risk.

"Unauthenticated trailing-slash trick hands attackers an internal token that chains to full Artifactory admin takeover"
02 · The Attack Path

5 steps from start to impact.

STEP 01

Trailing-slash token leak

The attacker sends an unauthenticated POST /access/api/v1/aws/token/ (trailing slash) to the target Artifactory instance. The trailing slash bypasses the route-matching logic that would normally reject this request when anonymous access is disabled. The server responds HTTP 200 with a JWT bound to the internal anonymous-user identity.
Conditions required:
  • Network reachability to the Artifactory Access API (typically same port as web UI, default 8082 or reverse-proxied on 443)
Where this breaks in practice:
  • None — the endpoint is pre-authentication; disabling anonymous access does not block it
Detection/coverage: Nuclei template CVE-2026-42018 (projectdiscovery/nuclei-templates PR #17262). Google Tsunami scanner plugin available. Log signature: 401 on the bare path followed by 200 on the trailing-slash variant from the same source IP.
STEP 02

Token scope escalation via CVE-2026-42016

The attacker takes the anonymous JWT and sends POST /access/api/v1/tokens requesting an admin-scoped token. Artifactory validates the token's signature and issuer but does not validate its scope, so it mints a new token with admin authority while retaining the anonymous username. This is CVE-2026-42016 (CWE-863), present on all instances < 7.133.11 — which overlaps almost entirely with CVE-2026-42018's affected range.
Conditions required:
  • A valid Artifactory JWT (obtained in step 1)
  • Target instance also vulnerable to CVE-2026-42016 (< 7.133.11)
Where this breaks in practice:
  • Requires both CVEs to be present, but version overlap makes co-presence the default condition, not the exception
Detection/coverage: Audit logs show admin-level operations attributed to token:anonymous. SIEM rule: any token-creation event with scope escalation from a non-admin principal.
STEP 03

Persistent admin account creation

With the admin-scoped token, the attacker calls PUT /api/security/users/<username> to create a new administrator account (observed naming patterns: svc_[a-zA-Z0-9]{8}, Nxploited_[a-zA-z0-9]{3}, 0xTerror, jfrog-distribution). This survives token revocation and provides a stable re-entry point.
Conditions required:
  • Admin-scoped access token (obtained in step 2)
Where this breaks in practice:
  • None — this is a normal Artifactory admin API call
Detection/coverage: Alert on unexpected admin-account creation events. Sigma rules from SOC Prime for 'Possible JFrog Artifactory Account Creation For Persistence'.
STEP 04

Groovy plugin deployment and RCE

The attacker uploads a malicious Groovy plugin via the Artifactory plugin framework, then invokes it through the plugin endpoint to execute arbitrary commands on the underlying host OS. Observed post-exploitation includes system reconnaissance, extraction of cluster join keys, and reading configuration files with database credentials.
Conditions required:
  • Persistent admin account (step 3)
  • Artifactory plugin framework enabled (default on self-hosted)
Where this breaks in practice:
  • Plugin framework can be disabled, but very few organizations do so as it breaks legitimate workflows
Detection/coverage: SOC Prime Sigma rule: 'Possible JFrog Artifactory Command Execution via Plugin Endpoint'. Monitor for POST requests to /api/plugins/execute/ from newly created accounts.
STEP 05

Rust backdoor deployment and supply-chain pivot

Attackers deployed custom Rust-compiled backdoors with C2 capabilities (observed C2: 64.207.232[.]6:8443, payload hosts: log.gitclone[.]org:45678, 3.88.162[.]79:36789). These backdoors persist across Artifactory upgrades and provide ongoing access. From this position, attackers can poison artifacts consumed by downstream CI/CD pipelines, achieving supply-chain-scale compromise.
Conditions required:
  • OS-level command execution (step 4)
  • Outbound connectivity to C2 infrastructure
Where this breaks in practice:
  • Egress filtering may block C2 callbacks, but many Artifactory hosts require broad outbound access to pull remote repositories
Detection/coverage: Network detection for C2 IOCs. File-integrity monitoring on Artifactory host. EDR alerting on unsigned Rust binaries spawned by the Artifactory process.
03 · Compensating Control

1
CRITICAL 9.4→MEDIUM 4.3
SEVERITY REDUCED
Block or restrict access to /access/api/v1/aws/token/ at the reverse proxy or WAF — The trailing-slash bypass targets a specific endpoint. Add a WAF or reverse-proxy rule (nginx, HAProxy, F5, Cloudflare) to deny all requests matching /access/api/v1/aws/token regardless of trailing characters. This breaks the chain at step 1. Deploy within hours — this is a KEV-listed, actively exploited vulnerability; the noisgate mitigation SLA for CRITICAL is ≤ 3 days, but active exploitation warrants same-day action.
2
CRITICAL 9.4→LOW 3.1
SEVERITY REDUCED
Restrict network access to Artifactory to authorized CI/CD and developer networks only — Place Artifactory behind a VPN, zero-trust proxy, or firewall ACL so that only known build agents and developer subnets can reach it. This eliminates the unauthenticated-remote-attacker threat model entirely. Deploy within 3 days per the noisgate mitigation SLA for CRITICAL.
3
CRITICAL 9.4→CRITICAL 9.4
Audit for indicators of compromise immediately — Search Artifactory audit logs for token:anonymous performing admin operations. Enumerate all admin accounts and compare against your known-good list. Check for Groovy plugins you did not deploy. Search the filesystem for unsigned Rust binaries. Check for connections to known C2 IOCs (64.207.232[.]6:8443, log.gitclone[.]org:45678, 3.88.162[.]79:36789). If ANY IOC is found, treat the instance as compromised: rotate all secrets, revoke all tokens, rebuild from a known-good backup.
4
CRITICAL 9.4→HIGH 7.5
SEVERITY REDUCED
Rotate all Artifactory access tokens and cluster join keys — Even if no compromise is detected, proactively revoke all access tokens issued since Aug 12, 2026 and rotate the platform join key. This invalidates any tokens an attacker may have exfiltrated but not yet used. Deploy within 3 days.
5
CRITICAL 9.4→IGNORE 0.0
SEVERITY REDUCED
Upgrade to patched Artifactory version — Apply the vendor patch for your release branch: 7.111.20, 7.117.27, 7.125.19, 7.133.28, or 7.146.8. This is the definitive fix. Per the noisgate remediation SLA for CRITICAL, complete within 90 days — but given KEV listing and active exploitation, prioritize within days, not weeks. Note: upgrading alone does not remove backdoors already planted. Pair with the IOC audit above.
What doesn't work
  • Disabling anonymous access — this is precisely the control CVE-2026-42018 bypasses. The trailing-slash variant returns the anonymous token regardless of this setting. Many defenders assume their 'anonymous access disabled' configuration protects them; it does not.
  • MFA on Artifactory user accounts — the exploit is pre-authentication. It obtains a token via an API endpoint that never triggers an authentication flow, so MFA is never invoked.
  • Patching without IOC review — upgrading closes the vulnerability but does NOT revoke tokens already issued, remove admin accounts already created, or delete Rust backdoors already deployed. Attackers were observed maintaining persistence that survives patching.
04 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationConfirmed. Wiz Research documented active exploitation from Aug 15 – Sep 8, 2026 across multiple self-hosted Artifactory instances. Attackers achieved admin takeover in under 5 minutes. Fastly counted ~406,000 exploitation attempts on Sep 2 alone (across the CVE chain). OpenInfra Europe's Artifactory instance was publicly confirmed breached.
CISA KEVListed Sep 11, 2026. CVE-2026-42018 was added alongside CVE-2026-42016 and CVE-2026-82329. Federal agencies required to remediate per BOD 22-01 deadlines.
EPSS0.098 (9.8th percentile) — places this in the top 10% of CVEs by predicted exploitation probability, consistent with confirmed active exploitation.
PoC availabilityMultiple public PoCs. Nuclei template by theamanrawat, Google Tsunami scanner plugin (PR #908), and standalone exploit toolkits on GitHub (SecureWithUmer/CVE-2026-PoCs). The exploit is a single curl command.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N — Network-accessible, zero complexity, no auth, no user interaction. Vendor scoped to confidentiality-only. The chain with CVE-2026-42016 would push I and A to High if scored holistically.
Affected versionsArtifactory < 7.111.20, 7.117.0–7.117.27, 7.125.0–7.125.19, 7.133.0–7.133.28, 7.146.0–7.146.8. Virtually all of these also fall below the CVE-2026-42016 fix threshold (7.133.11), making the admin-takeover chain the default condition.
Fixed versions7.111.20, 7.117.27, 7.125.19, 7.133.28, 7.146.8 (for CVE-2026-42018). To address the full chain including CVE-2026-42016, you need ≥ 7.133.11. JFrog Cloud was pre-patched; only self-hosted instances require action.
Internet exposure~17,877 Artifactory instances observable on the internet per ZoomEye/Shodan scans (Sep 2026). Wiz and watchTowr found 49–62% of internet-reachable instances were vulnerable to at least one of the three chained flaws.
Disclosure timelineDisclosed Aug 12, 2026. Active exploitation began Aug 15 (3 days later). CISA KEV listing Sep 11. OpenInfra Europe breach confirmed Sep 30.
Reporting researcherOriginal reporter not publicly credited by JFrog. In-the-wild exploitation analysis published by Wiz Research. Detection content contributed by SOC Prime, watchTowr, and Fastly.

Sources.

  1. Wiz Research — Artifactory Under Attack
  2. The Hacker News — Attackers Chain JFrog Artifactory Flaws
  3. CISA KEV Catalog — CVE-2026-42018
  4. JFrog Security Advisories
  5. Nuclei Template PR #17262 — CVE-2026-42018
  6. SOC Prime — Artifactory CVEs Exploited in the Wild
  7. ZoomEye / DEV.to — 17,881 Artifactory Instances Observable Online
  8. CSO Online — Exploited JFrog Artifactory Bug Puts Supply Chain on Alert
05 · The Call

Final Verdict
↑ UPGRADED to CRITICAL (9.4/10)

Why this verdict

  • Zero-friction entry point: The exploit requires no authentication, no user interaction, and no special privileges. A single unauthenticated POST with a trailing slash returns a valid JWT. The CVSS attack-complexity and privileges-required ratings are both None — there is literally nothing between the attacker and the token.
  • Near-certain chain completion to admin takeover: CVE-2026-42016's affected range (< 7.133.11) encompasses virtually the entire CVE-2026-42018 affected population. The version overlap means the admin-escalation chain is the *default* condition, not an edge case. Treating CVE-2026-42018 as a standalone 7.5 information-disclosure bug misrepresents the risk defenders actually face.
  • Active, weaponized, multi-actor exploitation: This is not theoretical. Wiz documented real intrusions from Aug 15–Sep 8 with Rust backdoors. Fastly logged ~406K exploitation attempts in a single day. Multiple threat groups are exploiting this simultaneously. OpenInfra Europe's instance was publicly breached.
  • Role multiplier: JFrog Artifactory is a canonical supply-chain infrastructure component — it IS the artifact store. 100% of Artifactory installations serve this role by definition. Admin takeover of Artifactory enables artifact poisoning, secret exfiltration, CI/CD pipeline compromise, and lateral movement to every system that pulls packages from it. The blast radius is supply-chain-scale. Per the high-value role catalog (CI/CD + artifact stores), the verdict floor for a chainable unauthenticated-to-admin flaw in this component is CRITICAL.
  • Massive attack surface: ~17,877 instances are internet-facing. 49–62% were found vulnerable. This is not a niche product with limited exposure — Artifactory is the dominant enterprise binary repository manager. Self-hosted instances are the target, and most enterprises running Artifactory have at least one.

Why not higher?

A 9.4 rather than 10.0 because CVE-2026-42018 *alone* only yields an anonymous-identity token with limited read access — the critical impact requires co-exploitation of CVE-2026-42016. While the version overlap makes co-presence near-certain, it is not architecturally guaranteed (an instance could theoretically be on a version that patches one but not the other). The scope remains Unchanged per the CVSS vector.

Why not lower?

Downgrading below CRITICAL is not defensible. The affected component is a supply-chain trust root by definition — every artifact it serves is implicitly trusted by downstream build and deployment pipelines. The chain is actively exploited in the wild with confirmed breaches. The exploit is trivial (one curl command), PoCs are public, and the internet-facing attack surface is measured in the tens of thousands. KEV listing reinforces that this demands immediate action. Friction is effectively zero at every step of the chain.

06 · Verification

Crowdsourced verification payload.

Run this script from any host with curl and network access to your Artifactory instance. Pass the base URL as the first argument: bash check_cve_2026_42018.sh https://artifactory.corp.example.com. No authentication is required — the script tests the unauthenticated endpoint. It also attempts a version check via the system health endpoint.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_42018.sh — CVE-2026-42018 JFrog Artifactory anonymous token leak checker
# Usage: bash check_cve_2026_42018.sh <ARTIFACTORY_BASE_URL>
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

set -euo pipefail

BASE_URL="${1:?Usage: $0 <ARTIFACTORY_BASE_URL>}"
BASE_URL="${BASE_URL%/}"  # strip trailing slash

echo "[*] Testing CVE-2026-42018 against: ${BASE_URL}"
echo

# Step 1: Probe the trailing-slash endpoint
echo "[*] Step 1: Probing POST ${BASE_URL}/access/api/v1/aws/token/ ..."
HTTP_CODE=$(curl -sk -o /tmp/cve_2026_42018_resp.json -w '%{http_code}' \
  -X POST "${BASE_URL}/access/api/v1/aws/token/" \
  -H 'Content-Type: application/json' \
  -d '{}' \
  --connect-timeout 10 --max-time 15 2>/dev/null || echo "000")

echo "    HTTP response code: ${HTTP_CODE}"

if [[ "${HTTP_CODE}" == "200" ]]; then
  # Check if response contains a token
  if grep -qi '"access_token"\|"token_type"\|"jwt"' /tmp/cve_2026_42018_resp.json 2>/dev/null; then
    echo
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "  RESULT: VULNERABLE"
    echo "  The endpoint returned a token to an unauthenticated caller."
    echo "  This instance is exploitable via CVE-2026-42018."
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo
    echo "[!] Response preview (first 200 chars):"
    head -c 200 /tmp/cve_2026_42018_resp.json 2>/dev/null
    echo
    rm -f /tmp/cve_2026_42018_resp.json
    exit 1
  fi
fi

if [[ "${HTTP_CODE}" == "401" || "${HTTP_CODE}" == "403" || "${HTTP_CODE}" == "404" || "${HTTP_CODE}" == "405" ]]; then
  echo
  echo "  RESULT: PATCHED"
  echo "  The endpoint correctly rejected the unauthenticated request (HTTP ${HTTP_CODE})."
  rm -f /tmp/cve_2026_42018_resp.json
  exit 0
fi

# Step 2: Fallback — try to determine version from system info
echo
echo "[*] Step 2: Attempting version check via /api/system/version ..."
VER_RESP=$(curl -sk --connect-timeout 10 --max-time 10 "${BASE_URL}/api/system/version" 2>/dev/null || true)
VERSION=$(echo "${VER_RESP}" | grep -oP '"version"\s*:\s*"\K[0-9.]+' 2>/dev/null || true)

if [[ -n "${VERSION}" ]]; then
  echo "    Detected Artifactory version: ${VERSION}"
  # Parse major.minor.patch
  IFS='.' read -r MAJOR MINOR PATCH <<< "${VERSION}"
  MINOR=${MINOR:-0}
  PATCH=${PATCH:-0}
  
  VULN=0
  if (( MAJOR < 7 )); then
    VULN=1
  elif (( MAJOR == 7 )); then
    if (( MINOR < 111 )); then
      VULN=1
    elif (( MINOR == 111 && PATCH < 20 )); then
      VULN=1
    elif (( MINOR >= 117 && MINOR <= 117 && PATCH < 27 )); then
      VULN=1
    elif (( MINOR >= 125 && MINOR <= 125 && PATCH < 19 )); then
      VULN=1
    elif (( MINOR >= 133 && MINOR <= 133 && PATCH < 28 )); then
      VULN=1
    elif (( MINOR >= 146 && MINOR <= 146 && PATCH < 8 )); then
      VULN=1
    fi
  fi
  
  if (( VULN == 1 )); then
    echo
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "  RESULT: VULNERABLE (by version)"
    echo "  Artifactory ${VERSION} is in the affected range."
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    rm -f /tmp/cve_2026_42018_resp.json
    exit 1
  else
    echo
    echo "  RESULT: PATCHED (by version)"
    echo "  Artifactory ${VERSION} is at or above the fix level."
    rm -f /tmp/cve_2026_42018_resp.json
    exit 0
  fi
fi

echo
echo "  RESULT: UNKNOWN"
echo "  Could not determine vulnerability status. HTTP code: ${HTTP_CODE}"
echo "  Verify manually or check the Artifactory version in the admin console."
rm -f /tmp/cve_2026_42018_resp.json
exit 2