Security brief 13 min read Threat level: Elevated

Security brief: two supply-chain and abuse stories that never reached PADAWAN, and the 'it only listens on localhost' assumption failing again in MCP tooling

No new CISA KEV entry for agentic software and no new in-the-wild exploitation of an agent framework surfaced in the window. Two incidents from the week before were never covered here: a compromised tensorlake npm release that harvests AI-tool credentials and carries a destructive 'revoke and lose your files' trigger, and a CrowdStrike report on an operator who drove Claude Code and the ARTEX pentest agent against South Korean banks. The advisory sweep adds DBHub (CVSS 9.3), Headroom (8.8), Nginx UI's MCP tools (8.8), mcp-atlassian (7.7) and Vibe-Trading (critical, no CVE).

Covers Fri 16 Oct 08:00 to Mon 19 Oct 08:00 CEST, plus late finds from 7 to 8 Oct and a GitHub Advisory Database sweep back to 22 Sep

Thin window for fresh disclosures: the GitHub Advisory Database shows no new critical agentic advisory first published on 17 or 18 Oct, and CVE-2026-96620, CVE-2026-105192 and the Nginx UI OTP bypass were covered on 17 Oct. This report therefore goes deeper on late finds. Source access was limited: github.com and its advisory pages were read in full; Socket, CrowdStrike, BleepingComputer, The Hacker News, Zscaler, CISA, arXiv and the Cloud Security Alliance did not load from this environment. The tensorlake and ARTEX incident items rest on search-result extracts from those outlets and are tagged press with the unconfirmed parts called out. I could not check CISA KEV directly, so 'no new KEV entry' means none surfaced in search. The repository's AGENT.md describes a v2 report scheme (daily-brief, a ledger and a source registry) that the site code and check scripts do not yet support, so this run uses the v1 types security-brief and daily-signal and did not touch content/ledger.json or the registry, which do not exist yet.

Act now

  • Audit every MCP server you run in HTTP mode, and pin tensorlake Search lockfiles and CI logs for tensorlake 0.5.144 (safe: 0.5.143). If it was ever installed, treat the host or runner as compromised: take it off the network first, then rotate npm, GitHub, cloud, Kubernetes and Vault credentials from a clean machine, because a stolen GitHub token is reported to carry a destructive trigger on revocation. Separately, upgrade DBHub to 0.22.5 or later and Headroom to 0.35.0 or later, and bind any HTTP-mode MCP server to 127.0.0.1 with an allowed-hosts list and a bearer token.

In brief

  • tensorlake 0.5.144 on npm (8 Oct) ran a preinstall loader that reportedly steals npm, GitHub, cloud and Kubernetes credentials plus Claude, Cursor, Codex, Gemini and Windsurf configs, and reportedly wipes files if a stolen token is revoked. Pin 0.5.143, isolate before you rotate.
  • CrowdStrike (7 Oct): a single operator paired the open-source ARTEX pentest agent with Claude Code against South Korean financial firms and was exposed by their own open directories. Several banks have disclosed breaches. I could not open the report; details are from search extracts.
  • DBHub up to 0.22.4 (CVE-2026-61742, CVSS 9.3): in HTTP mode a web page can reach the unauthenticated /mcp endpoint by DNS rebinding and run SQL. Headroom before 0.35.0 (CVE-2026-71416, 8.8): any web page can drive the proxy with the server's OpenAI key.
  • Two MCP servers apply a safety check on one code path and forget the sibling: Nginx UI's nginx_config_add skips the directive check (CVE-2026-84317 and 84318, 8.8) and mcp-atlassian's upload_attachment skips the path check (CVE-2026-77258, 7.7).
  • Vibe-Trading before 0.1.7 registers shell and code tools by default (GHSA-jqmf-mx4f-hfr6, scored 10.0, no CVE), and four npm packages named opencode-* were classed as malware on 16 Oct.

Executive summary

Nothing new was exploited in the wild this weekend that I could verify, but two stories that matter to anyone running coding agents had slipped past this site. The first is a supply-chain compromise of a developer SDK that goes after the configuration files of AI coding tools. The second is a vendor report that shows what a skilled operator does with a commercial coding agent: they use it as a force multiplier for a real intrusion campaign, and they get caught because they are sloppy with their own server, not because anyone detected the agent.

