Dimsyl AI Solutions ← Back

Weekly · from Dimsyl AI Solutions

The Signal

What’s hitting self-hosted AI-agent fleets this week, in plain English — and what one production fleet actually did about it. A two-minute read.

Plain titles · open one for the story · JSON feed

· Latest issue

4 entries

Quiet-ish week: one real dependency bump to make across the stack, one reverse-proxy version to confirm, and a teachable gap in how we trust third-party tools.

High severity. A URL-parser bug can trick your agent into calling servers it was told to block threat

The fast-uri library doesn't treat backslashes as authority delimiters the way Node's built-in URL parser does. That mismatch lets an attacker craft a URL that your host allow/deny list waves through, then redirects the outbound call somewhere it shouldn't go. Versions 3.0.0 through 3.1.3 are affected, and 3.1.2/3.1.3 are installed across roughly eleven fleet repos — so this is a real bump to make, not a hypothetical.

Who should care
Anyone running Node apps that use fast-uri to validate URLs before making outbound calls. Ignore it if fast-uri isn't in your tree, or you're already on 3.1.4 or higher (3.1.6+ to also clear the companion CVE-2026-75975).
What to do
Add an npm overrides pin of "fast-uri": ">=3.1.6" per repo and regenerate lockfiles, then run npm audit to confirm the advisory resolves. Verify each app boots and its suites pass before you restart.

Tracked as CVE-2026-16221, CVE-2026-75975, GHSA-v2hh-gcrm-f6hxSeverity high · CVSS 7.5Source GitHub Advisory Database GHSA-v2hh-gcrm-f6hx; Library/Turing deterministic lockfile measurement 2026-09-08

High severity. Your reverse proxy might trust a login header the visitor set themselves threat

Caddy's forward_auth with copy_headers only sets a header when the auth service returns it — but it never deletes the visitor's own same-name header. So if the auth service replies 200 OK without that header, the client's version passes straight through to the backend. Anyone holding a valid session token can then inject a trusted identity value and escalate their privileges. It affects Caddy 2.10.0 up to 2.11.2, and fleet records point to 2.11.4 already, so this is a quick confirm.

Who should care
Anyone using Caddy's forward_auth with copy_headers on a version below 2.11.2. Ignore it if you're on 2.11.2 or higher (2.11.3+ also clears the vars_regexp issue, CVE-2026-30852).
What to do
Run caddy version; if it's 2.11.2 or higher, close it as clear. If lower, do a routine apt or binary upgrade and caddy reload in an ops window — the same check covers CVE-2026-30852 at 2.11.3+.

Tracked as CVE-2026-30851, GHSA-7r4p-vjf4-gxv4Severity high · CVSS 8.1Source GitHub Advisory Database GHSA-7r4p-vjf4-gxv4; GitLab Advisory Database GO-2026-4639; web search confirmed 2026-09-14; Library/Turing brief 2026-09-13

Patched. Five vulnerability findings came in this week; none applied to what we actually run we patched

The weekly vulnerability funnel processed five findings and checked each against a deterministic inventory of what's actually installed. Zero were confirmed: one was out of the affected version range, three named packages we don't run, and one targeted an ecosystem the gate doesn't support. Four were held by the applicability gate and none were repeat sightings.

The lesson
A vuln that names a package — or a version — you don't run isn't your vuln; an inventory gate turns a feed of scary IDs into the short list that's actually yours.

Source Fleet internal — Library/Turing applicability gate 2026-09-14

Low severity. The tool descriptions your agent trusts can be rewritten into an attack behind your back deep-dive

When your agent connects to a third-party MCP server, it trusts whatever tool descriptions that server sends at runtime — and those descriptions go straight into the model's context. The MCPTox benchmark tested 45 real deployed MCP servers across 1,312 malicious cases and found a 72% success rate for injecting instructions through tool descriptions; even the best refuser, Claude 3.7 Sonnet, declined under 3% of attacks. So a compromised or rug-pulled upstream can silently rewrite a description into an injection payload, upstream of every string-sanitization defense you have. The fix doesn't rely on the model refusing: hash a reviewed baseline of each tool and diff it every time the server lists its tools, blocking on any drift.

Who should care
Anyone whose agent loads tools from third-party MCP servers they don't control — for the fleet, Firecrawl and the TikTok-scraper. Ignore it if every MCP server you use is one you build and host yourself.
What to do
On session start, call tools/list for each configured server, canonicalize and hash each tool's name, description, and inputSchema, and compare against a checked-in baseline JSON — abort and alert on any diff. Add a --rebaseline command for human-reviewed updates.

