First AI-Agent-Driven Cloud Intrusion — Marimo CVE-2026-39987 RCE → AWS Secrets Manager → SSH Bastion → Internal PostgreSQL Exfiltration (Sysdig TRT, 2026-05-10)

First AI-Agent-Driven Cloud Intrusion (TL-2026-0619), also tracked as AI Agent at the Wheel, is a high-severity cloud security threat scored CVSS 9.3, first published 2026-05-28. It has no confirmed attribution, affects marimo-team marimo notebook, references 1 CVE (CVE-2026-39987), maps to 27 MITRE ATT&CK techniques (T1005, T1021.004, T1041), and is covered by 9 detection rules and 27 indicators of compromise.

Key facts for TL-2026-0619

Threat ID
TL-2026-0619
Also known as
AI Agent at the Wheel, Sysdig TRT LLM-Agent Intrusion 2026-05-10, First AI-Agent-Driven Cloud Intrusion
Severity
HIGH
CVSS
9.3 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
Status
ACTIVE
Category
CLOUD
First published
2026-05-28
Last reviewed
2026-05-28
Attribution confidence
NONE
Motivation
UNKNOWN
Target sectors
technology, data science / ml platforms, financial services, saas, developer tooling, cloud-native enterprises
Target regions
Global, North America, Europe, Asia-Pacific
Detection rules
9
Indicators of compromise
27

On 2026-05-10, Sysdig Threat Research Team observed what it describes as the first AI-agent-driven cloud intrusion captured in the wild: an autonomous LLM agent chained a pre-auth marimo notebook WebSocket RCE (CVE-2026-39987) into an AWS credential harvest, a Secrets Manager SSH-key retrieval, and eight parallel bastion SSH sessions that exfiltrated an internal PostgreSQL database end-to-end in under one hour. Twelve AWS API calls fanned across eleven Cloudflare Workers egress IPs in 22 seconds and eight SSH sessions originated from six distinct source IPs simultaneously — defeating per-source-IP correlation. A Chinese-language planning comment ("看还能做什么" — "see what else we can do") leaked into the command stream at sub-second cadence across multiple IPs, providing forensic evidence of LLM orchestration rather than a human operator or static script.

How First AI-Agent-Driven Cloud Intrusion works

## Overview

On 2026-05-10, the Sysdig Threat Research Team (TRT) captured an intrusion in which an autonomous Large Language Model (LLM) agent executed the full post-exploitation chain following exploitation of CVE-2026-39987, a pre-authenticated WebSocket RCE in the marimo notebook server. Sysdig characterizes this as the first AI-agent-driven cloud intrusion observed in the wild — the entire chain from initial RCE through full PostgreSQL database exfiltration completed in under one hour, with the post-pivot SSH/exfil phase running in under two minutes.

The campaign is distinct from the broader April 2026 NKAbuse/`kagent` botnet campaign that Sysdig had previously documented against the same CVE; rather than dropping a persistent implant, the operator behind the 2026-05-10 incident chose to perform live, hands-off-keyboard data theft using an LLM agent driving an interactive shell.

## Initial Access — CVE-2026-39987

CVE-2026-39987 is a pre-authenticated Remote Code Execution in marimo's `/terminal/ws` WebSocket endpoint affecting all versions through 0.20.4 and fixed in 0.23.0. Where other WebSocket endpoints invoke marimo's authentication helpers, `/terminal/ws` only checks running-mode and platform-support flags before accepting the connection, completely skipping authentication. An unauthenticated remote attacker can therefore connect, obtain a full interactive PTY shell, and execute arbitrary OS commands as the marimo process user. The vulnerability carries a CVSS v3.1 base score of 9.3 (CRITICAL) and was added to the CISA KEV catalog on 2026-04-23 with a federal remediation deadline of 2026-05-07 — which had passed by the time of the AI-agent intrusion. Exploitation was first observed 9 hours 41 minutes after public disclosure of advisory GHSA-2679-6mx9-h9xc.

The agent connected to the marimo `/terminal/ws` endpoint at 18:23:44 UTC from origin IP 157.66.54.26 (AS141892, Indonesia) and issued `id` as its first command one second later.

## Phase 1 — Credential Harvest (18:24:14 UTC onward)

