etminan
News

What shipped, newest first.

Release announcements for Etminan — condensed from the project's own changelog, in plain language. Subscribe with the feed below instead of checking back manually.

📡  Subscribe via RSS

Enterprise marks a feature available only in the Enterprise edition (opt-in, off by default). Everything else ships in the free Standard edition.

v0.11.0

2026-09-01

Enterprise The audit head leaves the machine that wrote it. A hash-chained audit log proves less than it sounds when it lives on the machine under suspicion: an attacker who owns that machine can rewrite the chain and re-hash it to be self-consistent, and a chain checked against itself always agrees with itself. The head of the chain is now published to an external witness — a file on separately administered storage, or by mail — and compared on every cycle. A retroactive rewrite is reported as a critical finding naming the sequence number, what the witness holds and what the local log claims. It detects a rewrite; it does not prevent one, and the finding says so.

A fourth package: etminan-witness. The receiving side of the evidence, meant for a machine that is neither the verifier nor a monitored host. It opens no database, holds no key, needs no TPM and makes no network connection. Given a signed summary from op self-attest and a pinned identity it answers three questions: does the signature verify, did the counter advance, and is this summary too old? A replayed summary is refused, and a verifier that has quietly stopped emitting stops looking like a quiet one. Part of the free Standard edition.

Enterprise Four eyes over who may act. Dual control now covers the operator registry itself: op identity add and op identity revoke become a request a second, distinct administrator must co-sign, each as its own signed act. Nobody can grant themselves a second pair of hands. Air-gapped operation for segments with no route out refuses the outbound call before it is attempted rather than letting it fail, while attestation inside the enclave is untouched. Measured boot extends the quote to the boot chain — firmware, bootloader, kernel and initramfs — so the evidence covers how the machine came up and not only what ran afterwards.

Directory roles and portable evidence. An operator’s role can come from an Active Directory or LDAP group, and an unreachable directory stops nothing. op audit-export writes the trail as evidence a third party can verify with audit-export-verify and no other tooling of ours. Signed mapping reports for ISO/IEC 27001, PCI-DSS and SOC 2 join the NIS2 and DORA ones, all built from one shared evidence base so they cannot drift apart.

A fix that mattered more than any feature. A host that simply rebooted was permanently accused of forging its measurement log — the strongest accusation this product makes — and nothing recovered it. The host was honest; the verifier was comparing against a cumulative value belonging to the previous boot. It now re-reads from offset zero before calling a mismatch tampering: if the replay from the beginning reaches the value the TPM signed, that was a reboot, and it is adopted with a note rather than an alarm. If it does not, the critical finding stands.

Known limits, stated rather than discovered. arm64 packages are published and must not be deployed: the agent builds and links there, and no arm64 host has completed an attestation — on a virtualized guest IMA initialises before the TPM driver, so PCR 10 is never extended while the measurement log keeps filling and looks healthy. Three of the four hypervisor setup guides are written from vendor documentation rather than walked end to end. Directory-sourced roles were exercised against OpenLDAP and not against Active Directory.

v0.10.2

2026-08-07

Role-based access control — built in, and free. The verifier now runs a privilege-separated trust daemon, etminan-verifierd, and every operator action goes through it as op <command>. The daemon authenticates each call by kernel peer-UID (SO_PEERCRED) — no key files — and maps it to a registered identity with one of three roles: admin, operator (host-group scoped), or viewer. It is default-deny, and both allows and denials are written to the hash-chained audit log; an optional per-role TOTP second factor is available. RBAC is part of the free Standard edition, not an add-on.

One path for every trust-changing action. Enrolment, baseline approve/reject, exclusions, profile assignment and TLS/AK rotation — and the read/audit commands op review, op check, op exclude list and op verify-signatures — all run through the daemon under RBAC, so nothing bypasses authorization. The old key-file operator flow is retired; a root break-glass path remains for recovery.

Enterprise Dual control, re-platformed and impossible to quietly switch off. Four-eyes approval is now a co-sign by a second distinct authenticated identity, not a second key file. Which actions need four-eyes — and the threshold — live in an admin-latched, signed policy that is authoritative over the environment: a single operator can never turn it off or drop below two, because every change to the policy is itself four-eyes. op verify-signatures reconciles each co-signed batch and the policy row, so a hand-loosened row is a finding, not a silent bypass. Four-eyes now also covers exclude-create — the most trust-suppressing action there is.

