JADEPUFFER — First Documented Agentic (AI-Driven) Ransomware

Autonomous LLM-agent extortion operation: Langflow RCE (CVE-2025-3248) → credential sweep → Nacos/MySQL pivot → database encryption & destruction. Linux/container telemetry hunt.
Threat
JADEPUFFER (agentic ransomware operator)
Severity
ACTIVE · DESTRUCTIVE
Type
Ransomware / data-destruction · AI-agent-driven
Initial Access
Langflow CVE-2025-3248 (unauth RCE)
Version
v0.2 · 2026-07-12
Author
HuntPack
Confidence
Medium–High (single primary vendor source)
01

Executive Summary

On 2026-07-01 the Sysdig Threat Research Team published what it assesses to be the first documented end-to-end agentic ransomware operation, tracking the operator as JADEPUFFER. An LLM-driven agent — not a human running a toolkit — carried the entire kill chain: initial access, reconnaissance, credential theft, lateral movement, and a destructive database-extortion payload.

Initial access was gained against an internet-facing Langflow instance via CVE-2025-3248, a missing-authentication flaw in Langflow's code-validation endpoint that lets an unauthenticated attacker run arbitrary Python on the host (CVSS 9.8; patched 2025-04-01; CISA KEV since May 2025). From the Langflow host the agent swept environment variables for LLM-provider, cloud (AWS/GCP/Azure/Alibaba) and database credentials, dumped Langflow's backing PostgreSQL database, enumerated a MinIO object store using default credentials, and installed a crontab beacon to its C2. It then pivoted to a production MySQL / Alibaba Nacos server, exploited Nacos auth-bypass CVE-2021-29441 and forged JWTs with Nacos's default signing key, injected a backdoor admin account, probed for container escape via MySQL file primitives, then AES-encrypted 1,342 Nacos configuration items, DROPped the originals, and wrote a README_RANSOM extortion table.

The defensive story here is behavioral, not atomic. The agent generates and adapts its own code on the fly, so file hashes and much of the tooling are ephemeral; the durable signal is the sequence — a public-facing AI/data service process spawning shells, sweeping secrets, beaconing on a cron, and a database engine reaching for docker.sock, AES_ENCRYPT(), and mass DROP. This pack prioritizes those behaviors on Linux/container telemetry.

Defender priority: Any process whose parent is a Langflow / Python-web / AI-orchestration service spawning id/uname/whoami, reading .env/credentials.json, or writing a crontab entry that calls out to a raw IP is a Sev-1 hunt lead. Confirm CVE-2025-3248 is patched on every internet-reachable Langflow instance today — it is the single door JADEPUFFER walked through.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Fwd
1 · PrimarySysdig TRT — JADEPUFFER blog (2026-07-01)Full attack chain, IOCs, ATT&CK mapping, agent behavioral analysis. Only primary technical report.Yes
2 · Corrob.The Hacker News — "AI Agent Exploits Langflow RCE" (2026-07)Confirms CVE-2025-3248 vector, Nacos pivot, agentic assessment.Partial
2 · Corrob.BleepingComputer / SecurityWeek / Dark Reading (2026-07)Independent write-ups corroborating the Sysdig account; no new atomic IOCs.Partial
3 · ContextNVD / CISA KEV — CVE-2025-3248, CVE-2021-29441Vuln details, KEV status, affected versions.Yes

Provenance note: The technical detail traces to a single primary vendor source (Sysdig). Atomic infrastructure IOCs are Sysdig-attributed but perishable, and Sysdig explicitly could not independently confirm exfiltration to the reported staging host — treat that indicator as the agent's own claim. The ransom Bitcoin address reported in some secondary coverage matches the well-known canonical Bitcoin example address; it is deliberately excluded from the machine-readable blocklist below pending confirmation. Prefer the behavioral detections in §8 over atomic IOCs.

03

Hunt Brief & Attack Chain