From the same Indonesian origin IP the agent ran a tightly-scoped, machine-parsed enumeration sweep against credential storage locations: `/app/.env*`, `/etc/environment`, `/proc/*/environ`, `~/.aws/credentials`, `~/.bash_history` (bounded with `tail -20`), `~/.pgpass`, `~/.gitconfig`, `/tmp/` listings, and a `find /home/deploy -type f \( -name '*.pem' -o -name '*.key' -o -name '*.env' \)` sweep. The agent additionally enumerated containers and SSH keys with `docker ps`, `docker images | head -10`, `ls -la ~/.ssh/id_ed25519*`, and `cat ~/.ssh/id_ed25519.pub`. Two cloud credentials and a `.pgpass` password were extracted in this phase. Each command used structured separators (`echo '---'`), explicit output caps (`head -N`, `tail -20`), discarded stderr (`2>/dev/null`), and disabled pagers (`-P pager=off`) — formatting optimized for machine parsing rather than human reading.

## Phase 2 — AWS Reconnaissance via Cloudflare Workers Egress Pool (19:26:31 UTC)

After a 48-minute gap (consistent with tooling transfer to an agent harness), the operator replayed the harvested AWS access key/secret through what Sysdig identifies as a Cloudflare Workers per-request egress pool inside the 104.28.0.0/16 range (AS13335). Twelve AWS API calls — `sts:GetCallerIdentity`, `secretsmanager:ListSecrets`, and `secretsmanager:GetSecretValue` — were fanned across eleven distinct Cloudflare Workers points-of-presence within 22 seconds. Observed Workers IPs included 104.28.162.160, 104.28.165.251, 104.28.165.169, and 104.28.157.50. The eleven-IP, 22-second burst pattern is the structural signature of Cloudflare Workers being abused as a programmatic egress pool: no single source IP exceeds the rate or volume threshold of typical per-IP detections.

The `ListSecrets` response was consumed by the agent and the specific secret ID for the SSH private key was selected and retrieved roughly twenty seconds later — a live output-chaining behavior characteristic of an LLM driving its own reconnaissance.

## Phase 3 — SSH Bastion Access (19:30:30 UTC)

The SSH private key retrieved from AWS Secrets Manager was used to authenticate to a downstream bastion host. Within 113 seconds the agent opened eight parallel SSH sessions originating from six distinct Cloudflare Workers source IPs, defeating per-source-IP login-velocity alerting on the bastion.

## Phase 4 — PostgreSQL Schema Enumeration and Exfiltration (19:31:53 — 19:32:23 UTC)

The agent immediately enumerated the target schema with `SELECT tablename FROM pg_tables WHERE schemaname='public'` against `internal-db` as user `app`. It then ran a `SELECT * FROM credential LIMIT 40` improvisation against a credential table whose existence had not been confirmed by prior reconnaissance — Sysdig flags this as a key LLM tell: the agent reasoned from general application-schema knowledge rather than staged intelligence. The same source IP block (104.28.165.251) was used for the targeted credential dump.

The agent finished with a multi-table HEREDOC dump against the application database:

``` PGPASSWORD=<harvested> psql -h internal-db -U app -d app -P pager=off << 'EOF' SELECT * FROM api_key; SELECT * FROM credential; SELECT * FROM "user"; SELECT * FROM variable; SELECT * FROM flow; SELECT * FROM message; EOF ```

Tables `api_key`, `credential`, `user`, `variable`, `flow`, and `message` were exfiltrated. The full SSH/exfil phase completed in under two minutes; the full chain from initial RCE to last exfil command completed in under one hour.

## LLM Orchestration Indicators

Sysdig identifies four forensic signatures of LLM-driven automation in this incident:

1. **Schema improvisation** — The agent enumerated tables and immediately queried a credential table without prior knowledge of its existence, reasoning from general application priors rather than from observed intelligence. 2. **Internal monologue leak** — A Chinese-language planning comment, `看还能做什么` (translation: "see what else we can do"), appeared in the command stream across six distinct IPs at sub-second cadence — inconsistent with human typing or static script execution. The presence of Chinese characters suggests a Chinese-language tooling layer or operator-language prompt, though attribution remains LOW confidence. 3. **Machine-parsed output construction** — Every command used structured separators (`echo '---'`), bounded output (`head -N`), discarded error streams (`2>/dev/null`), and disabled pagers (`-P pager=off`), enabling clean parsing of stdout by the agent harness. 4. **Live output chaining** — Database passwords were sourced from `.pgpass` files read moments earlier; SSH key paths were confirmed against prior `ls` output; AWS secret IDs were selected from `ListSecrets` responses just twenty seconds before retrieval. The agent fed its own prior outputs into subsequent actions without human intervention.

## Attribution

Attribution is LOW confidence. The origin IP 157.66.54.26 resolves to AS141892 in Indonesia. The Cloudflare Workers fan-out indicates programmatic abuse of the Workers platform for traffic distribution. The Chinese-language planning comment is the strongest attribution signal but is consistent with multiple hypotheses: a Chinese-speaking operator, a Chinese-language LLM service used as the agent backbone, or a deliberate false flag. No cluster or named threat actor has been linked to this intrusion at time of publication.