Security-hardened, independently audited. The whole 0.10.2 line went through a full external-style security-code audit, validated on a VM. Among the results: a compromised host can no longer abuse the “catching up” state to hide a real mismatch or stall an alarm, and any measurements recorded while catching up are provisional — refused by op approve until a later genuine cycle confirms them against the signed PCR. Every four-eyes co-signer is re-validated as still-authorized at apply time; the plugin sandbox fails closed (a plugin never runs unsandboxed); TOTP codes are strictly one-time-use; and the audit log fails loud on a missing anchor instead of silently.

Packaged for Debian. The agent and the verifier — the verifier package now also carrying the etminan-verifierd daemon — install as signed .deb packages from one source at one version. The full op command surface is covered by bash/zsh/fish completions, and both binaries answer --version.

v0.9.0

2026-07-24

Enterprise Native SIEM output — CEF or LEEF over syslog. For a SOC that ingests syslog into Splunk, QRadar, Sentinel, or Elastic. Off by default; the switch is ETMINAN_SIEM_FORMAT=cef (or leef), and when on, one syslog event is emitted per finding and per signed operator action (op enroll, op approve/reject/exclude, TLS/AK rotation, identity-registry changes). Transport defaults to the local /dev/log socket, or ETMINAN_SIEM_SYSLOG_ADDR=host:port sends UDP to a remote collector; facility local0, with severity mapped critical→err / warning→warning / action→info. It’s an addition to the Slack/PagerDuty notification plugins, not a replacement — syslog only, no in-process HTTP — and it’s best-effort, so a broken syslog target never breaks a verification run. See Enterprise features.

v0.8.0

2026-07-24

Operator authorization becomes governed, with role separation, revocation, and host-AK rotation. Trust-changing actions were accountability-only — any operator could sign any of them. A signed, audit-chained authorization registry now governs who may do what, split into administrative and operational roles, with revocation. This is the foundation the RBAC identity registry and the etminan-verifierd daemon build on today, where operators are authenticated by Unix UID and reach every action through op. New op rotate-ak re-binds a host’s attestation key within the same TPM without discarding its baseline. See the operator guide.

Optional manufacturer EK-certificate verification at enrollment (op enroll <host> --ek-roots <dir>) adds the genuine-hardware layer for discrete TPMs: the verifier requires the host’s EK certificate to chain to a manufacturer root you supply. Paired with a detection-bypass fix — the agent now sends the IMA measurement log as raw kernel bytes, so the per-line template-hash binding holds even for a filename that isn’t valid UTF-8, which previously could dodge the check. Both are agent↔verifier wire changes (now behind explicit protocol versioning); upgrade the pair together. See the architecture.

Also in this release: a certified, signed plugin catalog (plugins list/install/update) with per-plugin execution sandboxing (plugins run as a dedicated unprivileged user); configurable notification templates with notify-preview and notify-test; shell autocomplete for both binaries. On the security side, AK enrollment now enforces the required key template, so a compromised host can’t get its attestation key trusted by submitting a software-generated one at enrollment.

v0.7.0

2026-07-22

Maintenance release — no user-facing changes.

v0.6.0

2026-07-22

Every alarm finding now carries a stable, machine-matchable kind field (e.g. pcr-mismatch, sla-exceeded) alongside the existing free-form text — so a PagerDuty/Slack/webhook rule can route or filter on category without parsing prose. Paired with new per-channel message formatting (ETMINAN_NOTIFY_<CHANNEL>_FORMAT): reshape one channel's message text purely via config, no plugin script edit needed. New Notification channels page covering the full contract.

v0.5.0

Breaking change 2026-07-22

The headline change: change-source (ticket-system) correlation moved from an in-process HTTP client to an external, allowlisted, hash-verified plugin process — the same model now formalized as the Etminan Plugin API, which also covers the new PagerDuty/Slack/generic-webhook notification channels introduced this release. Operators using change-source correlation need to install the plugin and allowlist its pinned hash — see Change-source correlation for the full walkthrough.

  • New op rotate-tls command re-pins a host's TLS certificate fingerprint after its agent's keypair is regenerated, without a full re-enrollment.
  • Package-manager correlation deepened: op review now also reports install/upgrade transaction timing and trust-store verification.

v0.3.0

Breaking change 2026-07-21

Every trust-changing action is now signed and recorded in a new self-contained, hash-chained audit log — no external tool required. op enroll, op reject, and op exclude revoke became signed operator actions carrying a --reason, which they previously didn't take at all.

  • etminan-agent now watches every configured path with unprivileged fanotify and sweeps a changed file the instant a write completes, instead of waiting for the next hourly cycle.
  • New centralized profile registry: etminan-verifier op assign-profile pushes a watched-path profile selection to a host, instead of requiring an operator to edit that host's own config directly.