Skip to content

v1.0.0-rc1

Pre-release
Pre-release

Choose a tag to compare

@Strykar Strykar released this 20 Jul 14:00
b4af49e

First 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 the authnft group, which is exactly the
    monitored-subject population, so one managed user could read
    another's claims tag.
  • NSS resolution (getgrnam and friends) runs in the setup child
    before the seccomp filter applies. sss and ldap backends 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=kernel only 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 cgroupv2 match 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: run make test-packet-match on 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.