Skip to content

0.28.1

Choose a tag to compare

@ShkodnikAI ShkodnikAI released this 05 Oct 04:26
d5af542

Security (UPDATE REQUIRED)

0.28.0 and earlier are affected on the VM backend (mlog serve runs the bytecode VM by default since 2026-09-21) — update required. The consolidated audit d63cc1d (2026-10-04) found two server-path divergences; both were honestly named in the b678def commit body (№574.1) before the fix existed, and both are closed by the wave-29 security wave (the dispatch gh#1004; the wave-29 rule: the gates read the truth — fact_open_high_server 0 → 2 → 1 → 0).

  • X-1 (High) — the guard bypass (№581, gh#995, PR #1007): a bare respond*/respond_html* call in a NON-tail position of a route body did NOT stop route execution on the VM backend — the TW answered immediately from any block, the VM compiled the call with Instruction::Pop, so the guard pattern if is_admin(...) == false { respond("403", "forbidden") } silently FELL THROUGH to the protected code (an unauthorized caller reached the protected handler). Fixed: the RESPOND_NOT_TERMINAL semantic gate refuses every such program at startup on BOTH backends (fail-closed); the migration is one word — return respond(...). The fix/audit date: 2026-10-04.
  • X-2 (Medium) — the leftover-local data leak (№582, gh#996, PR #1008): a route/branch body whose final statement is a let/assignment made the VM's route epilogue pop the LAST LOCAL SLOT and serialize it as the response body (route { let row = query_row(...) } returned the row to the caller; the interpreter answered the plain 200 OK). Fixed: the PushUnit route-epilogue invariant — the body exit never reads a local slot; the fall-through answers the same shared default as the interpreter lane. The fix/audit date: 2026-10-04.

The honest-boundary trail: b678def (№574.1) named both divergences in the commit body; the wave-29 dispatch (gh#1004) made the gates read that truth; the release-block label discipline (ADR-0179 §4) held until this live tag. The stage-2 parity step (the VM serves respond in ANY position — №584) and the route-body differential-fuzzer lane (№585) follow in the 0.29 cycle.

Assets and provenance

  • mlog-linux-x86_64 — the release binary (cargo build --release --locked -p metalogos-server --bin mlog; the exact toolchain is recorded in BUILD-INFO.txt).
  • mlog-linux-x86_64.cdx.json — CycloneDX SBOM describing exactly that binary.
  • SHA256SUMS — digests of the binary, the SBOM and BUILD-INFO.
  • Two Sigstore attestations via GitHub artifact attestations: the SLSA build provenance and the SBOM attestation bound to the same binary subject.

Built from the tag v0.28.1 (d5af542), the version lockstep 0.28.1 in the workspace manifests (№583, gh#997, PR #1010).


The post-publication fact sync: the release-block carrier (#997) closed on this live tag per its own condition; fact_open_high_server 1 → 0 in both goals files, the [0.28.1] CHANGELOG date, the REALITY §6.14 release state — the syncing PR #1024 (merged 2026-10-05; ADR-0181 §4.1 step 1 — the syncing PR linked from the release notes).