cli/pkg/i18n
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
..
locales Sanitize user input in execInContainer to prevent injection (#305) 2026-02-05 03:43:12 +00:00
compose.go feat(i18n): add options pattern and NewWithLoader constructor 2026-01-30 18:47:11 +00:00
compose_data_test.go refactor(i18n): rename intents_test.go to compose_data_test.go 2026-01-30 16:52:30 +00:00
compose_test.go feat: git command, build improvements, and go fmt git-aware (#74) 2026-02-01 10:48:44 +00:00
context.go refactor(i18n): implement extensible handler chain architecture 2026-01-30 18:42:41 +00:00
context_test.go refactor(i18n): implement extensible handler chain architecture 2026-01-30 18:42:41 +00:00
debug.go docs(i18n): clarify Set* behaviour and fix CurrentLanguage default 2026-01-30 18:11:03 +00:00
grammar.go fix(i18n): address remaining code review issues 2026-01-30 19:10:28 +00:00
grammar_test.go refactor(i18n): consistent empty input handling and add doc comment 2026-01-30 18:15:28 +00:00
handler.go feat: git command, build improvements, and go fmt git-aware (#74) 2026-02-01 10:48:44 +00:00
handler_test.go refactor(i18n): implement extensible handler chain architecture 2026-01-30 18:42:41 +00:00
hooks.go feat(i18n): add RegisterLocales for package locale registration 2026-01-30 20:51:32 +00:00
i18n.go refactor(i18n): implement extensible handler chain architecture 2026-01-30 18:42:41 +00:00
i18n_test.go fix(i18n): address remaining code review issues 2026-01-30 19:10:28 +00:00
interface_test.go refactor(i18n): remove C() and move intents to test-only 2026-01-30 16:50:08 +00:00
language.go refactor(i18n): final code standards cleanup 2026-01-30 18:08:33 +00:00
language_test.go feat(i18n): add Phase 4 extended language support 2026-01-30 12:55:41 +00:00
loader.go feat(i18n): expand CLI translations and fix noun form detection 2026-02-01 07:39:49 +00:00
loader_test.go refactor(i18n): implement extensible handler chain architecture 2026-01-30 18:42:41 +00:00
localise.go docs(i18n): clarify Set* behaviour and fix CurrentLanguage default 2026-01-30 18:11:03 +00:00
mode_test.go fix(i18n): address thread-safety issues from code review 2026-01-30 19:02:30 +00:00
numbers.go refactor(i18n): consolidate types into interfaces.go 2026-01-30 17:24:24 +00:00
numbers_test.go refactor(i18n): remove legacy i18n.{format} shortcuts 2026-01-30 17:34:45 +00:00
service.go feat(i18n): add RegisterLocales for package locale registration 2026-01-30 20:51:32 +00:00
time.go feat(i18n): add localized time formatting helpers 2026-01-30 14:44:42 +00:00
time_test.go refactor(i18n): remove legacy i18n.{format} shortcuts 2026-01-30 17:34:45 +00:00
transform.go fix(i18n): address remaining code review issues 2026-01-30 19:10:28 +00:00
types.go refactor(i18n): implement extensible handler chain architecture 2026-01-30 18:42:41 +00:00