cli/internal/cmd
Snider febdb1ba92 Sanitize user input in execInContainer to prevent injection (#305)
* security: sanitize user input in execInContainer

This change implements command injection protection for the 'vm exec' command
by adding a command whitelist and robust shell argument escaping.

Changes:
- Added `escapeShellArg` utility in `pkg/container/linuxkit.go` to safely quote
  arguments for the remote shell.
- Updated `LinuxKitManager.Exec` to escape all command arguments before
  passing them to SSH.
- Implemented `allowedExecCommands` whitelist in `internal/cmd/vm/cmd_container.go`.
- Added i18n support for new security-related error messages.
- Added unit tests for escaping logic and whitelist validation.

Fixes findings from OWASP Top 10 Security Audit (PR #205).

* security: sanitize user input in execInContainer

This change implements command injection protection for the 'vm exec' command
by adding a command whitelist and robust shell argument escaping.

Changes:
- Added `escapeShellArg` utility in `pkg/container/linuxkit.go` to safely quote
  arguments for the remote shell.
- Updated `LinuxKitManager.Exec` to escape all command arguments before
  passing them to SSH.
- Implemented `allowedExecCommands` whitelist in `internal/cmd/vm/cmd_container.go`.
- Added i18n support for new security-related error messages.
- Added unit tests for escaping logic and whitelist validation.
- Fixed minor formatting issue in `pkg/io/local/client.go`.

Fixes findings from OWASP Top 10 Security Audit (PR #205).

* security: sanitize user input in execInContainer

This change implements command injection protection for the 'vm exec' command
by adding a command whitelist and robust shell argument escaping.

Changes:
- Added `escapeShellArg` utility in `pkg/container/linuxkit.go` to safely quote
  arguments for the remote shell (mitigates SSH command injection).
- Updated `LinuxKitManager.Exec` to escape all command arguments.
- Implemented `allowedExecCommands` whitelist in `internal/cmd/vm/cmd_container.go`.
- Added i18n support for new security-related error messages in `en_GB.json`.
- Added unit tests for escaping logic and whitelist validation.
- Fixed a minor pre-existing formatting issue in `pkg/io/local/client.go`.

Note: The 'merge / auto-merge' CI failure was identified as an external
reusable workflow issue (missing repository context for the 'gh' CLI), and
has been left unchanged to maintain PR scope and security policies.

Fixes findings from OWASP Top 10 Security Audit (PR #205).
2026-02-05 03:43:12 +00:00
..
ai feat: wire release command, add tar.xz support, unified installers (#277) 2026-02-04 00:49:57 +00:00
ci Migrate pkg/release to io.Medium abstraction (#290) 2026-02-04 15:07:13 +00:00
collect feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
config feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
crypt feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
deploy feat: wire release command, add tar.xz support, unified installers (#277) 2026-02-04 00:49:57 +00:00
dev Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
docs Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
doctor Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
gitcmd feat(mcp): add workspace root validation to prevent path traversal (#100) 2026-02-01 21:59:34 +00:00
gitea feat(gitea): add Gitea Go SDK integration and CLI commands (#324) 2026-02-04 21:12:12 +00:00
go chore(io): Migrate pkg/agentic to Medium abstraction (#286) 2026-02-04 15:32:53 +00:00
help feat: Batch implementation of Gemini issues (#176) 2026-02-02 04:20:18 +00:00
monitor Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
php feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
pkgcmd Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
plugin feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
qa Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
rag feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
sdk feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
security Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
setup Migrate pkg/repos to Medium abstraction (#291) 2026-02-04 18:03:54 +00:00
test feat(mcp): add workspace root validation to prevent path traversal (#100) 2026-02-01 21:59:34 +00:00
unifi feat(release): add Homebrew tap support and fix artifact naming (#325) 2026-02-05 01:37:02 +00:00
updater feat: infrastructure packages and lint cleanup (#281) 2026-02-04 11:34:43 +00:00
vm Sanitize user input in execInContainer to prevent injection (#305) 2026-02-05 03:43:12 +00:00
workspace feat: Batch implementation of Gemini issues (#176) 2026-02-02 04:20:18 +00:00