Skip to content

fix(x): rowboat-server hardening (review follow-ups #879–882) - #887

Merged
Gagancreates merged 1 commit into
arch/server-client-separationfrom
feat/server-hardening
Aug 24, 2026
Merged

fix(x): rowboat-server hardening (review follow-ups #879–882)#887
Gagancreates merged 1 commit into
arch/server-client-separationfrom
feat/server-hardening

Conversation

@Gagancreates

Copy link
Copy Markdown
Collaborator

First follow-up on the arch/server-client-separation integration branch, closing the four non-blocking findings from the #758 review:

Four new tests cover the guards (foreign Host 403, symlink 403, foreign-pid lock refusal, loud port collision); all suites green.

🤖 Generated with Claude Code

…n, Host guard, symlink guard, WS header auth

- the workdir lock moves into createRowboatServer itself, so the
  Electron-hosted transport and the standalone entrypoint contend for
  the same server.lock; EPERM on the pid probe counts as a live holder
- EADDRINUSE on the configured port now probes the occupant's /health:
  another rowboat-server is a hard error, not a silent port+1 fallback
- every HTTP request and WS upgrade validates the Host header against
  the machine's own names/addresses (DNS-rebinding defense-in-depth)
- GET /workspace/{path} and the app://workspace protocol realpath the
  target and require containment in the workspace (symlink escape)
- @x/client sends the WS token as an Authorization header on React
  Native; ?token= remains only for clients that cannot set headers
@Gagancreates
Gagancreates merged commit 913a3b2 into arch/server-client-separation Aug 24, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant