Releases: stephrobert/pavois
Releases · stephrobert/pavois
Release list
v0.1.1
Immutable
release. Only release title and notes can be modified.
Every artifact of 0.1.0 installed cleanly and could not scan anything. This release makes them work.
The baseline is unchanged: no control moved, so an 0.1.0 report stays comparable to an 0.1.1 one.
Fixed
- A released binary could not find its own rules. The corpus was genuinely compiled in, and the
lookup asked the filesystem:os.Stat(<root>/profiles/linux/<os>). Inside a git checkout that is
true and everything worked. Anywhere else it is always false, so no candidate was produced, the
embedded fallback was never reached, and every packaged install answeredno bundled profile for debian 12.15.pavois profilesprinted an empty list for the same reason, which reads as "this
tool has no rules" rather than as a bug. The lookup now consults the embedded corpus as well as
the disk, andpavois profilesmerges both. - Installing the packages no longer leaves the scan engine unsaid. CINC Auditor is a runtime
dependency that no package manager can fetch, because it is in no distribution repository. It
could not be declared, so it was not mentioned at all, and the first scan failing withno native CINC engine foundwas reported as missing dependencies. The packages now print the omnitruck
command and point atpavois doctorat install time.
Testing
Nothing caught the profile defect because everything ran from the repository: the unit tests, the
validation campaigns, the preflight. Three guards now cover the gap, cheapest first.
tools/release/standalone_binary.shruns the built binary from an empty directory with no
profiles/above it, and fails if the corpus is invisible or no scan grades. Two seconds, and it
fails on the published 0.1.0 binary.- The preflight extracts the binary from the .deb it just built and runs that same check on it,
so the chain is closed end to end rather than at the packaging step. tools/release/install_matrix.shinstalls the real packages on a fresh VM of five distributions,
one at a time, and asserts what a first-time user meets: the manager accepts the package, the
binary is static, the embedded corpus is listed, and a scan resolves a profile and grades.
Verify what you downloaded, without any access to this repository:
sha256sum --ignore-missing --check checksums.txt
gh attestation verify pavois-linux-amd64 --repo stephrobert/pavoisv0.1.0
Immutable
release. Only release title and notes can be modified.
First release. Everything below ships in it; nothing was published before, so there is no earlier
history to read. The embedded baseline is pavois-baseline 0.2.0.
The scanner
pavois scanaudits a local, SSH or Docker target through CINC Auditor and grades it A to E.
Controls read the effective configuration (sshd -T,sysctl,systemctl show,
auditctl -l) rather than configuration files, so a drop-in that re-enables what a file forbids
is seen. That is the whole argument for the project.- 789 OS-neutral controls across 9 Linux targets: Debian 12 and 13, Ubuntu 22.04, 24.04 and
26.04, RHEL 8, 9 and 10, Fedora. AlmaLinux and Rocky auto-detect to the RHEL profile of the same
version. One control has one stable id and N standard references as tags; a standard is a view
over one control set, never a duplicated control. - Multi-standard mappings, sourced and never invented: CIS (per-OS benchmark version),
ANSSI-BP-028 v2.0, NIST SP 800-53 Rev 5 and 800-171, PCI-DSS 4.0, DISA STIG, plus each control's
SOCLE reference. - Each control declares its evidence type (
effective-runtime,persistent-config,
inventory-state,filesystem-state), because a pass does not prove the same thing in each case,
and a runtime pass is not a reboot-survivable one. - A self-contained HTML report, chaptered by standard, with a grade, a severity breakdown and
client-side standard and level selectors. Also JSON, SARIF, JUnit and CSV, and--fail-under N
to turn the grade into a CI exit code. scan --from <report.json>re-grades an archived result with no target, no transport and no
engine: the report names its own platform. The machine may be long gone, or never yours.
Hardening
pavois harden planproduces a reviewable YAML plan from a real scan, andharden applyruns it
through Chef. Dangerous remediations are held back by default, and the engine never installs
itself on a target without--bootstrap-cinc.harden apply --rebootproves the reboot happened by comparing the kernelboot_idbefore and
after, then re-scans, so a setting that only holds until the next boot cannot pass silently.pavois verifyattempts the forbidden action and confirms the protection actually holds, rather
than re-reading the setting that was just written.pavois rollbackreverts an applied plan.
Evidence and exports
pavois bundlepackages a campaign (before and after scans, plan, reports, transition delta,
manifest, checksums) into a tamper-evident directory, andbundle verifyre-checks all of it.
Signing is the operator's, under their own identity: Pavois never holds a key.pavois oscalpublishes the baseline as OSCAL 1.1.2: a catalog grouped by domain, each
control carrying its effective check, its per-OS CIS/STIG numbers and its norm links, plus one
profile per OS, consumable by any GRC tool.pavois diffcompares two scans or two plans: fixed, regressed, newly applicable, grade delta.
pavois rulesandpavois normsexpose the rule base and the standard catalogue as JSON, and
pavois doctorchecks the environment before anything else does.
How it is built
- One DRY source,
docs/reference/rules.yml, one control per id, with 7 check templates
(file_owner, package, sysctl, kconfig, service_disabled, mount_option, kmod_disabled) covering
more than half the corpus. The 9 per-OS reference files and the.rbcorpus are generated from
it, never edited by hand. - Release artifacts are pulled from the repository's GitHub releases: static binaries for linux and
darwin on amd64 and arm64,.deband.rpmpackages,checksums.txt, a CycloneDX SBOM, a SLSA
build-provenance attestation and a keyless Cosign signature. All three proofs are checkable
without any access to this repository.
Validated
- Debian 12 and Debian 13, end to end, on fresh VMs created by the published tooling: stock
scan, plan, apply, reboot, re-scan, a second pass re-planned from the resulting state, and an
evidence bundle verified at the end.tools/golden_path.shis that campaign, runnable by anyone.
Both finished with every automatic control passing. - Every scan in those campaigns was itself checked by
tools/validate_run.py, which refuses a run
whose controls returned verdicts they never measured.
Known limitations
- The other seven OS targets are curated and statically validated, but no end-to-end campaign has
been run on them. Treat them as experimental and report what you find. - Some controls ship no automated remediation (kernel rebuilds, partitioning, judgement calls).
Pavois delivers the recipe and says so; it does not pretend to apply it. - The grade is capped by severity class, so closing a handful of medium findings often does not move
the letter. The posture breakdown per class is the number to read. - OSCAL output is the baseline (catalog and profiles), not yet a per-scan assessment-results
package. No container image is published yet.
Verify what you downloaded, without any access to this repository:
sha256sum --ignore-missing --check checksums.txt
gh attestation verify pavois-linux-amd64 --repo stephrobert/pavois