This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+14 more
Affected surfaces
Summary
AI summaryFixed remote code execution when a lost transport allowed caller JavaScript to run on the user's current tab.
Full changelog
Fixed
A session that lost its transport could run caller JavaScript on the user's current tab.
Every fail-closed branch in the tab layer keys on hasOwnedTab, which lives in per-MCP-session state. In HTTP-daemon mode a dropped transport makes the client re-initialise, which mints a new session id, and _st() hands it a fresh empty state — hasOwnedTab false, activeTabMarker null. So the guards all read "this session owns nothing" at precisely the moment an agent is mid-task and already owns a tab, and the next op falls through to the front document: whatever the user is looking at.
Reproduced live: a safari_evaluate issued right after a transport drop returned a user tab's DOM (#64).
The session state dies; the marker stamped on the tab does not, so the guard now uses it. With no marker of its own, a run refuses any front document whose window.name carries an MCP_ marker — a tab some MCP session opened and this one does not own — and fails closed with no retry. An unmarked front document stays reachable, so "read the page I'm looking at" still works for a session that genuinely never opened a tab.
Full details: #64
Security Fixes
- Prevents unauthorized JavaScript execution on the user's current tab after transport loss (#64)
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
About achiya-automation/safari-mcp
Native Safari browser automation for AI agents with 80+ tools. No Chrome dependency, optimized for Apple Silicon with 60% less CPU overhead.
Related context
Earlier breaking changes
- v2.10.5 npm audit gate now fails build on high or critical advisories.
Beta — feedback welcome: [email protected]