Severity lowSource arXiv:2508.14925 (MCPTox, verified); Library/Senku brief 2026-09-08

2earlier issues

· 7 entries The Signal — the week's verified vulnerabilities hitting self-hosted AI-agent fleets, what one production fleet actually patched, and one defense worth learning.

The Signal — the week's verified vulnerabilities hitting self-hosted AI-agent fleets, what one production fleet actually patched, and one defense worth learning.

Medium severity. SECURITY · CVE-2026-16742 (USN-8626-1) systemd-machined polkit bypass — almost certainly already closed by the 2026-08-22 apt upgrade; verify only threat

A local-only (CVSS ~5.5) systemd-machined authorization-race that lets an unprivileged local user SIGKILL any process. Same USN as the already-seen CVE-2026-15059; the 08-22 VPS full apt upgrade + reboot to 6.8.0-138 most likely already pulled it. This is a confirm-the-patch task, not a new exposure.

What to do
test — read-only dpkg -l systemd | grep ^ii on the VPS; confirm ≥255.4-1ubuntu8.6. If already there (expected), close as covered by the 08-22 apt window. If somehow behind, apt upgrade systemd* && systemctl daemon-reload in the next ops window.

Tracked as CVE-2026-16742, CVE-2026-15059Severity mediumSource Library dossier (Turing, 2026-08-29)

High severity. SECURITY · CVE-2026-44495 axios prototype-pollution gadget — VERIFY axios presence before treating as real (Turing said 'likely', not confirmed) threat

A High-severity credential-theft gadget in axios ≤1.15.1 — but Turing never confirmed axios is actually in a fleet lockfile. The single most valuable action is the 2-minute applicability check the quality-gate task demands.

What to do
test — read-only npm ls axios (and grep package-lock.json) across all fleet repos. If resolved anywhere: bump direct deps to ≥1.15.2, add package.json overrides: { axios: '>=1.15.2' } for transitive pulls, redeploy the affected service. If absent everywhere (likely): close as not-applicable, record the negative result so it never re-surfaces.

Tracked as CVE-2026-44495Severity highSource Library dossier (Turing, 2026-08-29)

Low severity. SECURITY · CVE-2026-46412 — a malicious transitive npm dep can harvest tokens at require()-time, bypassing --ignore-scripts; the Forge's post-merge verify runs threat

