Organizations running self-managed JFrog Artifactory instances are facing active, in-the-wild exploitation of a chain of three vulnerabilities that allow unauthenticated attackers to bypass login controls, escalate to administrator privileges, and deploy persistent backdoors on the server. According to reporting from SecurityWeek, these flaws — centered on Artifactory's unauthorized access mechanisms — are being weaponized right now, not theorized about in a lab.
This is not a niche risk. Artifactory sits at the heart of the software supply chain for thousands of enterprises. It stores your proprietary binaries, container images, build artifacts, API keys, and credentials for upstream registries. An attacker with administrative control of your Artifactory instance doesn't just own one server — they own a trusted distribution point that feeds every developer workstation, CI/CD runner, and production deployment in your environment. That is a supply-chain compromise scenario, and it demands the same urgency you'd give a domain controller compromise.
What Happened
SecurityWeek reported that threat actors are actively exploiting three distinct vulnerabilities in JFrog Artifactory. Individually, each flaw is dangerous; chained together, they form a complete intrusion path:
- Authentication bypass — The attacker circumvents Artifactory's access controls to interact with protected functionality without valid credentials. This class of flaw typically abuses improper authorization checks in REST API endpoints, alternative authentication handlers (such as access token or API key validation logic), or internal service-to-service trust boundaries that assume requests are already authenticated.
- Privilege escalation to administrator — Once inside the application context, the attacker elevates to full administrative privileges. In Artifactory, admin access means control over users, repositories, replication, system configuration, and — critically — the ability to create access tokens and deploy content.
- Backdoor deployment — With administrative control, the actor establishes persistence. In practical Artifactory intrusions, this manifests as rogue administrator accounts, long-lived admin-scoped access tokens, malicious artifacts planted in repositories, or webshells (frequently JSP-based) dropped into the embedded Tomcat web application directories that serve Artifactory's UI and API.
The exploitation is confirmed and ongoing — this is an active campaign, not a proof-of-concept disclosure. Internet-facing Artifactory instances are the primary target surface, but attackers who have already gained an internal foothold will happily pivot to Artifactory for exactly the supply-chain reasons described above.
Technical Analysis
Affected Products and Exposure
- Product: JFrog Artifactory, self-managed (on-premises and self-hosted cloud) deployments. JFrog's SaaS offering is managed and patched by JFrog; your exposure there is governed by their remediation, but verify with JFrog support if you run a hybrid topology.
- Exposure surface: The Artifactory web application and REST API (default ports 8081/8082), the embedded Apache Tomcat container, and any reverse proxy (NGINX/Apache) fronting the instance.
- High-value assets at risk: Repository contents (proprietary code, container images), stored credentials and tokens for upstream registries (Docker Hub, npm, Maven Central proxies, cloud registries), signing keys, and the trust relationship between Artifactory and every consumer of its artifacts.
How the Attack Chain Works — Defender's View
From a detection engineering perspective, the chain produces observable artifacts at every stage:
- Stage 1 — Authentication bypass: Anomalous requests to Artifactory's REST API (
/artifactory/api/...,/access/api/...) that succeed without corresponding legitimate session establishment, requests hitting administrative endpoints from source IPs or user agents with no prior history, or bypass of expected SSO/reverse-proxy authentication flows. Look for successful admin-level API calls that lack a preceding authentication event in access logs. - Stage 2 — Privilege escalation: Creation of new administrator users, modification of existing user permissions, or generation of admin-scoped access tokens. Artifactory logs these events in
artifactory.log/access.logand through the audit trail (/artifactory/api/system/logs, audit events). A new admin account or token created outside a change window is a near-certain indicator. - Stage 3 — Backdoor deployment: The most reliable host-side artifacts are:
- Webshells: New or modified
.jspfiles under the Tomcat webapps directory (commonly/opt/jfrog/artifactory/app/artifactory/tomcat/webapps/on Linux installs). JFrog does not ship random new JSP files between upgrades — any unexpected JSP is suspect. - Abnormal process execution: The Artifactory/Tomcat JVM spawning shell interpreters (
/bin/sh,/bin/bash), download tools (curl,wget), or scripting runtimes. The JVM has no legitimate reason to exec shells in normal operation. - Persistence via the platform: Rogue admin users and tokens created in Stage 2 are themselves the persistence mechanism and will survive a webshell cleanup.
- Malicious artifact uploads: Newly pushed artifacts in release repositories from unexpected deployer accounts or IPs — a staging indicator for downstream supply-chain attack.
- Webshells: New or modified
Exploitation Status
Confirmed active exploitation in the wild, with backdoor deployment as the observed objective per SecurityWeek's reporting. Treat any unpatched, internet-reachable Artifactory instance as potentially compromised until proven otherwise — patch-and-move-on is not sufficient; you must hunt.
Detection & Response
The detections below target the highest-fidelity, lowest-noise behaviors in this attack chain: the JVM spawning shells, webshell staging in Tomcat directories, and rogue administrative account/token creation. Deploy the host-side rules to your Artifactory servers and the log-based hunts to wherever you centralize Artifactory and reverse-proxy logs.
---
title: Artifactory Tomcat JVM Spawning Shell or Download Utility
id: 3f9c1a7e-5b2d-4e8a-9c31-7d6e2f4a8b10
status: experimental
description: Detects the Artifactory embedded Tomcat JVM process spawning command interpreters or download utilities, consistent with webshell/backdoor execution following authentication bypass exploitation.
references:
- https://www.securityweek.com/three-jfrog-artifactory-flaws-exploited-for-backdoor-deployment/
- https://attack.mitre.org/techniques/T1059/
- https://attack.mitre.org/techniques/T1505.003/
author: Security Arsenal
date: 2026/01/15
tags:
- attack.execution
- attack.persistence
- attack.t1059.004
- attack.t1505.003
logsource:
category: process_creation
product: linux
detection:
selection_parent:
ParentImage|contains:
- '/java'
ParentCommandLine|contains:
- 'artifactory'
selection_child:
Image|endswith:
- '/sh'
- '/bash'
- '/dash'
- '/curl'
- '/wget'
- '/python'
- '/perl'
- '/nc'
- '/ncat'
condition: selection_parent and selection_child
falsepositives:
- Rare administrative maintenance scripts invoked through custom Artifactory plugins or user plugins
level: high
---
title: Webshell JSP Dropped in Artifactory Tomcat Webapps Directory
id: 8c2e5d41-6a9f-4b3c-a1d8-2e7f9b0c4d62
status: experimental
description: Detects creation or modification of JSP files within the Artifactory embedded Tomcat webapps directory, a common webshell staging location following Artifactory compromise.
references:
- https://www.securityweek.com/three-jfrog-artifactory-flaws-exploited-for-backdoor-deployment/
- https://attack.mitre.org/techniques/T1505.003/
author: Security Arsenal
date: 2026/01/15
tags:
- attack.persistence
- attack.t1505.003
logsource:
category: file_event
product: linux
detection:
selection_path:
TargetFilename|contains:
- '/artifactory/tomcat/webapps/'
- '/jfrog/artifactory/app/artifactory/tomcat/webapps/'
selection_ext:
TargetFilename|endswith:
- '.jsp'
- '.jspx'
- '.war'
condition: selection_path and selection_ext
falsepositives:
- Legitimate Artifactory upgrades — correlate file creation time against your upgrade/change windows
level: high
---
title: Artifactory Administrative User or Access Token Created from Anomalous Source
id: 5d1b8f63-2c4a-4e79-b3a6-9f0d1e5c7a84
status: experimental
description: Detects administrative account creation or access token generation against the Artifactory REST API, a key privilege-escalation and persistence behavior observed in the active exploitation campaign.
references:
- https://www.securityweek.com/three-jfrog-artifactory-flaws-exploited-for-backdoor-deployment/
- https://attack.mitre.org/techniques/T1136/
- https://attack.mitre.org/techniques/T1098/
author: Security Arsenal
date: 2026/01/15
tags:
- attack.persistence
- attack.privilege_escalation
- attack.t1136
- attack.t1098
logsource:
category: webserver
product: linux
detection:
selection_endpoint:
cs-uri|contains:
- '/access/api/v1/tokens'
- '/artifactory/api/security/users'
- '/artifactory/api/security/permissions'
selection_method:
cs-method:
- 'POST'
- 'PUT'
condition: selection_endpoint and selection_method
falsepositives:
- Legitimate IdP/SCIM provisioning and CI service-account automation — filter on known automation source IPs and service user-agents before alerting
level: medium
KQL — Microsoft Sentinel (Syslog/CEF ingestion from Artifactory hosts and reverse proxies)
The first query hunts host process execution telemetry; the second hunts API-layer abuse in web/proxy logs. Run both across a minimum 30-day lookback to catch pre-patch compromise.
// Hunt 1: Artifactory JVM spawning shells or download tools (Linux auditd/Syslog process events)
let lookback = 30d;
Syslog
| where TimeGenerated >= lookback
| where Facility =~ "auditd" or ProcessName =~ "java"
| where SyslogMessage has "artifactory"
and SyslogMessage has_any ("/bin/sh", "/bin/bash", "/usr/bin/curl", "/usr/bin/wget", "python", "/bin/nc")
| project TimeGenerated, Computer, ProcessName, SyslogMessage
| order by TimeGenerated desc;
// Hunt 2: Admin user/token creation API calls, flagged when source has no prior 14-day history
let lookback = 30d;
let history = 14d;
let adminCalls =
CommonSecurityLog
| where TimeGenerated >= lookback
| where RequestURL has_any ("/access/api/v1/tokens", "/api/security/users", "/api/security/permissions")
| where RequestMethod in~ ("POST", "PUT")
| summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Hits=count(),
Methods=make_set(RequestMethod), URIs=make_set(RequestURL)
by SourceIP, RequestURL;
let knownSources =
CommonSecurityLog
| where TimeGenerated between (ago(lookback + history) .. ago(lookback))
| summarize by SourceIP;
adminCalls
| where SourceIP !in (knownSources)
| order by FirstSeen desc
Velociraptor VQL — Host Forensics on Artifactory Servers
Use this artifact to sweep Artifactory hosts for webshell staging, suspicious child processes of the JVM, and unexpected outbound connections from the Artifactory process — the three fastest triage checks for post-exploitation activity.
-- Artifactory compromise triage: webshell files, suspicious JVM children, anomalous connections
LET jsp_files = SELECT FullPath, Mtime, Ctime, Size
FROM glob(globs=['/opt/jfrog/artifactory/app/artifactory/tomcat/webapps/**/*.jsp',
'/var/opt/jfrog/artifactory/tomcat/webapps/**/*.jsp',
'/opt/jfrog/artifactory/app/artifactory/tomcat/webapps/**/*.war'])
ORDER BY Ctime DESC
LET suspicious_procs = SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE Name =~ '(?i)^(sh|bash|dash|curl|wget|python|perl|nc|ncat)$'
AND Ppid IN (SELECT Pid FROM pslist() WHERE CommandLine =~ 'artifactory')
LET artifactory_conns = SELECT Pid, Name, RemoteAddr, RemotePort, Status
FROM netstat()
WHERE Name =~ '(?i)java'
AND RemotePort NOT IN (8081, 8082, 8040, 5432, 443)
AND RemoteAddr !~ '^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.|127\\.)'
SELECT * FROM jsp_files
UNION ALL
SELECT FullPath, Mtime, Ctime, Size FROM suspicious_procs
(Note: deploy the three LET queries as separate result sets in your artifact definition if your Velociraptor version does not support heterogeneous UNION output — the JSP glob and suspicious process listing are the two highest-value checks.)
Remediation and Verification Script
The following Bash script verifies your Artifactory version, snapshots indicators of compromise (recent JSP files, admin users, tokens), and checks for suspicious JVM child processes. Run it on every self-managed Artifactory node before and after patching.
#!/bin/bash
# Artifactory post-exploitation triage and patch verification
# Run as root or a user with read access to the Artifactory home directory
ART_HOME="${JFROG_HOME:-/opt/jfrog/artifactory}"
TOMCAT_WEBAPPS="$ART_HOME/app/artifactory/tomcat/webapps"
REPORT="/tmp/artifactory_triage_$(date +%Y%m%d_%H%M%S).txt"
echo "=== Artifactory Triage Report: $(hostname) $(date) ===" | tee "$REPORT"
# 1. Record installed version — compare against JFrog's fixed versions in their advisory
echo -e "\n[+] Installed Artifactory version:" | tee -a "$REPORT"
curl -sk "http://localhost:8081/artifactory/api/system/version" | tee -a "$REPORT"
# 2. Hunt for recent or unexpected JSP/WAR files (webshell staging)
echo -e "\n[+] JSP/WAR files modified in the last 45 days under Tomcat webapps:" | tee -a "$REPORT"
find "$TOMCAT_WEBAPPS" -type f \( -name "*.jsp" -o -name "*.jspx" -o -name "*.war" \) -mtime -45 -ls 2>/dev/null | tee -a "$REPORT"
# 3. Enumerate local administrator users via the security API (requires an existing admin token)
# Set ADMIN_TOKEN before running: export ADMIN_TOKEN=<token>
if [ -n "$ADMIN_TOKEN" ]; then
echo -e "\n[+] Admin users (review for unauthorized accounts):" | tee -a "$REPORT"
curl -sk -H "Authorization: Bearer $ADMIN_TOKEN" \
"http://localhost:8081/artifactory/api/security/users" | tee -a "$REPORT"
echo -e "\n[+] Access tokens (review for rogue admin-scoped tokens):" | tee -a "$REPORT"
curl -sk -H "Authorization: Bearer $ADMIN_TOKEN" \
"http://localhost:8081/access/api/v1/tokens" | tee -a "$REPORT"
else
echo -e "\n[!] ADMIN_TOKEN not set — skipping user/token enumeration (set it to enumerate)" | tee -a "$REPORT"
fi
# 4. Check for suspicious child processes of the Artifactory JVM
echo -e "\n[+] Suspicious child processes of the Artifactory JVM:" | tee -a "$REPORT"
ART_PID=$(pgrep -f "artifactory.*java" | head -1)
if [ -n "$ART_PID" ]; then
ps --ppid "$ART_PID" -o pid,ppid,user,comm,args 2>/dev/null | tee -a "$REPORT"
else
echo " Artifactory JVM not running or not found" | tee -a "$REPORT"
fi
# 5. Check outbound connections from the JVM to non-RFC1918 addresses
echo -e "\n[+] External connections from Artifactory JVM:" | tee -a "$REPORT"
ss -tnp 2>/dev/null | grep -E "pid=$ART_PID" | grep -vE "10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|127\." | tee -a "$REPORT"
echo -e "\n[+] Review Artifactory access/request logs for auth-bypass indicators:" | tee -a "$REPORT"
grep -hE "DENIED|UNAUTHORIZED|anonymous" "$ART_HOME/var/log/artifactory-request.log" 2>/dev/null | tail -50 | tee -a "$REPORT"
echo -e "\n=== Triage complete. Report saved to $REPORT ==="
Remediation
- Patch immediately. Upgrade every self-managed Artifactory instance to the fixed versions published in JFrog's security advisory covering these three flaws. Pull the current advisory and fixed-version matrix directly from JFrog's release and security documentation (jfrog.com → JFrog Security Advisories / Release Information) and cross-reference the SecurityWeek report: https://www.securityweek.com/three-jfrog-artifactory-flaws-exploited-for-backdoor-deployment/. Do not assume your instance is unaffected because it sits behind a reverse proxy — the bypass operates at the application layer.
- Assume compromise; hunt before you patch. Patching over an existing backdoor leaves the intruder in place. Before (or immediately after) upgrading, run the triage script and Velociraptor sweep above. Specifically: enumerate all admin users and access tokens and revoke anything you cannot attribute to a known change; diff the Tomcat webapps directory against a known-good deployment; review
artifactory-request.logandaccess-audit.logfor admin API calls from unrecognized sources going back at least 30–60 days. - Rotate everything Artifactory touches. If you find any evidence of compromise, treat all stored credentials as burned: rotate access tokens, API keys, upstream registry credentials, signing keys, and any secrets embedded in artifacts or build configurations. Audit recently published artifacts for unauthorized modifications before they reach production — that is the supply-chain blast radius.
- Remove direct internet exposure. Artifactory should never be directly internet-facing. Place it behind an authenticated reverse proxy or VPN/ZTNA gateway, restrict inbound access to known CI/CD and developer networks, and apply egress filtering so the server can only reach approved upstream registries.
- Harden authentication and reduce token lifetime. Enforce SSO (SAML/OIDC) with MFA for all interactive users, disable unused authentication methods, scope service-account tokens to the minimum required repositories and permissions, and set short token expirations so stolen tokens have a limited shelf life.
- Operationalize the detections. Ship
artifactory-request.log,access-audit.log, and reverse-proxy logs to your SIEM, deploy the Sigma rules to Artifactory hosts via your EDR, and alert on any new admin user or admin-scoped token outside a change window — permanently, not just during this campaign. - Watch for CISA KEV inclusion. Given confirmed in-the-wild exploitation of internet-accessible infrastructure software, these flaws are strong candidates for CISA's Known Exploited Vulnerabilities catalog. If added, federal remediation deadlines apply to FCEB agencies and the KEV listing is your forcing function for internal SLA escalation — treat it as a 72-hour patch priority regardless.
The core lesson here mirrors every supply-chain infrastructure compromise of the past several years: artifact repositories are tier-zero assets. Attackers understand that owning Artifactory is quieter and more scalable than owning individual endpoints. Your detection coverage, patch SLAs, and network architecture should reflect that reality.
Related Resources
Security Arsenal Alert Triage Automation AlertMonitor Platform Book a SOC Assessment platform Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.