Skip to content

Fleet Deck

v0.9.1 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

agents ai-agents claude claude-code claude-code-plugin web
+4 more
developer-tools multi-agent orchestration tmux

Affected surfaces

auth

ReleasePort's take

Moderate signal
editorial:auto 11d

Release v0.9.1 fixes a symlink-follow vulnerability in the image‑paste feature on multi‑user hosts and introduces visible status messages for paste operations.

Why it matters: Addresses CVE‑style symlink‑follow risk (severity 95) affecting the image‑paste surface; adds UI feedback improving operational awareness.

Summary

AI summary

Security hardening fixes symlink-follow vulnerability in image‑paste feature and adds status feedback for paste failures.

Changes in this release

Security Critical

Fixes symlink-follow vulnerability in /tmp paste directory on multi-user hosts.

Fixes symlink-follow vulnerability in /tmp paste directory on multi-user hosts.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Adds visible status messages for paste failures and successes (e.g., size limits, daemon offline).

Adds visible status messages for paste failures and successes (e.g., size limits, daemon offline).

Source: llm_adapter@2026-07-15

Confidence: high

Bugfix Medium

Bounds paste directory to retain at most 50 most‑recent files, pruning older entries.

Bounds paste directory to retain at most 50 most‑recent files, pruning older entries.

Source: llm_adapter@2026-07-15

Confidence: high

Bugfix Medium

Prevents paste clobbering during burst uploads using 128‑bit UUID filenames and exclusive writes.

Prevents paste clobbering during burst uploads using 128‑bit UUID filenames and exclusive writes.

Source: llm_adapter@2026-07-15

Confidence: low

Bugfix Low

Rejects oversized pastes by Content‑Length before buffering and tightens transport size limit to 10 MB.

Rejects oversized pastes by Content‑Length before buffering and tightens transport size limit to 10 MB.

Source: llm_adapter@2026-07-15

Confidence: low

Full changelog

Security + hardening for the 0.9.0 image-paste feature, from an adversarial review.

Fixed a /tmp symlink-follow. 0.9.0 wrote pastes to a fixed, world-known name in shared /tmp, and the pruner followed a directory symlink planted there — on a multi-user host, a local co-tenant could turn a victim's paste into an arbitrary-file delete/overwrite as the victim. Single-user laptops and single-owner Coder workspaces were never exposed. Pastes now live under FLEETDECK_HOME, which no other user can write, so the symlink can't be planted at all.

Also: a burst of pastes can no longer clobber one another (128-bit names + exclusive write); the paste directory is bounded (keeps the 50 most-recent); oversized bodies are rejected before buffering; and — the most visible change — the feature is no longer silent. A too-large screenshot, an offline daemon, or an unsupported file now shows a status over the pane ("image too large (max 10 MB)", "✓ image added — press Enter to send") instead of doing nothing.

Recommended for anyone on 0.9.0, and required on shared/multi-user hosts.


Fixed

  • Image pastes are written under FLEETDECK_HOME, not a fixed name in shared /tmp. The 0.9.0 paste dir was os.tmpdir()/fleetdeck-pastes — a world-known path in sticky /tmp — and the pruner followed a directory symlink planted there. On a multi-user host a local co-tenant could pre-create that symlink and turn a victim's paste into an arbitrary-file delete/overwrite as the victim's user (and, as a lesser variant, squat the name to break the feature for everyone else on the box). A single-user laptop or a single-owner Coder workspace was never exposed — this bites shared login/build hosts. The directory now lives under FLEETDECK_HOME, which no other user can write, so the symlink cannot be planted at all; the pruner additionally lstats every entry and never follows a symlink, and the dir is refused if it is not a real directory this user owns.
  • A burst of pastes can no longer clobber an earlier one. Filenames were a per-second timestamp plus 24 random bits; names are now a 128-bit randomUUID, and the staging write is exclusive (wx).
  • The paste directory is bounded. Age-pruning (>24 h) only ran on the next paste and had no ceiling; it now also keeps at most the 50 most-recent files.
  • The feature is no longer silent. Every failure path (too-large image, unreachable daemon, unsupported bytes, a pane that lost focus mid-upload) now shows a transient status over the pane instead of only a console warning. Success shows "image added — press Enter to send".
  • Reject an oversized paste by its Content-Length before buffering it; tighten the transport cap to what a 10 MB image actually needs; validate base64 up front instead of letting malformed input decode to garbage.

Security Fixes

  • Fixed symlink-follow vulnerability in image‑paste feature that allowed arbitrary file delete/overwrite on multi‑user hosts (CVE not listed)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Fleet Deck

Get notified when new releases ship.

Sign up free

About Fleet Deck

All releases →

Related context

Earlier breaking changes

  • v0.13.0 Agents poller no longer uses a shell; runs via execFile with argv split on whitespace.
  • v0.6.0 Adds nullable columns `ticket`, `ticket_source`, `prev_callsign` to `sessions` table via schema migration.

Beta — feedback welcome: [email protected]