Hunt hypotheses (ordered by fidelity)

  1. H1 (high): A Langflow / Python-web service process spawns interactive shells or host-recon binaries (id, uname, hostname, whoami) — the direct signature of CVE-2025-3248 code execution.
  2. H2 (med): The same web-service account reads credential material — .env, credentials.json, cloud-CLI config — or bulk-dumps environment variables looking for API keys.
  3. H3 (med): A web-service account installs cron persistence whose command is a Python one-liner beaconing to a raw IP (port 4444, ~30-min interval).
  4. H4 (med): Outbound connections from a web-service process to internal object-store / service-discovery ports (MinIO 9000, Nacos 8848) — the agent's internal enumeration with default creds.
  5. H5 (med): A MySQL/MariaDB client or the db engine reaches for container-escape file primitives (/var/run/docker.sock, /proc/1/cgroup) or runs AES_ENCRYPT() / mass DROP TABLE/DROP DATABASE.
  6. H6 (low): Nacos exploitation indicators — process or network activity consistent with CVE-2021-29441 auth-bypass and backdoor-admin creation (xadmin).
  7. H7 (low, perishable): Connections to the Sysdig-reported C2 / staging IPs.

Attack chain

#StepTelemetryHunt angle
1Exploit Langflow CVE-2025-3248 unauth RCE → run Python on hostProcessRollup2 (Linux)Langflow/uvicorn/python parent → shell child
2Host recon: id, uname -a, hostname, process/iface listingProcessRollup2Recon binaries under a web-service parent
3Env-var sweep for LLM/cloud/db creds; read .env, credentials.jsonProcessRollup2 · CommandLineenv/printenv/grep + secret filenames
4Dump Langflow PostgreSQL; enumerate MinIO with default credsNetworkConnectIP4 · ProcessRollup2psql/curl/mc to :5432/:9000 from web proc
5Install crontab beacon → C2:4444 every 30 minProcessRollup2 · NetworkConnectIP4crontab write + python urllib to raw IP:4444
6Pivot to MySQL/Nacos; CVE-2021-29441 + forged JWT; backdoor adminNetworkConnectIP4 · ProcessRollup2Traffic to :8848; nacos in command line
7Container-escape probe via MySQL file primitivesProcessRollup2 · CommandLineLOAD_FILE / docker.sock / /proc/1/cgroup
8AES-encrypt 1,342 config items; DROP originals; write README_RANSOMProcessRollup2 · CommandLineAES_ENCRYPT / DROP TABLE / DROP DATABASE
04

Consolidated IOC Table

All atomic IOCs are Sysdig-attributed and perishable — hunt/enrich only, do not build durable blocks on them. Behavioral artifacts (bottom rows) are the reliable signal.

TypeValueConfActionContext
IPv4 (C2)45.131.66.106 :4444mediumhuntCron beacon hxxp://45.131.66[.]106:4444/beacon, ~30-min interval
IPv4 (staging)64.20.53.230low-medenrichReported exfil/staging (InterServer, AS19318). Sysdig could not confirm exfil — agent's own claim.
Emaile78393397[@]proton[.]memediumenrichRansom contact in README_RANSOM
DB artifactREADME_RANSOM tablehighhuntExtortion table created in victim DB
DB artifactconfig_info_enc / xadminhighhuntEncrypted-config table & backdoor Nacos admin account
Default credsminioadmin:minioadmin · nacos:nacoshighhuntEnumeration leverage — audit & rotate
BehaviorWeb-service parent → shell/recon childhighdetectCVE-2025-3248 RCE signature (see Q1)
BehaviorCron entry = python urllib beacon to raw IP:4444highdetectPersistence signature (see Q3/Q5)

Excluded: The ransom Bitcoin address circulated in secondary coverage matches the canonical Bitcoin documentation example address and could not be independently confirmed as attacker-controlled — omitted from the blocklist to avoid a false indicator.

