v0.1.0
v0.1.0
First release. Linux (amd64) is the enforced platform; arm64 and macOS are not
yet supported.
Enforcement
- Deny-by-default filesystem: only manifest-granted paths are visible inside the
sandbox. Reads are bound read-only, writes are bound per-directory (so
save-via-rename keeps working), and the sandbox root is remounted read-only. - Egress denied by default via an unshared, empty network namespace. Declared
host:portrules are routed through a host-side HTTP CONNECT proxy reached
over an isolated unix socket, with hostname validation and IP pin checks. - Subprocess execution blocked by a seccomp filter.
exec: none-strict
additionally blocksfork/cloneon amd64. - Memory, CPU, and PID limits enforced through a transient systemd scope on
cgroup v2 controllers. - Landlock rules applied as a best-effort second filesystem layer behind the
mount namespace.
Shielded by default
A mandatory denylist covers these even under a broad grant such as read: ~,
and covers paths that do not exist yet so a sandboxed program cannot create
them:
- Credentials and secret stores: SSH keys, cloud CLI tokens, GPG keyrings, OS
keyrings, crypto wallets, environment-relocated secret directories, and shell
histories. - Persistence vectors:
.git/hooks,.vscode,.idea, and shell startup files
such as.bashrcand.zshrc. - Host control sockets under
/runand/var/run- the Docker daemon socket,
gpg-agent, the session bus, and similar.
The shields anchor on both $HOME and the running uid's passwd entry, so a
caller-chosen environment cannot relocate them off the real credential stores:
under HOME=/ those stay shielded rather than the shields moving to /.ssh,
/.aws and so on. Two limits: where the uid has no passwd entry at all (an
LDAP host whose module is not loaded, an unmapped container uid) $HOME is the
only anchor left, and the passwd lookup must not route through libc NSS, which
LD_PRELOAD would put back under the caller's control - the shipped build is
static and tagged osusergo, which keeps it in pure Go. $HOME still decides
where a ~ grant points and which spellings count as a deliberate shield
opt-in; see the threat model.
A write grant that covers a shielded path is refused outright - including a
grant above a home directory that is itself a symlink, where the shield's
resolved location leaves the granted tree while the symlink inside it stays
writable. A read grant naming an exact shield path is honored as a deliberate,
warned exception.
make audit checks the denylist against upstream firejail reference definitions.
Workflow
bento profileobserves a program under default-deny and drafts a manifest.
It reads syscall registers via ptrace rather than opening host files, so a
hostile program cannot use profiling to probe secrets. Egress is recorded but
still blocked.- Manifest paths resolve against the manifest's own directory, and a leading
~
expands to the invoking user's home - so aread: "~"grant means home and is
shielded accordingly, rather than naming a file beside the manifest. Another
user's home (~operator/...) is refused rather than guessed at. Because the
fingerprint attests the manifest as written, a~grant resolves against
$HOMEat run time; see the threat model. bento validateparses a manifest, rejects malformed fields, and prints the
requested permissions and resource limits (--jsonfor machine output). Under
each grant it also prints what that grant lands on for the host it is run on,
following symlinks as well as~and relative prefixes, so a reviewer can see
what the grant reaches before approving it - a~grant whose.sshis a link
elsewhere would otherwise read as a path under$HOME.--jsoncarries the
same answer asresolved_read/resolved_write, andrun --jsoncarries
shielded_grant_targetsfor an opted-in shield, so a CI gate reads what the
human summary shows rather than the spelling alone. The literalread/write
are unchanged: they are what the fingerprint attests.- The refusals a manifest can earn without consulting the host are raised by
validateandapprove, not left forrun: a~operator/...path, and a
write grant of the home directory itself (whatever$HOMEis, the credential
stores sit inside it, so such a grant would make their parent writable). Both
were already refused at run, so on an ordinary host the gate simply moved
earlier. The one manifest this newly stops iswrite: ["~/.."]on a host
whose home directory is itself a symlink, which the enforcer accepted and
should not have. The same grant spelled absolutely (write: /home/u) still
needs$HOMEto recognize and is still refused at run. bento approvestamps a fingerprint over the policy fields.bento run
refuses an unapproved or since-edited manifest unless--allow-unapprovedis
passed, and re-checks the fingerprint at run time rather than trusting an
earliervalidate.bento doctorreports which isolation layers this kernel actually enforces.
No quiet degradation
When a hardening layer is unavailable, Bento reports the shortfall instead of
falling back silently, and --strict makes bento run refuse to execute under
degraded enforcement.
Embedding
The Go API (backend, enforce, manifest, policy) is importable for
in-process enforcement, including a NetworkGate callback that lets a host
application decide undeclared egress at connect time. See examples/embed and
examples/supervise. Pre-1.0, this API may change between minor versions.
Changelog
- 29092f3: Revert "feat(linux): enforce resource limits in the degraded tier via a systemd scope" (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bb9d30a: bd init: initialize beads issue tracking (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1c092d0: build(lint): add golangci-lint config and make lint (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 560383a: build(lint): narrow the manifest test exclusions to their rules (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0465c15: build(release): add goreleaser with commit-derived stamps (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1408aae: build: fail the repro check when it cannot hash (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 17dbe20: build: make the binary reproducible and add vuln/repro gates (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0257bf3: c (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f64ed61: ci(release): build, sign and publish on tag (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8530522: ci(release): give the gate its sandbox host deps (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 26f166a: ci(release): pin cosign-installer to v4.1.2 (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e9e7b3e: ci(release): probe sandbox preconditions before the gate (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fdbb85c: denylist(audit): classify credential stores by name (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3318075: denylist(audit): extend classifier to mail, remote, wallet stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a37454b: denylist(audit): fix shield kinds, close mail and chat gaps (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f859df5: denylist(audit): hide X11-login and systemd persistence trees (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ce49561: denylist(audit): parse blacklist-nolog, hide nvim trees (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6f8ffd7: denylist(audit): shield WM/session and editor-init persistence surfaces (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bd14e7b: denylist(audit): shield browser profile stores and clipboard/REPL history (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0c2ede6: denylist(audit): shield mail stores, X cookie, crypto socket; review keyfile globs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 43d6bed: denylist(linux): drop stale nvim example from shield doc (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4d1e870: examples(probe): add a sandbox probe script and manifests (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ef9e33b: feat(audit): add AppArmor abstractions as a second corpus (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 505cbd4: feat(audit): add a volume floor and list the discarded gaps (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d253117: feat(authoring): manifest approval fingerprint, bento approve, validate --strict (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 89ba755: feat(backend): public re-exec dispatch for library embed (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 41d03f8: feat(bento): check manifest ownership and location trust (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 77701a1: feat(cli): add run, doctor and validate commands (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a38d1c1: feat(degraded): block ptrace/process_vm/pidfd_getfd cross-process reach (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a6dddac: feat(degraded): enforce resource limits via systemd scope (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 734aebd: feat(degraded): no-bwrap launcher under Landlock-only confinement (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dafceb3: feat(degraded): report exposed shields the tier cannot apply (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 67c7d02: feat(degraded): sweep a leaked process group on run teardown (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 936a8a4: feat(denylist): DenyAll shield nvim shada and undo stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a2879fa: feat(denylist): accept acknowledged credential aliases under a tree (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b12cbdb: feat(denylist): also shield nvim swap and backup stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- aa3db17: feat(denylist): firejail cross-reference gap audit (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 42e50d7: feat(denylist): follow PIP_CONFIG_FILE and MAILCAPS relocators (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- eb6a98d: feat(denylist): follow psql/sqlite/screen/R startup+history relocators (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 59e62ed: feat(denylist): follow python-startup and tool history env relocators (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1d490b3: feat(denylist): hide .Renviron and its relocations as readable secrets (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 452b824: feat(denylist): honor explicit exact-path grants over shields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 94e1f23: feat(denylist): kind-sensitive DenyAll shield for .cert/.mail (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2832289: feat(denylist): refuse credential aliases in granted trees (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 739fc59: feat(denylist): scope audit to secret/exec sections (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6371192: feat(denylist): shield OS keyrings, browser profiles, more cloud creds (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6d256af: feat(denylist): shield credential and PATH targets firejail omits (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 43e1a22: feat(denylist): shield crypto vaults, history, and remote-trust files (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9303129: feat(denylist): shield legacy pre-0.8 nvim data-dir stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4bc4b9f: feat(denylist): shield more home config/secret paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 73a78cb: feat(denylist): shield mysql, pam, and pip config files (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8f0a788: feat(denylist): shield sibling env relocators of persistence/credential files (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0ae35b7: feat(denylist): shield startup/exec configs and named history files (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b54a75d: feat(denylist): shield the Electron messenger stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2f022b2: feat(denylist): shield thumbnailers, upstart jobs, legacy stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 095ba98: feat(denylist): shield tier-2 credential stores and PATH plant targets (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9553d3a: feat(denylist/audit): completeness gate against firejail with exclusions (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c73534b: feat(doctor): exit non-zero on a core shortfall (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 51a6cb5: feat(egress): explain proxy-bypass failures, add NO_PROXY (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3b489da: feat(enforce): add Enforcer seam and run orchestration (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c7ff1b0: feat(enforce): add network-gate seam (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3166f57: feat(enforce): audit log of shields a run engaged (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3665b52: feat(enforce): select the degraded tier when the filesystem layer is degraded (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a0874b2: feat(enforce): warn on hardlinked credential shields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9e3f393: feat(exec): enforce none-strict fork/clone blocking (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d8d8d3e: feat(json): name what a grant reaches in the machine envelopes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 7393136: feat(landlock): add Landlock filesystem backstop behind bwrap (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 88601f2: feat(limits): enforce resource limits via transient systemd scope (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 39a6964: feat(linux): bubblewrap enforcer with mandatory deny-list (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5709d6b: feat(linux): enforce resource limits in the degraded tier via a systemd scope (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 810b515: feat(linux): wire per-host egress via namespace fence and proxy (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e6575c4: feat(manifest): parse YAML via goccy with strict rejection (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f7823ec: feat(observe): decode openat2 for file-access observation (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0dafdd8: feat(observe): ptrace observer for filesystem access and exec (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bad48c4: feat(observe): record successful path-existence probes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bd60ea6: feat(observe): record unix connect targets (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9792e6c: feat(policy): add egress allowlist matcher (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2cf489d: feat(policy): validated permission model and loader (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 54d54a0: feat(probe): report filesystem Degraded under Landlock-only, not Unavailable (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a7bb9a3: feat(profile): caller-supplied deny paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 428a9ad: feat(profile): cap convergence rounds to prevent non-convergent spin (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fb7da89: feat(profile): default-deny-record profiling with empty-overlay home (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 15ded64: feat(profile): interactive grant-convergence loop for default-deny (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 89d3e22: feat(profile): record egress without forwarding it by default (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 58fdba6: feat(profile): resume convergence from an approved manifest (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 19611ea: feat(profile): synthesize a manifest from an observed run (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1443d71: feat(profile): warn on an abnormal profiled run (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 87dbe1c: feat(proxy): host-side CONNECT proxy enforcing the allowlist (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8946c5b: feat(run): gate execution on manifest approval (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 64f9016: feat(seccomp): add BlockEgress to deny IP socket creation in degraded mode (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b422418: feat(seccomp): block subprocesses by default via exec-block filter (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 65ad929: feat(supervise): add perms list|forget|reset to edit the store (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5271cb4: feat(supervise): colorize the interactive grant prompts (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c884adc: feat(supervise): default-deny trial, keep store shield (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6f7b2a5: feat(supervise): explain a trial refused by store overlap (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c114873: feat(supervise): export/import the store as a bento manifest (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9e2b7dc: feat(supervise): global read/write/exec rules and g/G choices (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 734c195: feat(supervise): permission store with per-app memory (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d3b3f88: feat(supervise): trim the approval prompt to y/n/o, block-everywhere at the gate (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d289ad6: feat(supervise): warn on store vs manifest drift (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a091851: feat(validate): show what a grant resolves to on this host (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b046d17: fix(approve): clamp the mode on an already-stamped manifest (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- cce0dea: fix(approve): write at the location the trust check read (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b43b740: fix(audit): fail on a permanent fetch failure, not skip (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dc7fd00: fix(audit): fetch disable-programs and fail on a named-but-absent dir (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f0ae455: fix(audit): give content refusal its own exit status (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5162aa1: fix(audit): harden non-internal packages against fail-opens (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- eb87af2: fix(audit): make each profile sentinel identify one file (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c9fabed: fix(bento): add doctor json readiness field, reject negated audit headers, resolve symlinked-home shields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 930d805: fix(bento): check every directory leading to a manifest (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 35a6660: fix(bento): inspect the manifest path as given, not just resolved (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6f0c412: fix(bento): refuse a manifest with no location on disk (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fa266f2: fix(bento): take the manifest's location from the kernel (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 693f42e: fix(cli): clean --json output, distinct exit codes, shield conflicts (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c6d5975: fix(cmd): report refusals, partial profiles, and stamp atomically (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 552d536: fix(cmd/bento): gate doctor exit only on baseline layers every manifest needs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1df9b2d: fix(cmd/bento): preserve script exit code on json encode failure and refuse clobbering a corrupt --out (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bd37cc3: fix(degraded): block TIOCSTI, disclose truncate gap (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 10b41ce: fix(degraded): block process_madvise and disclose the tty/sweep caveats (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 294ed7c: fix(degraded): grant the interpreter prefix Landlock needs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 92839e4: fix(degraded): map signal-killed target to 128+signal (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 45f6656: fix(degraded): prepare write grants like the full tier (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 26fe829: fix(degraded): scope exposed-shield audit to the tier's real exposure (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1ab3d3d: fix(denylist): anchor relocated credential stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ac496ac: fix(denylist): anchor the legacy wallet layout, pin the device filter (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- de2bd49: fix(denylist): correct device pruning, bind identity, anchor set (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4567856: fix(denylist): correct python history name and drop abort-risk shields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 49c3d3a: fix(denylist): drop relocated cred-file entries under their default store (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4e7e4b1: fix(denylist): find binds above the grant, classify anchors at source (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f966c27: fix(denylist): guard relocation shields against DenyAll collision (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3a4a5aa: fix(denylist): hide the podman auth store, not just its writes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 73a74ad: fix(denylist): keep the passwd home anchor out of caller reach (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4b5fae8: fix(denylist): refuse an acknowledgement wide enough to be an off-switch (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bef9ce3: fix(denylist): refuse writes under a DenyWrite shield (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b53f474: fix(denylist): require absolute home and XDG paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 299bb3d: fix(denylist): scope shield opt-in to reads and built-in shields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5652ed5: fix(denylist): share the home anchors across the profiler and enforcer (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 176f531: fix(denylist): shield ZDOTDIR and GIT_CONFIG_GLOBAL relocations (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f97d4f2: fix(denylist): shield credential stores at relocated XDG base dirs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fae0287: fix(denylist): shield host runtime sockets from read grants (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6381ace: fix(denylist): shield more home startup configs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6732e89: fix(denylist): shield relocated KUBECONFIG and AWS_* credential files (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 73a018f: fix(denylist): shield relocated credential directories (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 879dd07: fix(denylist): shield shell histories, correct audit exclusions and globs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0392742: fix(denylist): shield the XDG git config twin (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1c0dcae: fix(denylist): shield whole editor config dirs and more credential stores (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0ff8338: fix(denylist): shield ~/.bashrc.d against home-write host code execution (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dc9f6ed: fix(denylist): stop a home-swallowing relocation nulling the gate (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2b556f9: fix(denylist): suggest the shared tree, never an off-switch (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e3609ed: fix(denylist): walk the alias anchors instead of filtering rules (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4ebaa5c: fix(denylist-audit): attribute firejail sections to the block header, not the last comment (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ac52b9e: fix(denylist-audit): let an in-scope header override a leading note (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 919336d: fix(denylist/audit): hard-fail unreviewed globs, note reviewed ones (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8abd395: fix(egress): preserve buffered bytes, half-close tunnels, extract launcher (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 7559176: fix(egress): warn on loopback allowlist, correct NO_PROXY rationale (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a2f9188: fix(embed): anchor the manifest's paths to its own directory (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 087f5f5: fix(embed): surface every result-honesty field (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a6f98c2: fix(enforce): carve DenyAll holes inside a shielded DenyWrite tree (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- aac7ece: fix(enforce): carve nested stores under file-rules pointed at dirs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ce2081e: fix(enforce): refuse a nil policy in ResolveEnv (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 44a1a32: fix(enforce): require the network layer for a gated run (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9238f28: fix(enforce): resolve $HOME symlink in hardlink scope filter (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0e5fdbb: fix(enforce): scope hardlink warning to home creds, dedup (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e2804f1: fix(enforce): surface backend run-time report refinements (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d257a1a: fix(enforce): synthesize absent cpu-limit layer and keep report overlay monotonic (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 37a9109: fix(examples): prompt on the tty, not the target's stderr (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 869338e: fix(examples): quote gate-admitted hosts in the summary (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 72c2abe: fix(exec): report none-strict as degraded (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4c36873: fix(fs): refuse write grants above shielded paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 419f9d6: fix(fs): remove directory shield artifacts after a run (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- eb31ae1: fix(landlock): detect availability via syscall, not /sys parse (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d6d1e1a: fix(landlock): disclose the ioctl_dev residual and resolve device paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a406be6: fix(landlock): floor the availability gate to the enforced ABI (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- da5e682: fix(landlock): mirror go-landlock errata downgrade in the ABI gate (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e2c2553: fix(landlock): route a file rule for a file path (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0a0e0ae: fix(launcher): allowlist stdio socket families and scope to no-egress (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dc08c22: fix(launcher): drop inherited fds before the target runs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 94e6b71: fix(launcher): gate execveat on bridge readiness to close the ptrace-hijack startup race (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6556f4a: fix(launcher): mark the egress bridge non-dumpable to block ptrace-hijack (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6b0d2c5: fix(launcher): panic on StrictBlock without Block (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 13bef3e: fix(launcher): refuse an inherited network socket on stdio (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8a00b98: fix(launcher): require absolute target in supervise path (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 21a9111: fix(launcher): rewind and validate the observation report fd (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fcf5a72: fix(limits): --collect so failed scope units don't leak (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- cd811ad: fix(limits): fail closed when cgroup delegation is unknown (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8d80d17: fix(limits): fail closed when the unified cgroup path is absent (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f69c8c8: fix(limits): measure cgroup delegation from a probe scope, not a fixed path (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9542498: fix(limits): preflight scope, refuse unenforceable requested limits (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f589eea: fix(limits): refuse an undelegated cpu limit (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e315bb6: fix(linux): anchor shields on passwd home as well as $HOME (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e273775: fix(linux): apply grant-safety checks in the degraded tier (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- aee0df6: fix(linux): close the root-user and no-home prefix holes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 810f178: fix(linux): correct the netns egress claim for AF_UNIX (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b8af66c: fix(linux): decide every refusal before touching the host (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bb4f566: fix(linux): default the cpu-limit probe state to unavailable (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 49996e3: fix(linux): derive probe namespace flags from run (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a787161: fix(linux): expand read "/" when skipping grant symlinks (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5d45116: fix(linux): floor the interpreter prefix at a broad tree (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fb440e9: fix(linux): make sandbox-created paths owner-only (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 86b4085: fix(linux): never bind $HOME as an interpreter prefix (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e09262f: fix(linux): never sweep a process group for a zero pid (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4b66ce7: fix(linux): probe the full sandbox flag set so unsupported flags refuse at admission (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2e0091e: fix(linux): proceed-degraded on exec-block gap when seccomp is absent (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2d40a46: fix(linux): re-bind the interpreter read-only after write grants (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4e57e92: fix(linux): recreate granted symlinks inside the sandbox (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ad86594: fix(linux): recreate the missing hop of a granted symlink chain (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- cddf885: fix(linux): refuse a grant whose symlinks loop (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 937ddc6: fix(linux): refuse a write grant above a symlinked home (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ccd2a5b: fix(linux): refuse a write grant whose workspace shield a symlink redirects (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- db86540: fix(linux): refuse grants resolving into a process's procfs dir (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d6c4300: fix(linux): refuse grants that overmount managed pseudo-filesystems (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f4b6814: fix(linux): refuse to profile without an observation backend (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a9f05e4: fix(linux): report degraded tier unavailable when its seccomp fences cannot install (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f69c794: fix(linux): report resource limits unavailable on the degraded tier (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ece6bbd: fix(linux): resolve chain hops through symlinked parents (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 50fdea0: fix(linux): resolve grants through the sandbox seam (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ec31bd2: fix(linux): resolve home before the interpreter-prefix floor (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a1a622f: fix(linux): resolve interpreter for env -S shebangs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 52d0d6d: fix(linux): shield deny paths exposed by interpreter prefix (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2bc8c62: fix(linux): shield submodule and worktree git dirs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 24d792d: fix(linux): skip grant symlinks that a mount already fills (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 20e04a8: fix(linux): validate the policy in the enforcer entry point (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 85f898c: fix(manifest): absolutize Resolve's anchor and refuse a nil policy (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8179234: fix(manifest): expand ~ in grants and paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 70132fb: fix(manifest): reject tags, anchors and aliases before decode (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6e99f95: fix(manifest): sanitize parse errors, reject non-text input (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d0e58a4: fix(manifest): screen $HOME before it reaches a policy path (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ba5f3c6: fix(manifest): strip C1 controls from parse errors too (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0c24177: fix(manifest): validate and screen on the Marshal side (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a929376: fix(observe): anchor openat dirfd paths and count only execve (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6903bce: fix(observe): block io_uring for complete profiling (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3286830: fix(observe): check syscall ABI and fix drop dedup (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0b84ba4: fix(observe): clamp openat2 RESOLVE_IN_ROOT paths at the dirfd (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4726fdb: fix(observe): count each lost access once and name the kill honestly (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 24a020c: fix(observe): drain-reap tracees so a multithreaded descendant can't deadlock (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fff36ac: fix(observe): drop unresolvable dirfd opens instead of mis-anchoring (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 97cbd8b: fix(observe): drop x32 syscalls instead of ignoring them (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c2ad90e: fix(observe): forward signals to the traced target (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c8bff0e: fix(observe): honor openat2 open_how.resolve so dirfd-rooted paths are not mis-attributed (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4ae4c8d: fix(observe): reap descendant tracees on a failed trace (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 7b0d09e: fix(observe): reap descendants on clean exit, track them at fork (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 075de8d: fix(observe): reap ptrace child on early-error return (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6bfdc8f: fix(observe): record chown/utime/xattr metadata writes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- eb69340: fix(observe): record mknod/unix-bind and anchor openat2 fallback (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 434a7bb: fix(observe): record path-modifying syscalls (rename, truncate, mkdir, unlink, link, symlink) (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f21b634: fix(observe): report accesses the observer could not name (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6fdae41: fix(observe): serialize Trace and join its output copiers (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 865ac21: fix(observe): sort accesses on the dedup key (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0b5c8c6: fix(policy): fingerprint an omitted exec mode as none (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3eddab2: fix(policy): match systemd's permyriad bound on cpu quota (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9201a78: fix(policy): match uppercase suffix-wildcard host rules (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a26cad6: fix(policy): name the above-home case in the write refusal (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 113766a: fix(policy): refuse a home write grant at the validate gate (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6caaf80: fix(policy): refuse a ~user grant at the validate gate (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 938953e: fix(policy): reject a rule port that is not plain decimal (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ef37609: fix(policy): reject bidi-override characters in path and arg fields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6e1a9e6: fix(policy): reject control characters in path and arg fields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f40e988: fix(policy): reject soft hyphen and invisible math operators (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 07c7e72: fix(policy): reject the empty-string path grant (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2d9ba69: fix(policy): reject undecodable bytes in the field screen (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8043acb: fix(policy): reject zero-width and invisible characters in path fields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d4e673e: fix(policy): report the control codepoint, not its lead byte (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 275b8ef: fix(policy): screen invisible runes by Unicode property (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 787c845: fix(policy): screen the Unicode line separators (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dfe1be1: fix(policy): tighten limit spellings and dead host rules (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5725265: fix(policy,enforce): guard nil policy and nil env lookup (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6dacce7: fix(probe): network unavailable when userns blocked (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 24fd41a: fix(probe): resolve the userns canary on PATH (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1e6ab24: fix(profile): anchor relative opens at real cwd, drop procfs symlinks (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a1e775e: fix(profile): bind the launcher binary for exec:all no-network profiling (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6706a72: fix(profile): clamp over-broad read grants from the proposal (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8e35e5b: fix(profile): clamp over-broad write proposals and refuse write:/ (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 45d7f5f: fix(profile): classify deny-path shield by resolved target (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4a9cc46: fix(profile): drop observations a manifest cannot hold (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dece13c: fix(profile): drop proposed grants inside a mandatory shield (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 76174d3: fix(profile): drop runtime writes before the dir collapse (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d313b93: fix(profile): drop runtime-dir grants the run would refuse (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9304530: fix(profile): drop the runtime install root itself (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0e1e2f6: fix(profile): drop the runtime tree by its unresolved name too (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2cbca1f: fix(profile): fail loudly when the observer never ran, via a report marker (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8cccd7b: fix(profile): floor writes to every system tree, resolved (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 621a794: fix(profile): gate exec on consent and detect a real tty (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e6dc4e8: fix(profile): harden allow-network proxy against NAT64 SSRF (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 21338d5: fix(profile): harden broad-home check and correct profiling docs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 98abfa0: fix(profile): hold a declined seed refusal in the manifest (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6806aa6: fix(profile): hold the exec answer against the merge (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 00ba7b3: fix(profile): match a symlinked write shield by target (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f667834: fix(profile): observe via inherited FD, not a bind (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a007f0b: fix(profile): prompt for risky seeded grants (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- aa7671b: fix(profile): prompt foreign-home shielded paths even under all-accept (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 28e90a9: fix(profile): quote report paths and always write last to defeat forgery (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1bc2025: fix(profile): refuse a run the foreign-ABI guard killed (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5807480: fix(profile): refuse to synthesize from a seccomp-killed run (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6b180c2: fix(profile): report withheld observations at grant granularity (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1125f6a: fix(profile): resolve write floors the way the backend binds (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 7526bf3: fix(profile): run a limited policy under its cgroup scope (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2438cbf: fix(profile): scope manifest resume to its own script (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5f8cc04: fix(profile): stop dropping sensitive reads under broad runtime trees and /etc siblings (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3dc1789: fix(profile): stop granting host /tmp and drop tmp scratch from proposals (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 86682f7: fix(profile): stop recording proxy before reading hosts (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9b804b7: fix(profile): surface a shielded read before deduping it under a broad write (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bbb6c39: fix(profile): warn on grants reaching a foreign home's shields (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 46a7964: fix(profile): write its manifest through the checked path (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6ff8d5d: fix(profile): write the report marker last so it proves completeness (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3d2c718: fix(proxy): block IPv6 zone-id egress guard bypass (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 16d9c3e: fix(proxy): block loopback egress even if ruled (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- eece30b: fix(proxy): bound the upstream dial and cover half-close (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ab5b1ed: fix(proxy): cap request read, guard resolved IPs (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3f778ee: fix(proxy): classify deprecated IPv6 site-local fec0::/10 (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a6680f3: fix(proxy): classify reserved IPv4 ranges as host-reserved (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2019613: fix(proxy): close NAT64 custom-prefix SSRF via RFC 7050 (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6c59918: fix(proxy): fix tunnel idle timeout and ctx cancel (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 463a2e1: fix(proxy): pin the pure-Go DNS resolver (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 91e5955: fix(proxy): refuse a second Serve on the same Proxy (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 60b809e: fix(proxy): reject a CONNECT target carrying a control byte (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fb71e79: fix(proxy): reject a non-canonical CONNECT port (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 319895a: fix(proxy): report a dead listener and refused connections (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- b875129: fix(proxy): screen the CONNECT target for deceiving runes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 7801728: fix(proxy): tie the private-IP exemption to the CONNECT target (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 89f4050: fix(release): sign with a cosign bundle (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5f7689f: fix(report): judge the applied report against the request (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 447d8ed: fix(report): prove enforcement from the sandboxed child (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bb2072f: fix(report): resolve opted-in grant targets where they are bound (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- bb2cebe: fix(run): always run under the launcher-init so PID 1 reaps zombies (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 923532e: fix(run): follow dangling deny-list symlinks to shield their target (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- de11f0f: fix(run): make write grants directory-granular so new-file writes persist (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3426145: fix(run): move the strict shortfall code out of the shell's band (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- cd7faa3: fix(run): parse the manifest once so approved bytes are the executed bytes (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a8f96d4: fix(run): remount sandbox root read-only so writes match the Landlock set (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ad4d14b: fix(run): resolve dangling symlinks via kernel-accurate leaf following (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e62d6d7: fix(run): resolve deny-list paths so symlinked shields are not bypassed (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fbee461: fix(run): resolve symlink-before-.. in dangling targets by component walk (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d1e6c2a: fix(run): shield symlinked deny-list dotfiles at their resolved target (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e609e59: fix(seccomp): block io_uring in the egress filter to close the socket bypass (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 95a5a3d: fix(seccomp): block move_pages and get_robust_list oracles (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c2b58cc: fix(seccomp): close TSYNC fail-open with ESRCH flag (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a963a1c: fix(seccomp): enforce the absolute argv[0] Exec documents (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 5ffcc7a: fix(seccomp): guard the profiling filter against a foreign ABI (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- af11aaf: fix(seccomp): install library filters without TSYNC_ESRCH (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a2303db: fix(seccomp): kill foreign-arch syscalls so i386 int 0x80 cannot bypass the filters (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6cbe3ae: fix(shield): stop a read opt-in exposing a write grant (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 90c2441: fix(supervise): a deny survives the concurrent-merge fold (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 37846de: fix(supervise): absolutize the manifest path before anchoring (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4047abf: fix(supervise): admit a stored allow without the terminal (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0889052: fix(supervise): anchor imported manifest paths (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a89848f: fix(supervise): backstop store shield, exit on lost deny, color kind labels (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- a373593: fix(supervise): cover a read-deny at the exact path of a write-allow (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9561dfc: fix(supervise): drain stale input, narrow scratch filter (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 69cf2bc: fix(supervise): drop null app entries from the store (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- eb197c6: fix(supervise): export global network allows so the manifest is self-contained (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 72cca1b: fix(supervise): fold manifest write grants into drift read coverage (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 77db9af: fix(supervise): judge relative grants against the store dir (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 0ded49b: fix(supervise): let a second Ctrl-C reach the kernel (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 23d5435: fix(supervise): make the permission store fail closed (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- da94059: fix(supervise): note lost-deny exit, tidy kindLabel doc and test (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6656e86: fix(supervise): quote paths, merge-on-save, guard appKey (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ab70467: fix(supervise): refuse to export a relative grant (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c610bbe: fix(supervise): resolve store paths that do not exist yet (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- dc632d7: fix(supervise): shield the store on perms export (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 52f1322: fix(supervise): treat a write-allow as read coverage for a sub-deny (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e63e8c4: fix(supervise): unwind Ctrl-C and free the gate lock (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f158a6c: fix(supervise): warn on a global sub-deny under an approved allow (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c51daad: fix(test): skip foreign-ABI tests without ia32 emulation (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9615dcd: fix(trust): gate the link check on who can write its directory (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- e7f9a8e: fix(trust): grant sticky dirs the same ACL exemption (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 44eadd4: fix(trust): judge the owner of every symlink on the path (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ef1dbbb: fix(trust): name the missing /proc mount in the error (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f86a6b1: fix(trust): read ACLs and setgid, not just mode bits (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 2736104: fix(trust): walk a new manifest's path instead of cleaning it (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 296b46e: fix(trust): walk the path hop by hop with descriptors (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- d839305: fix(validate): follow symlinks when showing where a grant lands (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9c4ebc8: fix(validate): honor --strict and resolve the interpreter (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c065e45: fix(validate): show resource limits in the summary and --json output (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6432909: fix: restore the gitignore and internal-import guards (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 4087d2c: harden(egress): cap proxy concurrency, idle-timeout the bridge (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 735b4ec: harden(enforce): treat a missing required layer as unavailable; make bento's proxy env authoritative (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9e05d4b: harden(landlock): derive writable set from bwrap binds, backstop best-effort (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- aa894ad: harden(launcher): make the supervisor non-dumpable (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 7db4837: harden(launcher): reap orphaned grandchildren as sandbox PID 1 (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- ed1c049: harden(limits): report undelegated controllers as not enforced (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 844b0ab: harden(limits,proxy): gate limits on critical controllers, proxy read timeout (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- c7a8023: harden(linux): drop the capability bounding set in the sandbox (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 386820a: harden: close low audit cluster 3 (net-sort determinism, multi-doc reject, backend tests) (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- cf36ad8: harden: close low-severity audit cluster (oracle, IPv6 classify, report, tmpdir, cpu, shields) (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 42500dc: refactor(core): self-validating policy and tiered admission (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 17b7ae8: refactor(policy): hoist the default-ignorable table lookup (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- fab2a91: refactor: drop dead startProxyWith count return (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 6420d14: refactor: hoist domain packages to module top level (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- f895f43: refactor: migrate proxy goroutine management to errgroup and simplify limits test string validation (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 1b37834: refactor: remove v2 suffix (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8f71898: refactor: unexport internal-only policy/enforce helpers (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 9900fb8: refactor: use slices and cmp for sorting and lookup (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 3b926dd: revert: drop always-launcher change; bwrap's init already reaps (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)
- 8d04247: seccomp: correct AF_UNIX residual comment and test process-reach oracles (whiskeyjimbo 15094606+whiskeyjimbo@users.noreply.github.com)