v5.0.0 - { success: true } The Asar Believes It #105
johnzfitch
announced in
Announcements
Replies: 2 comments
-
|
I was thinking on creating a flatpak abstraction layer |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
I started getting the 126 error again, is anybody else? I'm gonna start doing some 100 percent DMCA compliant binary analysis to really see what keeps popping up these errors. I highly suspect they'll keep coming up no matter what get's done |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Important
v5.0.0 — Security hardening + asar v1.569.0 compatibility. Closes 9 issues across 10 PRs from 6 contributors.
Claude Cowork Linux — v5.0.0
v4.3.1 → v5.0.0 · Security hardening · Current Desktop compatibility · 6 contributorsClaude Cowork Linux runs between two surfaces that move independently: Anthropic’s apps on one side, the Linux substrate on the other. v5.0.0 addresses both. Five security layers that were either missing or too permissive. Five compatibility gaps that were silently blocking current Desktop builds. None of this was glamorous work — but it’s the kind of work that makes everything else possible.
▶ TL;DR — what changed and why it matters
validateMountName()+validateRelativePathWithinHome()enforced at 3 pointsadditionalEnvforwarded anything from the rendererCLAUDE_*/ANTHROPIC_*prefix allowlist onlygetHostPlatform()threw onlinux-x64{ success: true }curl+zstddownload fromdownloads.claude.aitranslateVmPathsInString()handles paths + env values.desktophandler declared but never registeredxdg-mimedefault set in bothinstall.shandlaunch.sh🔒 Security hardening
1 — Mount path validation
Mount names and relative paths from the asar are now validated before any symlink is created.
validateMountName()rejects traversal attempts outright.validateRelativePathWithinHome()ensures relative paths resolve strictly within the user’s home directory. Both checks are enforced at three points in the mount creation pipeline — not just at the entry gate.The existing root-relative path heuristic was also tightened: the comparison now uses
startsWith(homedir + '/')instead ofstartsWith(homedir), closing a prefix collision that could affect adjacent usernames on shared systems.#95 · closes #91
2 — Environment variable allowlist
Environment filtering has been extracted into a dedicated module and the rules are now explicit rather than permissive-by-default.
additionalEnvfrom the renderer is filtered through two gates: an explicitADDITIONAL_ENV_ALLOWLISTset, and a prefix allowlist coveringCLAUDE_*andANTHROPIC_*variables. Everything else is rejected.The base process environment (
process.env) continues through the existingENV_ALLOWLISTpath unchanged.#95
3 — Session metadata integrity
Session JSON files now carry a SHA-256 checksum, stamped on every write and verified on every read. On-disk modification between app launches is detected rather than silently trusted.
findSessionMetadataPathnow also rejects session IDs containing path separators, closing a related injection vector.#95
4 — Disclaimer wrapper hardening
The disclaimer binary — previously a writable shell script on disk — is no longer executable in any meaningful sense. It exists on disk as an inert stub (read-only, exits 127). The asar’s
execFile/spawncalls are intercepted in-process before any file is touched, and commands through the intercept must originate from system directories. The stub on disk is never reached.#102
5 — Security comment cleanup
All
SECURITY:labels, tampering descriptions, and mechanism explanations removed from production code and log messages across 12 files. Security properties shouldn’t be documented in the attack surface they’re protecting.#102
🔗 Compatibility
6 —
getHostPlatform()patchThe original implementation handled
darwinandwin32and threwUnsupported platform: linux-x64on session init. It is patched. Linux is no longer an afterthought in the platform switch.Closes #97, #80, #76, #70 · based on @michael-greider’s #98
7 — Real
installSdk()The stub that returned
{ success: true }without doing anything is replaced with an implementation that actually installs the SDK. Downloads the correct Linux binary fromdownloads.claude.ai, validates the install path stays within~/.config/Claude/, and usesexecFileSync('curl')andexecFileSync('zstd')separately — no shell interpretation.Closes #79 · based on @michael-greider’s #98
8 — VM path translation in spawn args
Rewrites
/sessions/<name>/mnt/<key>/...paths embedded inspawn()args and env var values. Stops at shell metacharacters. Refuses paths containing/..to keep mount boundaries intact.Closes #88 · based on @F1nny’s #90
9 — Guest request methods for bridge classification
Added to the VM API. Required by the asar’s
cliPluginBridgeinitializer to classify CLI plugins without crashing on init.Based on @wlcarden’s #72
10 — OAuth protocol handler registration
The
.desktopfile declaredx-scheme-handler/claudebut the OS was never instructed to use it. OAuth callbacks hit a dead end.xdg-mimedefault registration now runs in bothinstall.shandlaunch.sh.Closes #93, #77
📄 Also in this release
Nested mount keys —
createMountSymlinksnow creates parent directories for nested mount keys like.claude/skills. Previously these silently failed withENOENTand offered no indication of why.#91 · @F1nny
Additional merged PRs:
npm install -g --prefixfix for Debian/Ubuntu~/.local/binand AppImage✓ Issues closed
Unsupported platform: linux-x64installSdkstub☐ Remaining open
⇓ Upgrade
👏 Contributors
6 contributors · 10 PRs · 9 issues closed
Thank you to everyone who opened PRs, filed detailed bug reports, and tested on their distributions. This release closed a long tail of bugs that have been open since Linux support launched — that’s entirely because of the reproduction steps and patches you provided.
getHostPlatform()patch + realinstallSdk()(#98)This discussion was created from the release v5.0.0 - { success: true } The Asar Believes It.
Beta Was this translation helpful? Give feedback.
All reactions