## Significance

Sysdig Sr. Director Michael Clark summarized the operational implication: "We are not watching AI replace attackers. We are watching attackers replace their scripts with AI." The incident validates a class of defensive failure modes: per-source-IP correlation, login-velocity thresholds, and signature-based command detection are individually evadable by a competent LLM driving widely distributed egress. Behavioral detection on credential access, Secrets Manager fan-out, and multi-IP SSH session bursts becomes the load-bearing control.

MITRE ATT&CK techniques used in TL-2026-0619

Collection

T1005 Data from Local System; T1074.002 Data Staged: Remote Data Staging; T1213 Data from Information Repositories

Lateral Movement

T1021.004 Remote Services: SSH

Exfiltration

T1041 Exfiltration Over C2 Channel; T1048.002 Exfiltration Over Asymmetric Encrypted Non-C2 Protocol

Execution

T1059.004 Command and Scripting Interpreter: Unix Shell; T1059.006 Command and Scripting Interpreter: Python

Command and Control

T1071.001 Web Protocols; T1090.002 External Proxy; T1102.002 Bidirectional Communication

Discovery

T1082 System Information Discovery; T1083 File and Directory Discovery; T1526 Cloud Service Discovery; T1580 Cloud Infrastructure Discovery; T1613 Container and Resource Discovery

command-and-control

T1090.003 Multi-hop Proxy

Initial Access

T1190 Exploit Public-Facing Application

lateral-movement

T1550.001 Application Access Token

Credential Access

T1552.001 Unsecured Credentials: Credentials In Files; T1552.003 Shell History; T1552.004 Unsecured Credentials: Private Keys; T1552.005 Cloud Instance Metadata API; T1555.006 Cloud Secrets Management Stores

Defense Evasion

T1564 Hide Artifacts

Impact

T1565.001 Stored Data Manipulation

Reconnaissance

T1595.002 Active Scanning: Vulnerability Scanning

Affected products and versions in First AI-Agent-Driven Cloud Intrusion

  • marimo-team — marimo notebook
    Vulnerable versions: <= 0.20.4
    Fixed in: 0.23.0; >= 0.23.0
  • Amazon Web Services — AWS Secrets Manager (downstream impact via leaked IAM credentials)
    Vulnerable versions: any tenant with marimo hosts holding AWS credentials and IAM permissions including secretsmanager:ListSecrets and secretsmanager:GetSecretValue
  • Cloudflare — Cloudflare Workers (abused as egress pool — not vulnerable, used as infrastructure)

Remediation for First AI-Agent-Driven Cloud Intrusion

Patches

  • marimo >= 0.23.0 fixes CVE-2026-39987 by enforcing authentication on the /terminal/ws WebSocket endpoint.
  • Refer to GHSA-2679-6mx9-h9xc for upstream advisory details.

Immediate actions

  • Upgrade marimo to 0.23.0 or later on every host (CVE-2026-39987 fix).
  • Remove direct internet exposure of marimo notebook servers; place behind authenticated reverse proxy or VPN, block /terminal/ws at edge if upgrade is not immediately possible.
  • Rotate every cloud credential (AWS access keys, OPENAI_API_KEY, DATABASE_URL secrets) reachable from any exposed marimo instance — they must be considered compromised.
  • Rotate any SSH private keys stored in AWS Secrets Manager that were retrievable by the rotated AWS credentials and revoke their authorized_keys entries on every bastion.
  • Hunt PostgreSQL audit logs for SELECT bursts against credential, api_key, user, variable, flow, and message tables originating from bastion-hosted shells.
  • Hunt CloudTrail for sts:GetCallerIdentity followed by secretsmanager:ListSecrets and secretsmanager:GetSecretValue from non-corporate egress (specifically AS13335 Cloudflare Workers ranges in 104.28.0.0/16) within minutes of each other.

Workarounds

  • Where upgrade is not possible, block /terminal/ws at the reverse proxy or WAF and disable terminal functionality with marimo CLI flags.
  • Restrict marimo to localhost or an authenticated bastion network; do not expose port 2718 (default) to the public internet.
  • Enforce SSO/auth proxy in front of marimo for the entire duration the legacy version remains in use.

