Ghosthand is a daemon that injects input into a live desktop session. Treat any vulnerability in it as high severity by default.
Do not open a public issue for security problems. Use GitHub's private vulnerability reporting ("Report a vulnerability" under the Security tab), or email the maintainer address listed on the repository owner's GitHub profile.
You can expect an acknowledgement within a few days. Please include a reproduction and the daemon version / commit.
- The daemon trusts any client holding the bearer token, up to that token's
scope (
observe= read-only,control= full; see docs/SECURITY.md). Theft of acontroltoken = full desktop control. Report anything that lets a client act without a valid token, act beyond its token's scope (e.g. an observe token reaching a mutation), escape the lease model, bypass the human-override lockout, or replay an action into re-execution. - Installer authenticity:
scripts/install.shverifies the Developer ID signature and team id of what it installs and fails closed. A bypass of that verification is in scope. - The audit log is a tamper-evident hash chain with identity on every record and chained rotation generations. Anything that lets records be altered, dropped, or forged without breaking verification is in scope.
- The daemon is designed to bind loopback and a private overlay network only. Configurations that expose it more broadly are out of scope, but a bug that makes the daemon bind more widely than requested is in scope.
- Secure-input bypasses (typing into a field macOS marks as secure) are in scope.
Only the latest release / main receives security fixes.