v1.0.0-rc1
Pre-releaseFirst release candidate for 1.0.0, 77 commits since v0.2.0-alpha. The
interfaces the alpha series hedged on are now frozen: the PAM interface
(exactly two exported symbols), the nftables set schema, the fragment
format and ownership model, the claims_env wire format, the session
JSON schema (v=2), the journald audit fields and the element comment
grammar. See docs/ROADMAP.md.
Security hardening
A full adversarial audit (July 2026) found no attacker-reachable
memory-safety, injection or sandbox-escape defect. The caveats it
raised were fixed:
- Session identity files are root-only. An earlier build made them
group-readable to theauthnftgroup, which is exactly the
monitored-subject population, so one managed user could read
another's claims tag. - NSS resolution (
getgrnamand friends) runs in the setup child
before the seccomp filter applies.sssandldapbackends no
longer risk a SIGSYS kill during login. - The seccomp sandbox applies to a short-lived forked child only; the
calling PAM process is never filtered, and orphaned nftables state is
reaped if the child dies. - A login whose PID recycles onto a leaked session's names reclaims the
stale state instead of locking the user out. - The fragment validator is a brace, quote and comment-aware statement
scanner; semicolon-separated and whitespace-padded statements can no
longer bypass the verb and shared-chain guards. rhost_policy=kernelonly trusts an inbound ESTABLISHED socket whose
local port is a host TCP listener, so an outbound LDAP or Kerberos
socket is never mistaken for the client connection.- When the single-transaction teardown aborts because an object is
already gone, cleanup genuinely falls back to per-object deletes.
Compatibility
- Kernel floor: the
socket cgroupv2match must work on INPUT-hooked
chains, which is commit 05ae2fba821c (mainline v5.18; stable trees
carry it, so Ubuntu 22.04's 5.15 qualifies). Kernels between 5.13 and
5.17 without it fail silently: runmake test-packet-matchon the
target host to drive the real match. - musl libc: the sandbox allowlist covers musl's
open/readv/writev
paths and the unit suite runs against Alpine in CI.
Verification behind this release
Every pull request passes 13 required checks, including the unit suite
under ASan, UBSan and LSan, a container integration tier, a 90 percent
fuzz-coverage floor enforced by deterministic corpus replay, mutation
gates on the validator surfaces, a reproducible-build check and a
linked-library inventory gate. Nightly runs fuzz all eight harnesses
with a persistent corpus, and every commit on main is fuzzed
post-merge. CodeQL, Coverity, scan-build and Scorecard run on schedule.
Documentation
The README now leads with what a session looks like; concepts,
the admin guide (quick start and full configuration reference) and the
roadmap live under docs/,
alongside the integration contracts covering the six stable interfaces.
Plan
This candidate bakes for a week under the nightly fuzz, mutation and
integration runs. 1.0.0 final follows if nothing regresses. A CycloneDX
SBOM for the built module is attached to this release.