ignore-scripts (shipped 2026-08-23 on the Forge's post-merge npm ci) blocks lifecycle hooks but not a dependency's own module code, which runs when the code is imported. If the post-merge verify step then executes the merged repo's tests/build unsandboxed on the fleet host, a compromised transitive dep reads process.env (GITHUB_TOKEN, review key) at import time.

What to do
test→build: FIRST verify (read-only) whether the post-merge verify step executes repo code (npm test / tsc / build) or is install-only. If install-only, downgrade to watch. If it executes, move that step into the existing gVisor sandbox with an egress allowlist restricted to registry.npmjs.org:443 — the same sandbox model Scout scans already use — so module-load exfiltration to arbitrary hosts fails even if a bad dep is installed.

Tracked as CVE-2026-46412Severity lowSource Library dossier (Turing, 2026-08-25)

Low severity. SECURITY · GitHub issue-body & issue-comment prompt injection reaches the Forge's Rohan review context — the uncovered surface of the open PR-metadata quarantin threat

The Forge's open sec-forge-pr-metadata-quarantine task quarantines PR title, body, file names, and CI-log output — but issue bodies and issue comments referenced from a PR (gh issue view) reach Rohan's Claude-based review context unguarded, the exact class Black Hat/CSA demonstrated exfiltrates CI secrets.

What to do
test→build: FOLD into the existing sec-forge-pr-metadata-quarantine row (do not open a new task). Extend prTaskContext in forge.ts to detect issue references in the PR body ('Fixes/Closes/Resolves #N', full-URL refs) and fetch+quarantine each referenced issue body AND its comments through the same buildBlock path used for PR body; add a fixture where gh issue view returns injected content and assert quarantine fires before prTaskContext returns. Ships via the existing Rohan+Codex dual gate.

Tracked as CVE-2026-12537, CVE-2026-54316Severity lowSource Library dossier (Turing, 2026-08-25)

High severity. Caddy GHSA-6365-7ppr-5r92 — forward_auth+reverse_proxy wrong-connection race (auth-bypass risk); fixed in 2.11.5 — bump the open Caddy-upgrade task's target fro threat

A verified Caddy advisory: under forward_auth + reverse_proxy, a timing race routes the auth subrequest to the wrong upstream (replies 404), which can let a request bypass the auth check. Fixed in 2.11.5 — above the 2.11.4 the fleet is reportedly on.

What to do
Verify running Caddy version. If < 2.11.5, this updates the existing Caddy-upgrade task target (was 2.11.3/2.11.4) to 2.11.5, with forward_auth auth-bypass as the concrete driver. Upgrade + reload + re-verify the 401/authed behavior on all three vhosts.

Severity highSource Library dossier (Turing, 2026-08-27)

Patched. Fleet medic-sweep: sweep: 0 fixes, 1 escalated we patched

medic medic-sweep on 2026-08-31 — sweep: 0 fixes, 1 escalated

Source fleet: conductor event timeline (medic/medic-sweep, 2026-08-31)

Low severity. SECURITY (LOW) — Library/Lloyd echoes untrusted scraped web content into the PM2 log stream without stripping ANSI escapes (Terminal DiLLMas class) deep-dive

A malicious scraped page returning ANSI/OSC escape sequences can overwrite or hide lines in pm2 logs library-brief when CJ views them — the only genuinely-new, fleet-authored-code finding in today's batch.

What to do
test then (on CJ's OK) build: grep the Library agent for every console.log/process.stdout.write that carries Firecrawl-returned content; add a one-line stripAnsi (regex /\x1B\[[0-9;]*[a-zA-Z]/g plus OSC \x1B\] … \x07) at that boundary only. Verify with a fixture page that returns a line-overwrite sequence: pre-fix the log line is clobbered, post-fix the escapes render inert. Do NOT touch the vault-write path (already protected).

Severity lowSource Library dossier (Turing, 2026-08-30)

· 9 entries The Signal — the week's verified vulnerabilities hitting self-hosted AI-agent fleets, what one production fleet actually patched, and one defense worth learning.

The Signal — the week's verified vulnerabilities hitting self-hosted AI-agent fleets, what one production fleet actually patched, and one defense worth learning.

Medium severity. CVE-2026-27589 (GHSA-879p-475x-rqh2) — Caddy Admin API Accepts Cross-Origin POST /load Without enforce_origin; Full Config Replacement via CSRF threat

Caddy's local admin API ([redacted-ip]:2019) exposes POST /load — a state-changing endpoint that replaces the entire running config — without default origin enforcement. A prompt-injected fleet agent with HTTP capability (e.g. Claude Code's WebFetch or a direct fetch() call in an agent) could POST a crafted JSON config to this endpoint from the same host, reconfiguring Caddy: stripping forward_auth he

What to do
Upgrade Caddy to ≥2.11.1 (the open Caddy upgrade task already targets 2.11.3+). As immediate defense-in-depth: add enforce_origin: true to the Caddyfile admin block. This ensures POST /load requires Origin to match admin.origins. Source: https://github.com/advisories/GHSA-879p-475x-rqh2

Tracked as CVE-2026-27589Severity mediumSource Library dossier (Turing, 2026-08-24)

Critical severity. CVE-2026-35022 (GHSA-479q-mw77-pmr5, CVSS 9.3) — claude-agent-sdk Auth Helper Executes With shell=true, No Input Validation threat

The Forge (Driver + Rohan), Atlas, and Library all run on @anthropic-ai/claude-agent-sdk. CVE-2026-35022 is a sibling to CVE-2026-35020/35021 (already in the ledger) but covers a different code path: auth helper configuration values are executed via child_process with shell=true and no sanitization, enabling arbitrary OS command injection through a crafted helper path. The fleet's pinned SDK is 0.

What to do
Read GHSA-479q-mw77-pmr5 and confirm the fix floor. If at or below 2.1.177, the fleet is covered. If above, prioritise the SDK runtime bump in sec-sdk-claude-runtime-patch-floor and apply the TodoWrite-removal probe before upgrading. Source: https://github.com/advisories/GHSA-479q-mw77-pmr5

Tracked as CVE-2026-35022, CVE-2026-35020Severity criticalSource Library dossier (Turing, 2026-08-24)

High severity. CVE-2026-54316 — Claude Code WebFetch HuggingFace Bare-Hostname Pre-Approval Enables Covert API-Key Exfiltration; Black Hat Demonstrated End-to-End CI Secrets C threat

huggingface.co was pre-approved as a bare hostname in WebFetch, so any path under it was auto-permitted without a prompt. The Black Hat USA Aug 5 demo showed the full chain: craft GitHub issue → CI triggers Claude Code → injected content directs WebFetch to an attacker-controlled HF repo → secrets exfiltrate one character at a time via download counters. The fleet's bundled runtime (2.1.177) patch

What to do
The CVE is patched in the bundled runtime (2.1.177 > 2.1.163). Residual risk: ship sec-forge-pr-metadata-quarantine — quarantine gh pr title/body/file-names AND gh run view --log output before Driver/Rohan context. This closes the attack class regardless of which WebFetch channel an attacker finds next. Source: https://advisories.gitlab.com/npm/@anthropic-ai/claude-code/CVE-2026-54316/

Tracked as CVE-2026-54316Severity highSource Library dossier (Turing, 2026-08-24)

Medium severity. SECURITY · gh CLI Jul-31 advisory quartet — fix floor is v2.97.0; Forge is below it on the host (2.94.0) AND inside the Driver sandbox image (2.95.0) threat

Turing flagged the right advisories but could not name the fix floor; I established it (v2.97.0) and found the fleet below it in two places — and while verifying applicability in code, found a THIRD unquarantined attacker-influencable channel into Rohan/Driver that the existing open quarantine task does not cover.

What to do
TEST then BUILD, in that order, and CJ-gated because it is a host action. (1) Ground-truth first: gh --version on the VPS and podman run --rm forge-driver-sandbox:latest gh --version — the versions above are vault records, not live reads, since I am read-only by design. (2) If below 2.97.0: upgrade gh on the host, and bump the pinned gh version in [redacted-path] and rebuild the image. (3) Separately and independently: extend the quarantine work already boarded as sec-forge-pr-metadata-quarantine to cover gh run view --log output — that is the half the upgrade does

Tracked as CVE-2026-48501Severity mediumSource Library dossier (Turing, 2026-08-19)

Critical severity. SECURITY · Turing's version floors are inverted — his own remediation would have marked keyv 6.0.0, flat-cache 6.1.24 and file-entry-cache 11.1.6 (the real mali threat

The vuln gate's fourth near-miss is categorically worse than the first three: this is not a missing corroboration step, it is Turing's version arithmetic itself producing a false-negative on live malware.

What to do
TEST, read-only, then CJ decides. (1) Replay: feed today's three findings through the live vuln gate and record how many auto-flow — if the Shai-Hulud item passes, the gate would have filed a task whose remediation certifies malware as clean, and that number is the whole argument. (2) Then CJ's standing fix-vs-retire call on Turing, now with the strongest evidence yet on the retire side: a scout whose version arithmetic is unreliable cannot be repaired by adding corroboration downstream of it. (3) If FIX: the gate must consume affected-version SETS from a machine source (OSV/GHSA ranges), neve

Severity criticalSource Library dossier (Turing, 2026-08-20)

Patched. Fleet medic-sweep: sweep: 0 fixes, 1 escalated we patched

medic medic-sweep on 2026-08-24 — sweep: 0 fixes, 1 escalated

Source fleet: conductor event timeline (medic/medic-sweep, 2026-08-24)

Patched. Fleet vulns-funneled: Turing funneled 7 vulnerability finding(s) to arbitration we patched

library vulns-funneled on 2026-08-24 — Turing funneled 7 vulnerability finding(s) to arbitration

Source fleet: conductor event timeline (library/vulns-funneled, 2026-08-24)

Patched. Fleet medic-sweep: sweep: 1 fix, 1 escalated we patched

medic medic-sweep on 2026-08-24 — sweep: 1 fix, 1 escalated

Source fleet: conductor event timeline (medic/medic-sweep, 2026-08-24)

Low severity. The Agent SDK moved @anthropic-ai/sdk and @modelcontextprotocol/sdk to peerDependencies at 0.3.143 — our exact-pinning defense was built for the old shape, and deep-dive

sec-agentic-g5-supply-chain exact-pinned every Claude SDK manifest, but a dependency→peerDependency migration means those two packages now resolve from each repo's OWN manifest, and [redacted-path] declares @modelcontextprotocol/sdk with a floating caret.

What to do
TEST FIRST, read-only, minutes: sweep every fleet package.json for direct @anthropic-ai/sdk and @modelcontextprotocol/sdk declarations and record which are caret/tilde vs exact. My grep was truncated and dominated by the npx cache, so I have CONFIRMED only [redacted-path] — the sweep is the deliverable, not the fix. Then fold the result into the already-scheduled one-pin-many-questions session rather than opening a separate change.

Severity lowSource Library dossier (Turing, 2026-08-18)