Repository navigation
fix(kernel): require verified caller identity for the split-view bridge - #672
Conversation
BossConsole#53: SplitViewServiceBridge had no identity check at all. Any process able to open a connection to the kernel IPC server - not only the plugins the host itself loaded - could force an arbitrary window's active panel to navigate to an attacker-chosen URL via openUrlInActivePanel (with no confirmation for an ordinary http(s) URL, and no confirmation gate at all for most boss:// hosts), open an arbitrary file path with no confinement via openFileInActivePanel/ openFileInEditor/openFileInBrowser/openFileAtPosition, manipulate panel/tab selection, or overwrite a workspace snapshot under an attacker-chosen name via preserveCurrentState. Applies the same fail-closed pattern already used for ActiveTabs, Download, Git, Log, PluginUI, RoleManagement, RunConfig and Supabase: every unary RPC requires a verified AUTHENTICATED_PROCESS_ID, and every mutation gets an attributed audit log line. This is the last bridge in this PR's own scope; ProjectData's identical fix is in flight separately (risa-labs-inc#666). New SplitViewServiceBridgeTest against a real gRPC server: every RPC refused with no credential and never reaching the provider, an authenticated caller can drive every operation, and a revoked caller cannot invoke a unary RPC.
|
Claude finished @kshivang's task in 5m 29s —— View job Review of
|
|
Reviewed the original contribution and the Claude review. Antriksh's guard is correct: all nine unary RPCs reject missing identity before provider dispatch. The original implementation is preserved. Review follow-up:
#666 (ProjectData) and merged #634 (RunConfig) are distinct fixes, not duplicates. No other PR was modified or closed. Original code and initial four transport tests remain credited to @Antriksh1984; the additional documentation and coverage are Codex review repairs. |
…ge (#672) * fix(kernel): require verified caller identity for the split-view bridge BossConsole#53: SplitViewServiceBridge had no identity check at all. Any process able to open a connection to the kernel IPC server - not only the plugins the host itself loaded - could force an arbitrary window's active panel to navigate to an attacker-chosen URL via openUrlInActivePanel (with no confirmation for an ordinary http(s) URL, and no confirmation gate at all for most boss:// hosts), open an arbitrary file path with no confinement via openFileInActivePanel/ openFileInEditor/openFileInBrowser/openFileAtPosition, manipulate panel/tab selection, or overwrite a workspace snapshot under an attacker-chosen name via preserveCurrentState. Applies the same fail-closed pattern already used for ActiveTabs, Download, Git, Log, PluginUI, RoleManagement, RunConfig and Supabase: every unary RPC requires a verified AUTHENTICATED_PROCESS_ID, and every mutation gets an attributed audit log line. This is the last bridge in this PR's own scope; ProjectData's identical fix is in flight separately (#666). New SplitViewServiceBridgeTest against a real gRPC server: every RPC refused with no credential and never reaching the provider, an authenticated caller can drive every operation, and a revoked caller cannot invoke a unary RPC. * test(kernel): verify split-view identity coverage and clarify scope --------- Co-authored-by: Shivang <shivang.iitk@gmail.com>
…ge (#672) * fix(kernel): require verified caller identity for the split-view bridge BossConsole#53: SplitViewServiceBridge had no identity check at all. Any process able to open a connection to the kernel IPC server - not only the plugins the host itself loaded - could force an arbitrary window's active panel to navigate to an attacker-chosen URL via openUrlInActivePanel (with no confirmation for an ordinary http(s) URL, and no confirmation gate at all for most boss:// hosts), open an arbitrary file path with no confinement via openFileInActivePanel/ openFileInEditor/openFileInBrowser/openFileAtPosition, manipulate panel/tab selection, or overwrite a workspace snapshot under an attacker-chosen name via preserveCurrentState. Applies the same fail-closed pattern already used for ActiveTabs, Download, Git, Log, PluginUI, RoleManagement, RunConfig and Supabase: every unary RPC requires a verified AUTHENTICATED_PROCESS_ID, and every mutation gets an attributed audit log line. This is the last bridge in this PR's own scope; ProjectData's identical fix is in flight separately (#666). New SplitViewServiceBridgeTest against a real gRPC server: every RPC refused with no credential and never reaching the provider, an authenticated caller can drive every operation, and a revoked caller cannot invoke a unary RPC. * test(kernel): verify split-view identity coverage and clarify scope --------- Co-authored-by: Shivang <shivang.iitk@gmail.com>
Problem (BossConsole#53)
SplitViewServiceBridgehad no identity check at all. Any process able to open a connection to the kernel IPC server - not only the plugins the host itself loaded - could:openUrlInActivePanel: force an arbitrary window's active panel to navigate to an attacker-chosen URL. No confirmation of any kind for an ordinary http(s) URL. Aboss://URL routes through the deep-link dispatch asDeepLinkOrigin.EXTERNAL-boss://terminalgets that tier's confirmation prompt, but per this repo's own AGENTS.md every otherboss://host (boss://plugin?id=…included) has no confirmation gate at all regardless of origin.openFileInActivePanel/openFileInEditor/openFileInBrowser/openFileAtPosition: open an arbitrary file path in the user's editor or browser with no path confinement.preserveCurrentState: overwrite a workspace snapshot under an attacker-chosen name.setActivePanel/selectTabInPanel: manipulate which panel/tab is active.Fix
Applies the same fail-closed pattern already used for the existing identity-enforcing kernel bridges: every unary RPC requires a verified
AUTHENTICATED_PROCESS_ID(refusingPERMISSION_DENIEDotherwise), and every mutation gets an attributed audit log line.This change secures SplitView only. #666 addresses ProjectData separately; #53 tracks the remaining IPC surface. Authentication does not add per-plugin capabilities or path confinement.
Tests
New
SplitViewServiceBridgeTestagainst a real gRPC server withProcessIdentityInterceptor/ProcessTokenRegistry/ProcessTokenClientInterceptor:Test plan
./gradlew :composeApp:compileKotlinDesktop :composeApp:compileTestKotlinDesktop- clean./gradlew :composeApp:desktopTest --tests "ai.rever.boss.kernel.services.*"- all pass./gradlew :composeApp:ktlintDesktopMainSourceSetFormat :composeApp:ktlintDesktopTestSourceSetFormat :composeApp:detekt- cleanaf19c69b50d49a3def03d962d0196dad65fd556e(run)Contributor credit and review follow-up
Original security implementation and four real-gRPC tests by @Antriksh1984 (Antriksh). Codex review repairs clarify the documentation, verify the production late-registration path with a real BossIpcServer, assert forwarded arguments, and check that the refusal test exercises every declared RPC. The original enforcement behavior is retained.
Final integration validation
Merged current dev into this branch, retaining the equivalent shared documentation fixes already landed by #666. The final dev diff is limited to SplitViewServiceBridge and its tests. All 101 kernel-service tests passed locally, including five SplitView tests; detekt and desktop main/test ktlint checks passed. No live database deployment was performed.