The advisory sweep shows the same two design mistakes as the past fortnight. Tool servers that assume “bound to localhost means private” are being reached by web pages through DNS rebinding and cross-site WebSockets. And MCP tool paths keep skipping the validation that the REST or CLI path next to them performs.

Recommendation (opinion): treat the developer workstation as the perimeter. Most of this week’s items end at a developer machine holding cloud keys, a model API key and a coding agent with shell access. Controls that matter most are egress allow-lists for agent processes, no long-lived tokens in .env files, and an install policy that blocks lifecycle scripts for packages younger than a few days.

Act now

  • Pin tensorlake and isolate before rotating. Details in the first incident below.
  • Find your HTTP-mode MCP servers. Any server started with an HTTP or SSE transport on a developer laptop or a shared box is reachable from a browser unless it checks Host, Origin and a token. Upgrade DBHub and Headroom, and put a bearer token on everything else.
  • Review .mise.toml and similar repo-local config before an agent runs in a cloned repository. See the mise item.

Incidents

tensorlake npm release steals AI-tool credentials and booby-traps token revocation

Press8 OctLate find · first published 8 Oct

What happened. Search extracts of Socket, Sonatype, The Hacker News and others describe a malicious tensorlake release, version 0.5.144, published to npm on 8 October and flagged by Socket about eleven minutes later. It was removed afterwards; 0.5.143 is the last clean version. Socket ties it to the ChainDrop wave of the Shai-Hulud worm family that Zscaler describes starting on 4 August. I surfaced it through a threat-intelligence briefing on 10 October and could not open the vendor pages themselves.

Analysis. Mechanism, as reported: a preinstall lifecycle hook runs an obfuscated loader that starts the real payload under the Bun runtime. Because it runs at install time, nothing has to import the SDK or start an agent. The payload reportedly collects npm, GitHub and AWS tokens, SSH keys, .env files, Vault and Kubernetes credentials, and the configuration of AI tools: Sonatype lists Claude, Cursor, Codex, Gemini and Windsurf. Stolen npm credentials are used to republish other packages under the victim’s identity, which is what makes it a worm. A further report says the malware carries destructive routines that fire if a stolen GitHub token is revoked, the same “hostage token” behaviour Zscaler describes for ChainDrop, which wipes home directories. Sources disagree on when the first malicious commit landed (7 October 01:20 UTC in two reports) and none confirms how the maintainer account was taken over. This is the trust boundary between a package registry and the build host; the root cause is that the install step runs arbitrary code from a package the team did not vet, with a privileged environment. Blast radius is every secret the install context can read. AI-tool configs matter because they hold MCP server definitions, API keys and, in some tools, auto-approval lists: a stolen MCP config gives the attacker the same tool access the agent has. ATLAS maps this to supply-chain compromise and credential access; OWASP LLM03 (supply chain) applies.

Why it matters. Earlier worm waves aimed at CI secrets. This one explicitly lists coding-agent configuration as a target and, per Zscaler’s description of ChainDrop, uses IDE and agent configuration files for persistence. Tensorlake is an SDK for agent workloads, so its install base overlaps exactly with teams that have agent credentials on the machine.

Mitigation and detection. Search lockfiles, package caches and CI logs for tensorlake@0.5.144. Run installs with lifecycle scripts disabled (--ignore-scripts) and require a release-age delay for new versions. Isolate affected hosts and runners before revoking tokens, then rotate from a clean machine and rebuild runners. Check repositories for unexpected commits touching .claude/, .vscode/ or workflow files, and check npm for versions you did not publish.

Recommendation (opinion): act today if you installed anything from the tensorlake namespace on 8 October. Otherwise adopt the install-policy change this quarter; search extracts put it in the same family as the April and August Shai-Hulud waves.

Sources: Socket write-up (not opened; via search extract) · The Hacker News (not opened) · Sonatype (not opened) · Zscaler on ChainDrop (not opened)

An operator ran ARTEX and Claude Code against South Korean banks

Press7 OctLate find · first published 7 Oct