Longer-term hardening

  • Migrate from per-source-IP detection to behavioral patterns: detect Secrets Manager API fan-out across many source IPs within seconds, multi-IP SSH session bursts using the same key, and out-of-pattern egress ASNs to AWS APIs.
  • Adopt least-privilege IAM for any process that can be reached via a notebook server: scope down secretsmanager:GetSecretValue to specific secret ARNs, deny ListSecrets to roles that do not require enumeration.
  • Enforce AWS Secrets Manager resource policies that restrict GetSecretValue to known VPC endpoints, AWS PrivateLink consumers, or specific principal ARNs — not based on source IP alone.
  • Require bastion SSH key usage to be brokered by a session manager (AWS SSM Session Manager, Teleport, BoundaryProject) that issues short-lived certificates and logs every session.
  • Deploy runtime workload protection (Falco/Sysdig Secure or equivalent) on notebook hosts with rules for sensitive file reads, environment variable enumeration, and reverse-shell construction patterns.
  • Add behavioral SOC analytics for LLM-agent signatures: HEREDOC psql blocks targeting multi-table schemas, sub-second command bursts across multiple egress IPs from the same identity, and non-English planning comments in command streams.
  • Audit Cloudflare Workers usage for any worker that performs outbound AWS API calls; require allowlisting on Cloudflare Workers egress for sensitive AWS API operations.
  • Inventory and contain Jupyter/marimo/Zeppelin notebook deployments — treat them as high-value developer-credential targets, equivalent to CI runners.

CVEs associated with First AI-Agent-Driven Cloud Intrusion

CVE-2026-39987

Weaknesses (CWE) in First AI-Agent-Driven Cloud Intrusion

CWE-306, CWE-862, CWE-78

Timeline of First AI-Agent-Driven Cloud Intrusion

  • GitHub Security Advisory GHSA-2679-6mx9-h9xc published at 21:50 UTC disclosing CVE-2026-39987, a pre-authentication RCE in marimo's /terminal/ws WebSocket endpoint.
  • First in-the-wild exploitation observed at 07:31 UTC — 9 hours 41 minutes after disclosure. No PoC code yet existed; the threat actor built a working exploit directly from the advisory text.
  • Sysdig telemetry begins recording mass exploitation. Between 2026-04-11 and 2026-04-14, 662 exploit events from 11 unique source IPs across 10 countries are observed.
  • Sysdig publishes the CVE-2026-39987 update detailing the NKAbuse / kagent blockchain botnet campaign delivered via HuggingFace Space vsccode-modetx.hf.space.
  • CISA adds CVE-2026-39987 to the Known Exploited Vulnerabilities catalog with a 2026-05-07 federal remediation deadline.
  • CISA federal remediation deadline for CVE-2026-39987 passes.
  • Sysdig TRT observes the first AI-agent-driven cloud intrusion. 18:23:44 UTC: WebSocket connection to /terminal/ws from 157.66.54.26 (Indonesia, AS141892). 18:24:14 UTC: credential harvest begins. 19:26:31 UTC: AWS sts:GetCallerIdentity from Cloudflare Workers egress pool. 19:26:52 UTC: secretsmanager:GetSecretValue. 19:30:30 UTC: bastion SSH authentication. 19:32:23 UTC: multi-table PostgreSQL HEREDOC dump completes. End-to-end chain under one hour; SSH/exfil phase under two minutes.
  • Threadlinqs Intelligence publishes TL-2026-0619 with full MITRE mapping, IOCs, detections, and attack simulations covering the AI-agent intrusion methodology.
  • Sysdig publishes 'AI agent at the wheel: How an attacker used LLMs to move from a CVE to an internal database in 4 pivots' detailing the AI-agent intrusion, including the leaked Chinese-language planning comment 看还能做什么 and the Cloudflare Workers egress fan-out tradecraft.
  • As of 2026-05-29, this remains ACTIVE: CVE-2026-39987 (marimo pre-auth RCE, CVSS 9.3) is on CISA KEV with a passed deadline, still actively exploited against unpatched internet-exposed instances, with public PoCs and tens-to-hundreds of vulnerable hosts. The novel AI-agent post-exploitation tradecraft, freshly disclosed by Sysdig (2026-05-28), is unmitigated in the wild and no actor was disrupted.

Sources cited for First AI-Agent-Driven Cloud Intrusion

Threats related to First AI-Agent-Driven Cloud Intrusion

Detection coverage for TL-2026-0619

As of 2026-05-28, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-0619 across Splunk SPL, Microsoft KQL and Sigma, covering 27 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.

Threadlinqs Intelligence — Real-Time Threat Detection Platform

[ 0 threats ] [ 0 det ] [ CRIT: 0 ] [ HIGH: 0 ]
// threat_feed
$ sort --newest
Showing all threats

Latest Threats