Commit Graph

23 Commits

Author SHA1 Message Date
25f0037aab Filter environment variables in both sandbox modes
Whitelist mode now clears the parent env and re-adds a small allowlist
(identity, terminal, locale, proxy, non-GUI XDG, vendor prefixes).
Blacklist mode strips cloud credentials, backup passphrases, dangling
socket pointers, and anything matching *_TOKEN, *_SECRET, *_PASSWORD,
*_PASSPHRASE, *_API_KEY, *_PRIVATE_KEY, *_CLIENT_SECRET; vendor prefix
carve-outs keep ANTHROPIC_API_KEY and friends.

Users can override via --setenv KEY=VALUE and --unsetenv KEY (and the
corresponding TOML keys), or opt out of the built-in policy entirely
with --no-env-filter.
2026-04-08 09:22:11 +02:00
12644ae31e Apply a seccomp-BPF syscall allowlist by default
Derived from Podman's default profile, stripped of capability-conditional
rules (we never grant capabilities), argument filters, and the explicit
EPERM block. Dangerous syscalls (mount, unshare, ptrace, bpf,
perf_event_open, io_uring_*, keyctl, kexec_*, ...) fall through to the
default ENOSYS action, which also keeps glibc's clone3 -> clone fallback
working. x86_64 and aarch64 are supported; other archs error out.

Toggle with --seccomp / --no-seccomp or seccomp = <bool> in config.
2026-04-08 08:34:34 +02:00
5f3b139457 Drop redundant trim() before split_whitespace()
split_whitespace already skips leading and trailing whitespace, so the
trim() call is redundant and trips clippy::trim_split_whitespace.
2026-04-08 00:23:15 +02:00
8010e9102e Allow disabling boolean flags from the CLI
Pair --hardened, --dry-run, and --unshare-net (renamed from --no-net)
with negation counterparts so a CLI invocation can override a truthy
config-file or profile value.
2026-04-08 00:22:50 +02:00
17f0e84005 Allow setting entrypoint from CLI 2026-04-07 18:02:03 +02:00
83bd4305c7 Bind symlinked rw/ro paths at the user-written destination
Canonicalizing rw/ro paths in the config layer resolved symlinks before
the sandbox was built, so a symlinked entry only appeared at its
target's location -- never at the path the user wrote. Stop
canonicalizing rw/ro at the config layer and instead resolve only the
source side of the bind in sandbox.rs.
2026-04-07 17:45:38 +02:00
062ddab5f8 Add entrypoint option 2026-04-04 10:16:57 +02:00
8ecba5d6dc Add option to pass through arguments to brwap, use shlex for dry-run 2026-04-04 08:51:08 +02:00
8958f79ece Document and expand test coverage of config file feature 2026-04-04 08:51:08 +02:00
db60fb9ddb Reject unknown config keys 2026-04-01 23:51:47 +02:00
c7c4c673cb Add mask option to hide paths/files from sandbox 2026-04-01 23:19:08 +02:00
0119834d5a Implement config file parsing and precedence with CLI 2026-03-31 01:22:08 +02:00
f1d7a14b8d Ensure root filesystem is always read-only inside sandbox
Whitelist mode's implicit bwrap root was a writable tmpfs, letting the
sandboxed process create files and directories anywhere not covered by
an explicit ro mount. This was not an issue in blacklist mode due to
--ro-bind / / covering that case.

This patch adds --remount-ro / before any other mount to make the base
layer read-only in both modes.
2026-03-29 16:50:59 +02:00
99f9395c10 Move require_run_user to lib.rs and make blacklist module private 2026-03-25 23:54:35 +01:00
d79563d948 Add integration test for /dev/input/ being hidden in blacklist mode 2026-03-25 23:02:24 +01:00
82f84247f1 Rework handling of /run and ${RUNUSER} in blacklist mode 2026-03-25 22:48:39 +01:00
0bd91ffad2 Add /sys to whitelist mode 2026-03-25 22:22:35 +01:00
dccf2309a5 Add --new-session to bwrap invocation 2026-03-25 22:15:21 +01:00
ada9da7ae7 Reject empty HOME envvar 2026-03-20 21:43:08 +01:00
4112288a30 Ensure passing relative paths to CLI works 2026-03-20 21:36:55 +01:00
94535b20d3 Fix blacklist bind mount order 2026-03-20 21:02:48 +01:00
ba885b7dd6 Ensure test file is cleaned up in cwd_is_writable test case 2026-03-20 18:52:03 +01:00
bf53d92d49 Initial commit 2026-03-20 18:40:08 +01:00