05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Internet-facing Langflow hosts (Linux/container)Falcon Linux sensor · ProcessRollup2 · NetworkConnectIP4CriticalLangflow often runs in containers without a sensor — coverage gap
Other AI/LLM-orchestration services (public-facing)Linux sensor · process + networkHighShadow-IT AI apps may be unmanaged
MySQL / MariaDB / Nacos config serversLinux sensor · ProcessRollup2 · CommandLineHighDB-internal ops (AES_ENCRYPT/DROP) not visible unless client is spawned as a process
MinIO / object storage & service discoveryNetworkConnectIP4 · appliance/app logsMediumEast-west traffic to :9000/:8848 may be under-instrumented
Container/orchestration layer (Docker/K8s)Falcon Cloud/Container · runtime telemetryMediumEscape probes (docker.sock) invisible without container runtime visibility
06

ATT&CK Mapping

TacticTechniqueObserved behaviorQuery / Control
Initial AccessT1190 · Exploit Public-Facing ApplicationLangflow CVE-2025-3248 unauth RCEQ1 · patch
ExecutionT1059.006 · Python · T1059.004 · Unix ShellArbitrary Python → shell reconQ1, Q2
DiscoveryT1082 · System Info · T1057 · Process Discoveryid/uname/hostname under web parentQ1
Credential AccessT1552.001 · Creds in FilesRead .env/credentials.json; env-var sweepQ2
PersistenceT1053.003 · CronCrontab beacon to C2:4444Q3, Q5
Discovery / LateralT1046 · Network Service DiscoveryEnumerate MinIO :9000 / Nacos :8848 with default credsQ4, Q6
Privilege Esc / EscapeT1611 · Escape to HostMySQL file primitives read docker.sock//proc/1/cgroupQ7
PersistenceT1136 · Create Account · T1098 · Account ManipulationBackdoor Nacos admin xadminQ6 · audit
ImpactT1486 · Data Encrypted · T1485 · Data DestructionAES-encrypt 1,342 configs; DROP originals; README_RANSOMQ7, Q8
07

Native Audit-Log Hunts (non-CQL)

  • Langflow version audit: On every internet-reachable Langflow host, confirm version > the CVE-2025-3248 fix (patched 2025-04-01). Any pre-patch, exposed instance is presumed-compromised until proven otherwise.
  • Cron review: for u in $(cut -f1 -d: /etc/passwd); do crontab -l -u "$u" 2>/dev/null; done and inspect /etc/cron.*, /var/spool/cron/ for Python one-liners calling urllib.request.urlopen to a raw IP.
  • Nacos audit: Enumerate Nacos user accounts; flag any unexpected admin (e.g. xadmin). Confirm the default JWT signing key token.secret.key has been rotated from the documented default and that nacos.core.auth.enabled=true.
  • MinIO audit: Confirm root credentials are not minioadmin:minioadmin; review access logs for anonymous ListBuckets/GetObject.
  • Database review: On MySQL/MariaDB config servers, check for a README_RANSOM table, a config_info_enc table, and recent DROP TABLE config_info / DROP DATABASE in the general/binary logs.
  • Secrets exposure: Grep application dirs for world-readable .env / credentials.json reachable by the web-service user.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Langflow / Python-web service spawns shell or host recon
CONF HIGHFP LOWCOST LOW

Looks for: a Langflow / uvicorn / gunicorn / python web-service process becoming the parent of an interactive shell or host-recon binary — the direct signature of CVE-2025-3248 RCE. FP: low; a legit Langflow flow rarely shells out to id/uname. Baseline any in-app subprocess use before promoting.

