Make cargo_audit and cargo_deny run, and triage what they found
Both gates failed their first run on the host with "error: no such command".
cargo-audit and cargo-deny were not installed for the sando user, whose
~/.cargo/bin is first on sandod's PATH. Installed there; that part is not in this
commit, but it is why the gates reported nothing rather than something.
Three of the four failures were configuration, not risk.
Licenses: deny.toml already carried exceptions for makenotwork and tagtree, spelt
"PolyForm-Noncommercial-1.0.0", while both crates declare
"LicenseRef-PolyForm-Noncommercial-1.0.0". The prefix is mandatory because
PolyForm is not on the SPDX list. So the exceptions matched nothing — cargo-deny
reported license-exception-not-encountered for both while rejecting the very
crates they existed to cover.
Bans: mnw-assumptions is internal-only and carries a path dep, but had no
publish = false, so cargo-deny could not treat it as private and
allow-wildcard-paths did not apply. crates.io would reject it anyway.
Advisories drift: deny.toml's ignore list calls itself a mirror of
.cargo/audit.toml and was already missing RUSTSEC-2026-0173.
The one real decision is RUSTSEC-2026-0222 — wasmtime 43.0.2, "stores can mix up
type indices between engines", 3.8 low, published 2026-07-31. It arrives via
yara-x 1.19.0, the current release, which pins the 43 line; the fixed ranges are
24.0.12+, 36.0.13+, 46.0.2+ and 47.0.3+ and skip 43 entirely. Nothing we control
can bump to a fixed version.
Ignored, because the precondition does not exist here: the bug needs a store to
cross between two wasmtime Engines, and production stands up exactly one.
scanning/mod.rs:499 compiles the rules once while building the ScanEngine, and
every other yara_x::Compiler::new() in the tree is under #[cfg(test)]. That claim
is the whole justification, so compile_rules_from_dir now documents that a second
production call site invalidates a recorded security posture rather than merely
costing memory.
Deliberately not claiming the scanner is isolated. yara-x runs in-process in the
server's address space (scanning/mod.rs:192). What bounds it is that scanning
runs on a dedicated worker pool off the request path, a panicking CPU layer is
caught and converted to a fail-closed scan_panic verdict instead of unwinding the
worker, and the CPU layers carry a wall-clock deadline. Defense in depth, not a
sandbox.
It monitors itself: cargo-deny reports an unreachable ignore as
advisory-not-detected, so the entry announces its own obsolescence when yara-x
moves to a fixed wasmtime.
cargo audit exits 0; cargo deny reports advisories ok, bans ok, licenses ok,
sources ok.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-03 18:51 UTC