What happened. According to search extracts of the CrowdStrike blog and BleepingComputer, CrowdStrike reported on 7 October a campaign against South Korean financial institutions that ran from late September into early October and ended with stolen data. The operator left open web directories on servers they controlled, exposing Claude Code session histories, Claude memory files and ARTEX configuration. ARTEX is an open-source, China-developed agentic penetration-testing tool. CrowdStrike assesses with moderate confidence a Chinese-speaking, financially motivated actor and has not named a group. Several Korean banks have disclosed breaches; one reported figure is about 25,000 customers at one bank. Reports differ on whether card data was exposed and on which language models were used besides Claude; I treat both as unconfirmed.

Analysis. The attacker did not need a new technique. The tooling supplied planning, tool orchestration and notes that persist between sessions, and the human supplied scope and judgment. The prompt-by-prompt record is the unusual part: it exists only because of an operational-security failure on the attacker’s side. The defender-relevant lesson is detection: an agent-driven intrusion looks like a fast, tidy human intrusion (many sequential commands, consistent tooling, little dwell time), and no control in the reports detected the agent itself. Mapping: ATLAS tactics for reconnaissance and execution using AI-enabled tooling; OWASP’s agentic list does not cover offensive use, which is a gap in the framework rather than the attack. Comparable cases are the Cursor-assisted ransomware affiliate described in a 1 September CSA briefing and Anthropic’s own misuse reports.

Why it matters. Vendor-side safeguards on a commercial agent did not prevent the use; the economics do the work. Defenders should assume attacks run faster and with fewer errors than three quarters ago, and plan detection around speed and breadth, not around novelty.

Mitigation and detection. Shorten the time from alert to containment; alert on bursts of enumeration and lateral movement from a single identity; harden the entry points CrowdStrike names for this case (a broker-facing loan-inquiry service was reported). For model providers: abuse monitoring on API keys used for dense, multi-hour tool sessions.

Recommendation (opinion): watch, do not rebuild. Use this to justify faster containment targets and to ask your SOC how it would recognise agent-paced activity. No product purchase follows from one report.

Sources: CrowdStrike blog (not opened; via search extract) · BleepingComputer (not opened)

Vulnerabilities

CVE or GHSAProductWeaknessCVSSFixedExploited
CVE-2026-61742DBHub (@bytebase/dbhub)DNS rebinding to unauthenticated /mcp9.3 (v4.0)0.22.5No evidence
CVE-2026-71416Headroom (headroom-ai)Cross-site WebSocket hijacking, server key injected8.80.35.0No evidence
CVE-2026-84318, CVE-2026-84317Nginx UI MCP toolsnginx_config_add skips directive validation8.8v2.4.1No evidence
CVE-2026-77258mcp-atlassianupload_attachment skips path validation7.70.22.0No evidence
GHSA-jqmf-mx4f-hfr6 (no CVE)Vibe-Trading (vibe-trading-ai)LLM-callable shell and code tools on by default10.0 (v3.1)0.1.7No evidence
CVE-2026-103929miseUntrusted repo config overrides shell arguments7.82026.7.14No evidence

None of these is on CISA KEV as far as I could determine.

DBHub and Headroom: a web page reaches the “local” server

OfficialCVSS 9.3CVSS 8.8CVE-2026-61742CVE-2026-71416Late find · listed 24 Sep and 2 Oct

What happened. DBHub is an MCP server that gives agents SQL access to databases. In HTTP mode, versions up to 0.22.4 accept requests on /mcp with no token and a weak origin check; GHSA-fm8p-53ww-hf6w was published by Bytebase on 24 June and entered the GitHub database on 24 September with CVSS 4.0 9.3. Headroom, a proxy that sits in front of OpenAI-style APIs, has the same class of flaw: before 0.35.0 its /v1/responses WebSocket does not check Origin, and when the client sends no credentials the proxy adds a Bearer token built from the server’s OPENAI_API_KEY (GHSA-h46j-26q3-rggf, CVSS 3.1 8.8, reviewed 2 October).

