Summary
activation_ipc.py ships a static authkey for the duplicate-launch activation pipe:
DEFAULT_PIPE_ADDRESS = r"\.\pipe\AccessiWeather.SingleInstance.Activation"
PIPE_AUTHKEY = b"AccessiWeather.SingleInstance.v1"
The pipe lives at machine scope, and because the authkey is a compile-time constant in the repo, any local process can complete the multiprocessing.connection auth handshake and send activation requests.
Risk: low (today)
The blast radius is currently small: a sender can only trigger UI actions (show the window, open an alert/discussion dialog), and the server uses send_bytes/recv_bytes + JSON rather than pickle, so there's no code-execution path. Deferred deliberately during the single-instance review for that reason.
When this matters
If the set of IPC request kinds ever grows to include anything with side effects beyond raising UI, revisit this. The fix is to derive the key per-user instead of shipping a constant — e.g. from the user SID or the runtime storage path — so a request can't be forged across user sessions.
Context
Came out of the single-instance startup review (finding #4). Related PRs: #698 (handle truncation), #699 (handoff dedupe / polling).
Summary
activation_ipc.pyships a static authkey for the duplicate-launch activation pipe:The pipe lives at machine scope, and because the authkey is a compile-time constant in the repo, any local process can complete the
multiprocessing.connectionauth handshake and send activation requests.Risk: low (today)
The blast radius is currently small: a sender can only trigger UI actions (show the window, open an alert/discussion dialog), and the server uses
send_bytes/recv_bytes+ JSON rather than pickle, so there's no code-execution path. Deferred deliberately during the single-instance review for that reason.When this matters
If the set of IPC request kinds ever grows to include anything with side effects beyond raising UI, revisit this. The fix is to derive the key per-user instead of shipping a constant — e.g. from the user SID or the runtime storage path — so a request can't be forged across user sessions.
Context
Came out of the single-instance startup review (finding #4). Related PRs: #698 (handle truncation), #699 (handoff dedupe / polling).