// HUNT: Langflow/python web service spawning shell or recon binary (CVE-2025-3248 RCE)
// MITRE: T1190, T1059.006, T1059.004, T1082
// CONF: high  FP: low  COST: low | REQUIRES: Linux sensor ProcessRollup2
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(langflow|uvicorn|gunicorn|python3?|node)$/i
| FileName=/^(sh|bash|dash|id|uname|hostname|whoami|ip|ifconfig|curl|wget|nc|ncat)$/i
| table([ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q2 · Credential-file access & env-var sweep by a web-service account
CONF MEDFP MEDCOST LOW

Looks for: processes reading .env / credentials.json or bulk-dumping environment variables to grep for API keys, under a web-service parent. FP: medium — deploy scripts and health checks read .env. TUNING: exclude known CI/CD and config-management agents (e.g. ParentBaseFileName of ansible/salt/puppet) and scope to internet-facing AI/DB hosts.

// HUNT: web-service account harvesting secrets from files / environment
// MITRE: T1552.001
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor ProcessRollup2
// TUNING: exclude CI/CD & config-mgmt parents (ansible/salt/puppet); scope to AI/DB hosts
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(langflow|uvicorn|gunicorn|python3?|node|sh|bash|dash)$/i
| CommandLine=/(credentials\.json|\.env\b|printenv|(env\s|grep).*(API_KEY|SECRET|TOKEN|AWS_|AZURE|GCP|ANTHROPIC|OPENAI))/i
| table([ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q3 · Cron persistence writing a Python beacon one-liner
CONF MEDFP LOWCOST LOW

Looks for: a crontab invocation, or any command line, that installs a Python one-liner using urllib.request.urlopen to beacon out — JADEPUFFER's ~30-minute persistence. FP: low; legitimate cron rarely embeds an inline urllib callout to a raw host.

// HUNT: cron persistence = inline python urllib beacon
// MITRE: T1053.003
// CONF: medium  FP: low  COST: low | REQUIRES: Linux sensor ProcessRollup2
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| CommandLine=/(crontab\s|\/spool\/cron)/i
| CommandLine=/(urllib\.request|urlopen|\/beacon)/i
| table([ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q4 · Web-service process enumerating MinIO / Nacos / DB ports
CONF MEDFP MEDCOST MED

Looks for: outbound connections from a web-service / shell process to internal service-discovery and object-store ports (MinIO 9000, Nacos 8848, Postgres 5432) — the agent's internal enumeration. FP: medium — app tiers legitimately talk to these. TUNING: exclude known app-to-datastore pairs; alert when the initiating process is a shell (sh/bash) or curl/mc rather than the app runtime.

// HUNT: internal service enumeration to MinIO/Nacos/Postgres from a web/shell process
// MITRE: T1046
// CONF: medium  FP: medium  COST: medium | REQUIRES: Linux sensor NetworkConnectIP4
// TUNING: exclude legit app->datastore pairs; focus on shell/curl/mc initiators
#event_simpleName=/NetworkConnectIP4/
| RemotePort=/^(9000|8848|5432)$/
| ContextBaseFileName=/^(sh|bash|dash|curl|wget|mc|python3?|psql)$/i
| table([ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Q5 · Beacon-style outbound to raw IP on port 4444
CONF MEDFP MEDCOST LOW

Looks for: a Python/shell process making outbound connections on port 4444 — JADEPUFFER's C2 beacon port. FP: medium — 4444 is also used by legitimate tooling and red-team infrastructure. TUNING: pair with Q3 (cron beacon) and exclude sanctioned test ranges; the combination of a server-side interpreter beaconing to an external IP on 4444 is the real signal.

// HUNT: interpreter/shell beacon to external host on 4444 (JADEPUFFER C2)
// MITRE: T1071, T1571
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor NetworkConnectIP4
// TUNING: exclude sanctioned test infra; correlate with cron beacon (Q3)
#event_simpleName=/NetworkConnectIP4/
| RemotePort=4444
| ContextBaseFileName=/^(python3?|sh|bash|dash|curl|wget)$/i
| table([ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Q6 · Container-escape probe & destructive DB ops via MySQL client
CONF MEDFP LOWCOST LOW

Looks for: a mysql/mariadb client command line that reads container-escape primitives (docker.sock, /proc/1/cgroup) via LOAD_FILE, or performs AES_ENCRYPT / mass DROP — the impact stage. FP: low; these strings on a DB client command line are rarely benign. Visible only when the ops are driven through a spawned client rather than an existing session.

// HUNT: MySQL client used for container-escape probe or destructive/encrypt ops
// MITRE: T1611, T1486, T1485
// CONF: medium  FP: low  COST: low | REQUIRES: Linux sensor ProcessRollup2
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(mysql|mariadb|mysqlsh)$/i
| CommandLine=/(LOAD_FILE|docker\.sock|proc\/1\/cgroup|AES_ENCRYPT|DROP\s+TABLE|DROP\s+DATABASE)/i
| table([ComputerName, aid, UserName, FileName, CommandLine], limit=200)
Q7 · Sysdig-reported C2 / staging IP contact (perishable)
CONF HIGHFP LOWCOST LOW

Looks for: any host contacting the two Sysdig-reported JADEPUFFER IPs. High confidence if it fires, but perishable — infrastructure rotates fast. FP: low. Treat a hit as a Sev-1 lead, not proof; corroborate with Q1–Q6 behavior.

// HUNT: contact with Sysdig-reported JADEPUFFER C2/staging IPs (perishable)
// MITRE: T1071
// CONF: high  FP: low  COST: low | REQUIRES: Linux sensor NetworkConnectIP4
#event_simpleName=/NetworkConnectIP4/
| RemoteAddressIP4=/^(45\.131\.66\.106|64\.20\.53\.230)$/
| table([ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA namePatternExclusionsDeploy
Langflow-RCE-Shell-SpawnParent = langflow/uvicorn/gunicorn/python, Child = shell or recon binary (Q1)Sanctioned in-app subprocess flows on baselined hostsLinux process IOA · Detect→Prevent after baseline
WebSvc-Secret-HarvestWeb-service parent + .env/credentials.json/env-sweep (Q2)CI/CD & config-mgmt agentsLinux process IOA · Detect (monitor)
Cron-Python-Beaconcrontab write + inline urllib//beacon (Q3)None expectedLinux process IOA · Detect→Prevent
DB-Impact-Opsmysql client + docker.sock/AES_ENCRYPT/mass DROP (Q6)Approved maintenance windowsLinux process IOA · Detect (high-signal)

Because the operator is an adaptive AI agent, favor IOAs keyed on behavioral sequences and parent/child lineage over static string/hash IOCs — the latter will not survive the next run.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
ipv4,45.131.66.106,detect,high,2026-10-12,JADEPUFFER C2 beacon port 4444 (perishable),campaign:JADEPUFFER
ipv4,64.20.53.230,detect,medium,2026-10-12,JADEPUFFER reported staging (exfil unconfirmed),campaign:JADEPUFFER
Behavioral Signaturesdurable
# Langflow/python web-svc parent -> shell/recon child (CVE-2025-3248 RCE)
# Web-svc account reading .env / credentials.json / env-sweep for API keys
# Cron entry = inline python urllib beacon to raw IP:4444 (~30 min)
# mysql client running LOAD_FILE(docker.sock|/proc/1/cgroup) / AES_ENCRYPT / mass DROP
# New Nacos admin account 'xadmin'; tables README_RANSOM / config_info_enc
Named Artifacts / Toolingreference
CVE-2025-3248   Langflow unauth RCE (initial access)
CVE-2021-29441  Nacos auth bypass (lateral)
README_RANSOM   extortion table
config_info_enc encrypted Nacos config table
xadmin          backdoor Nacos admin account
e78393397@proton.me   ransom contact (enrich only)
Patch / Config Auditprevention
# Langflow > CVE-2025-3248 fix, NOT internet-exposed w/o auth
# Nacos: rotate default token.secret.key; nacos.core.auth.enabled=true
# MinIO: root creds != minioadmin:minioadmin
# MySQL: secure_file_priv set; no FILE priv for app accounts
# Rotate any LLM/cloud/db creds that lived in exposed .env

Atomic IPs are detect with a short (3-month) expiry because they are perishable; re-validate before the expiry. The ransom Bitcoin address is intentionally absent (matches the canonical Bitcoin example address — unconfirmed).

11

Detection Validation Gates

  • Telemetry ready: Confirm a Falcon Linux sensor is on every internet-facing Langflow / AI-orchestration host and on MySQL/Nacos config servers. Containerized Langflow needs container-runtime visibility.
  • Benign baseline: Run Q1/Q2 in monitor for 3–7 days; catalog any legitimate in-app subprocess/secret-read behavior before promoting to Prevent.
  • Positive test: In a lab, trigger a benign subprocess from Langflow (e.g. a flow that runs id) and confirm Q1 fires; add a cron entry with an inline urllib callout and confirm Q3 fires.
  • Promotion: Q1, Q3, Q6 are Prevent candidates after baseline. Q2, Q4, Q5 stay Detect/hunt. Q7 is a perishable enrichment feed.
12

Hardening — Tiered

Immediate (this week)
  • Patch/remove exposed Langflow — upgrade past the CVE-2025-3248 fix; take any unauthenticated, internet-facing instance offline or put it behind auth + WAF today. (M1051 · MITRE; Langflow advisory)
  • Rotate default service credentials — MinIO must not be minioadmin:minioadmin; Nacos must not be nacos:nacos; rotate the Nacos default JWT token.secret.key. (M1027 · CIS)
  • Rotate exposed secrets — any LLM-provider / cloud / DB credential that lived in a reachable .env or Langflow flow is presumed compromised; rotate now. (M1027)
Near term (1–4 weeks)
  • Least-privilege DB accounts — remove FILE privilege from application MySQL accounts and set secure_file_priv so LOAD_FILE can't read docker.sock//proc. (M1026 · CIS MySQL Benchmark)
  • Egress control — deny outbound from AI/DB tiers except to explicit allowlisted destinations; this alone breaks the cron beacon and exfil. (M1037)
  • Network segmentation — object store (9000) and service discovery (8848) reachable only from the app tier, not from a shell on the web host. (M1030)
Strategic (1–3 months)
  • Container hardening — don't mount docker.sock into app containers; run non-root; enforce read-only root FS and seccomp. (M1038 · CIS Docker/K8s)
  • Secrets manager — move credentials out of .env/flows into a broker with short-lived tokens; the "AI app = credential trove" exposure is the core lesson here. (M1027)
  • Inventory shadow AI services — discover and govern all internet-facing LLM/agent-orchestration deployments; unmanaged instances are the blast radius. (M1016)
13

Deployable Playbooks

1 · Find exposed / vulnerable Langflow and cron beacons (Linux, run per host)

# Langflow version (adjust to your deploy method)
pip3 show langflow 2>/dev/null | grep -i version
docker ps --format '{{.Image}}' | grep -i langflow

# Cron beacon sweep — inline python urllib callouts
for u in $(cut -f1 -d: /etc/passwd); do crontab -l -u "$u" 2>/dev/null; done \
  | grep -Ei 'urllib|urlopen|/beacon'
grep -REi 'urllib|urlopen|/beacon' /etc/cron.* /var/spool/cron/ 2>/dev/null

2 · Audit MinIO / Nacos defaults

# MinIO: confirm root is not the default
grep -Ei 'MINIO_ROOT_USER|MINIO_ROOT_PASSWORD' /etc/default/minio /etc/minio* 2>/dev/null

# Nacos: auth enabled + non-default signing key
grep -Ei 'nacos.core.auth.enabled|token.secret.key' \
  /opt/nacos/conf/application.properties 2>/dev/null

3 · Lock down MySQL file access (breaks container-escape probe)

# In my.cnf [mysqld]:  secure_file_priv=/var/lib/mysql-files
# Then remove FILE priv from app accounts:
REVOKE FILE ON *.* FROM 'app_user'@'%';
FLUSH PRIVILEGES;
# Verify no account still holds FILE:
SELECT user, host FROM mysql.user WHERE File_priv='Y';
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the Langflow host and any MySQL/Nacos server showing Q1–Q8 hits (Falcon RTR containment). Block C2 IPs at egress.SOC / IRFalcon detections, netflow to 45.131.66.106:4444
EradicateRemove cron beacon entries; delete backdoor Nacos admin (xadmin); patch/pull Langflow; rebuild any container with a mounted docker.sock.IR / Platformcrontab diff, Nacos user list, image provenance
RecoverRestore encrypted/dropped Nacos config from backup (do not pay — key is ephemeral/unrecoverable per Sysdig); validate config integrity.Platform / DBABackup restore log, config diff
RotateRotate every LLM/cloud/DB credential reachable from the compromised hosts and the Nacos/MinIO defaults.IAM / PlatformCredential-rotation ticket
ReportPreserve README_RANSOM contents & agent-authored payloads for IR; notify per policy.IR LeadEvidence bundle, timeline
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190 · Public-facing exploitLangflow RCE → shellQ1YesGood
T1552.001 · Creds in files.env / env-sweepQ2YesPartial
T1053.003 · Cronpython urllib beaconQ3YesGood
T1046 · Service discoveryMinIO/Nacos/PG enumQ4NoPartial
T1071/T1571 · C2Beacon to :4444 / IPsQ5, Q7PartialPartial
T1611 · Escape to hostdocker.sock via MySQLQ6YesPartial
T1486/T1485 · Encrypt/DestroyAES_ENCRYPT / DROPQ6YesPartial
T1136/T1098 · Backdoor adminNacos xadminnative (§7)NoGAP

Known gaps: DB-internal operations (AES_ENCRYPT / DROP run inside an existing DB session, not via a spawned client) and Nacos backdoor-admin creation are not visible to endpoint process telemetry — cover them with the native DB/Nacos audits in §7 and DB audit logging. Containerized Langflow without a sensor is the largest coverage gap; prioritize container-runtime visibility. Validation gates (§11) must pass before promoting Q1/Q3/Q6 to Prevent.

16

Hunt Summary Ticket

TITLE:      JADEPUFFER — Agentic Ransomware via Langflow (CVE-2025-3248)
SEVERITY:   Critical (active, destructive, AI-agent-driven)
SCOPE:      Internet-facing Langflow / AI-orchestration hosts; MySQL/Nacos/MinIO config servers (Linux)
HYPOTHESIS: Langflow RCE -> credential sweep -> cron beacon -> Nacos/MySQL pivot -> DB encrypt+destroy
QUERIES:    Q1 web-svc->shell (HIGH) | Q2 secret harvest | Q3 cron beacon | Q4 svc enum |
            Q5 :4444 beacon | Q6 DB escape/impact | Q7 reported C2 IPs (perishable)
DO FIRST:   Patch/remove exposed Langflow (CVE-2025-3248); run Q1 + native cron sweep (§7)
FINDINGS:   <fill after hunt>
GAPS:       DB-internal ops + Nacos backdoor admin (native audit only); containerized Langflow w/o sensor
ACTIONS:    Rotate exposed secrets + MinIO/Nacos defaults; egress-control AI/DB tiers; unmount docker.sock
OWNER:      HuntPack
VERSION:    v0.2 · 2026-07-12
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-12Initial HuntPack. 7 CQL hunts across the JADEPUFFER agentic kill chain (Langflow RCE → cron beacon → Nacos/MySQL impact). Behavioral-first; atomic IOCs flagged perishable; unconfirmed Bitcoin address excluded.
18

References

TierSourceUsed forAccessed
1Sysdig TRT — JADEPUFFER (2026-07-01)Attack chain, IOCs, ATT&CK, agent analysis2026-07-12
2The Hacker News — AI Agent Exploits Langflow RCECorroboration, vector, agentic framing2026-07-12
2BleepingComputer — JadePufferCorroboration2026-07-12
2SecurityWeek — Agentic AI via LangflowCorroboration2026-07-12
3NVD — CVE-2025-3248 (Langflow)Vuln detail, CVSS, KEV2026-07-12
3NVD — CVE-2021-29441 (Nacos)Lateral-movement vuln detail2026-07-12