Analysis. Entry point: a web page the developer visits. Trust boundary crossed: the browser, which can talk to 127.0.0.1 and to the LAN, and which the server treats as the same party as the local user. DBHub’s middleware only checks that the Origin hostname equals the Host hostname. With DNS rebinding both carry the attacker’s domain, so the check passes, the server reflects the origin into Access-Control-Allow-Origin with credentials, and the page can call tools such as execute_sql and read the answers. The advisory notes that stdio, the default, is not affected, no prompt injection is involved, and the impact grows with the privileges of the connected database account. Headroom needs no rebinding: a browser can open a WebSocket to a local port without a preflight, and the server supplies the missing credentials. Root cause in both: authentication was skipped on the assumption that the listener is local. Preconditions: HTTP transport enabled, the browser can reach the port, and the victim opens an attacker page. Blast radius: query and, if not read-only, write access to the database; or prompts, tool use and quota on the organisation’s model key, which the advisory says can reach remote code execution if the proxy exposes a shell tool.

Attacker page opened by the developer Browser to local port rebinding or WebSocket MCP server or proxy no token, weak origin check SQL or model call with the server's key Bind to 127.0.0.1, allow-list Host and Origin, require a bearer token on every HTTP route
The listener was "local only" by assumption, and the browser is the bridge. The same pattern hit Cline's Hub dashboard (CVE-2026-59723) earlier this month.

Why it matters. This is the latest in a run of local-listener flaws in agent tooling (Cline’s Hub dashboard, PraisonAI’s spoofable localhost check CVE-2026-61435, DBHub, Headroom). The MCP specification’s guidance on local servers and DNS rebinding exists; these projects shipped without applying it. A database MCP server is also a high-value target because teams connect it to production read replicas with generous credentials.

Mitigation and detection. Upgrade (DBHub 0.22.5 or later; the references point to 0.22.6, check which you need; Headroom 0.35.0). Prefer stdio. If HTTP is needed: bind to loopback, enforce a Host allow-list, validate Origin against an explicit list, require an Authorization token, and give the database account read-only rights on a replica. Detect with server logs showing /mcp requests whose Host is not localhost/127.0.0.1.

Recommendation (opinion): act this week. Inventory HTTP-mode MCP servers with a one-line listener check on developer machines (ss -ltnp for ports held by node or python processes), then fix or remove each.

Sources: GHSA-fm8p-53ww-hf6w (DBHub) · GHSA-h46j-26q3-rggf (Headroom)

MCP tools skip the check their sibling path performs: Nginx UI and mcp-atlassian

OfficialCVSS 8.8CVSS 7.7CVE-2026-84318CVE-2026-77258Late find · listed 15 Oct and 22 Sep

What happened. In Nginx UI, the REST endpoint that creates configuration validates against dangerous directives (perl, js_import, load_module, user root), but the MCP tool nginx_config_add writes the file and reloads nginx without that step; its sibling config_modify already performs it. GHSA-9jww-cxg5-rj9m (CVE-2026-84318, CVSS 8.8, reporter thekogo) and the near-identical GHSA-76pm-mq2q-9gcr (CVE-2026-84317) landed in the GitHub database on 15 October, with the fix in v2.4.1. The 17 October brief covered the OTP bypass in the same product. In mcp-atlassian, upload_attachment reads and uploads a local file without calling validate_safe_path(), which the download methods call. GHSA-93xw-j965-9mx3 (CVE-2026-77258, CVSS 7.7) is fixed in 0.22.0; a sibling, CVE-2026-77247, covers unrestricted file_path parameters.

Analysis. The root cause is a duplicated-controls bug: validation lives in handlers, not in a shared layer, so a new interface (MCP) is wired to the storage code without the guard. For Nginx UI the precondition is an authenticated user or node secret; with the Perl, njs or Lua modules loaded, the result is command execution as the nginx worker, and the advisory notes user root can raise privileges. For mcp-atlassian, the caller is any MCP client or a prompt-injected agent, and the server’s readable files (SSH keys, .env, cloud credentials) end up as attachments on a Confluence page visible to other users. OWASP LLM06 (excessive agency) and LLM05 (improper output handling) fit; for agents, the more useful mapping is “confused deputy”: the model asks, the server has more rights than the model should.

Why it matters. This repeats the 17 October finding: MCP front doors enforce weaker rules than the web UI. For teams, it means an MCP integration is a second, separately reviewed application surface, not a wrapper.

Mitigation and detection. Upgrade Nginx UI to v2.4.1 and mcp-atlassian to 0.22.0 or later. Restrict the server process’s filesystem view (container with only the working directory mounted), and alert on Confluence or Jira attachments created by the integration account whose names match credential files.

