Skip to content

TODO: the 1.1.70 bug hunt's remaining findings, verified - #264

Open
click0 wants to merge 1 commit into
mainfrom
claude/analyze-test-coverage-nCOJW
Open

click0 wants to merge 1 commit into
mainfrom
claude/analyze-test-coverage-nCOJW

Conversation

@click0

@click0 click0 commented Nov 6, 2026

Copy link
Copy Markdown
Owner

TODO-only: no code change, no version bump.

I re-read every remaining MED/LOW claim from the bug hunt against f34fe27. The ones that held are recorded with file:line and a priority. Two did not hold and are left out:

  • login.conf being read after jail_attach — this matches jexec -l / login(1), and only rlimits, priority and umask are applied.
  • The lenient jid parse in the fw-lease dispatcher — the verb itself is parsed strictly.

§2 crated privops / HTTP — security

  • MED: a mount_nullfs source that lies above the tenant root passes sourceForeign. A tenant can bind /var/run into its own jail and reach every other tenant's rootfs. trust-model.md says this was closed in 1.1.17.
  • LOW: findOwnerByPath answers from stale rows; byJid / byName don't.
  • LOW, hardening: the ipfw add/delete verbs stay host-wide. The fw lease slot could gate them.

§5 Spec parsing

  • MED: ${VAR:-default} is not supported. As a result:

    • examples/webapp.yml does not parse;
    • postgres.yml hands pkg a literal package name;
    • three stack files keep the text verbatim.

    CI validates only nginx.yml.

  • MED: the .local forbidden-key list can be sidestepped. The parser accepts hyphenated synonyms the list does not check, securelevel sits at the wrong path, a nested duplicate share goes unchecked, and devices / ipc/raw_sockets / zfs/datasets are not listed.

  • LOW: devices: merges by shape, not by device class.

  • LOW: a hostname with a trailing dot is accepted by the spec but refused by privops.

§7 Lifecycle, storage, GUI

  • MED: etc/keep fails on files that already exist in the jail's /etc (hosts, resolv.conf).
  • MED: run/user under a root run keeps HOME=/root and puts the X cookie in /root.
  • MED: the profile cache is rebuilt by mtime only.
  • MED: profile-from-trace treats O_DIRECTORY opens as file reads.
  • MED: crate audit false WARNs: nc without -v, and bpf classed as a host device.
  • MED: backup/export streams are created 0644 and follow symlinks.
  • LOW:
    • replicate can wedge itself (no -F, and it destroys the local snapshot on any error);
    • a signal death loses its signal in the exit code (1 instead of 128+N), and 124 is overloaded;
    • wrap's Exec quoting (latent);
    • LineBuffer's clear (latent);
    • raw non-UTF-8 bytes reach the JSON output.

§11 Build

  • LOW: command paths outside lib/pathnames.h, listed one by one.

Generated by Claude Code

Each claim was re-read against f34fe27; what held is recorded with
file:line and a priority, what did not (login.conf read after
jail_attach, lenient jid in the fw-lease dispatcher) is left out.

- §2: mount_nullfs source above the tenant root (MED); byPath answers
  from stale rows (LOW); ipfw verbs could be gated by the leased slot
  (LOW, hardening).
- §5: `${VAR:-default}` unsupported — webapp.yml / postgres.yml and
  three stack files broken (MED); the `.local` key policy can be
  sidestepped (MED); `devices:` merge by shape, hostname trailing dot
  (LOW).
- §7: etc/keep on existing files, run/user HOME under root, profile
  rebuild by mtime, profile-from-trace and O_DIRECTORY, audit false
  WARNs, backup/export streams 0644 through symlinks (MED); replicate
  wedging, signal exit codes, wrap Exec quoting, LineBuffer, raw
  non-UTF-8 in JSON (LOW).
- §11: command paths outside pathnames.h (LOW).

No code change, no version bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6t6tzVypHye5bDGLxzmZK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants