KanbanAI is a local desktop application designed for individual developers. The security model reflects this use case.
| Threat | Protection |
|---|---|
| Programmer errors | Basic input validation (absolute paths, no .. traversal) |
| Shell injection | shell: false on all spawn() calls |
| Runaway processes | Timeout on git commands (30 seconds) |
| Threat | Why Not Protected |
|---|---|
| Local attackers | If someone has local filesystem access, they already own the machine |
| TOCTOU attacks | Requires local access + microsecond timing |
| Symlink attacks | Requires local filesystem access |
| Multi-tenant isolation | Single-user application |
For a local desktop application:
- The user owns the machine and the data
- Network exposure is limited to localhost
- There are no untrusted users to isolate
- An attacker with local access could simply
rm -rfthe data directly
Defense-in-depth measures that make sense for web services (elaborate path validation, TOCTOU mitigations, security contexts) add complexity without meaningful protection in this context.
All git commands use:
spawn('git', args, { cwd, shell: false })shell: falseprevents shell metacharacter interpretation- Commands are hardcoded, not built from user input
- 30-second timeout prevents hung processes
Basic validation to prevent programmer errors:
function validatePath(path: string): void {
if (!isAbsolute(path)) throw new Error('Path must be absolute')
if (path.includes('..')) throw new Error('Path traversal not allowed')
}Worktree operations are constrained to project directories:
function isWithinRoot(targetPath: string, rootPath: string): boolean {
return resolve(targetPath).startsWith(resolve(rootPath) + '/')
}Add stronger security measures if:
- Exposing the API to network (not localhost)
- Adding multi-user support
- Accepting plugins/extensions from untrusted sources
- Processing untrusted external data
For security-relevant bugs, please open a GitHub issue. Since this is a local desktop application, most "security" issues are better classified as bugs or feature requests.
Last Updated: 2026-01-03