Recommendation (opinion): act this week for Nginx UI, schedule for mcp-atlassian. In your own MCP servers, route tool calls through the same validation functions as the HTTP API and add a test that fails when a tool bypasses them.

Sources: GHSA-9jww-cxg5-rj9m · GHSA-93xw-j965-9mx3 · GitHub Advisory Database, MCP filter

Vibe-Trading, mise and four opencode-named packages

OfficialGHSA scored 10.0, no CVECVSS 7.8Late find · listed 2 Oct and 15 Oct

What happened. Vibe-Trading (vibe-trading-ai, versions 0.1.0 up to but not including 0.1.7): GHSA-jqmf-mx4f-hfr6, published 29 July, reviewed 2 October, scored 10.0. The tools BashTool and BackgroundRunTool send the model’s command straight to subprocess.run(shell=True), they are registered by default, the container runs as root, and a related advisory describes unauthenticated session endpoints. Prompt injection in an uploaded document can trigger the calls. No CVE is assigned. mise (CVE-2026-103929, 7.8, fixed in 2026.7.14): an untrusted repository’s .mise.toml can override the default shell arguments, so merely entering the directory and running a task, installing a tool with a postinstall or rendering a template can run the attacker’s payload. mise is a general developer tool, not agentic software; the advisory does not mention agents, and the agent angle is my inference: agents clone repositories, change into them and run mise run without a human trust prompt. opencode- packages*: GitHub classed @beloved-lenora/opencode-shell-guard, opencode-orchestrator, opencode-stats and opencode-shared-rpc as malware on 16 October (all versions, no patched version); the advisory pages give no description of the behaviour beyond “treat the host as fully compromised”. The names suggest they target users of the OpenCode coding agent.

Analysis. Vibe-Trading is a design failure of the same kind as PraisonAI’s CodeAgent from the 18 October brief: dangerous tools registered by default, with no opt-in and no sandbox. The mise bug is a repeat of a bug class that was fixed twice before for other settings (CVE-2026-55448, CVE-2026-35533) by a deny-list that missed four settings: allow-lists for untrusted configuration would have prevented the third occurrence. The opencode packages fit the pattern of typosquat-style packages named after the agent ecosystem; I did not open the packages and make no claim about their payload.

Mitigation and detection. Upgrade Vibe-Trading to 0.1.7 and set the shell tools to opt-in; upgrade mise; do not run mise in untrusted repositories without reviewing .mise.toml, and let agents run only inside containers. Remove the opencode packages if installed and rotate secrets from a clean machine.

Recommendation (opinion): schedule. None of these is exploited as far as I know; fold them into the next patch cycle, and make “default-registered shell tool” a review blocker for any agent framework you adopt.

Sources: GHSA-jqmf-mx4f-hfr6 · GHSA-g74g-rg72-j2p3 (mise) · GHSA-pm76-w63j-7j29 (opencode-shell-guard) · GitHub malware advisories

MCP and protocol security

The protocol side moved in drafts, not releases, and the details are in the daily signal for today: the DPoP profile for MCP (SEP-1932), structured authorization denials (SEP-2643) and the events extension (SEP-3415) all carry security questions that implementers can act on now. The MCP Inspector documentation also gained a security page on 8 October, relevant if you run the Inspector in Docker.

Research

I verified no new research paper in the window. A lead I could not open: a search extract describes “A2ABreak” (arXiv 2609.10871), a systematic analysis of the A2A protocol reporting a 37-state, 76-transition model and 11 vulnerabilities exploitable by a spec-compliant adversary, including cross-client context injection and credential harvesting through multi-hop identity loss. Tag it early: treat it as a reading-list item until someone opens the paper.

Tools and industry

Nothing qualifying beyond the model-safety items in the daily signal. Anthropic’s 6 October expansion of its Cyber Verification Program and 8 October “Cyber Mission” post appear in the newsroom listing; I read only the titles and make no claim about their content.

Policy

No new policy action surfaced for agent security in the window. Background that remains true: the EU’s Digital Omnibus on AI moved the stand-alone high-risk obligations to December 2027 according to search extracts, so there is no EU compliance deadline forcing agent-security work this year.

Sources