From 374dc371e7bd2b46355df372f4925ccca88b71d8 Mon Sep 17 00:00:00 2001 From: Albert Hui Date: Fri, 7 Aug 2026 09:22:29 -0700 Subject: [PATCH 1/3] ci: repin fleet-ci so this repo's own deny.toml is used again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The shared workflow's `deny-config-repo` input defaulted to SecurityRonin/fleet-config, so adopting it silently replaced this repo's supply-chain policy with the shared one. That is a real change to what `cargo deny` accepts, and no adoption PR disclosed it — nobody involved knew. Measured across the fleet when it was found: 61 of 65 adopted repos had a stricter local config. The shared one carries 21 advisory ignores against their `ignore = []`, every one a bare RUSTSEC id with no reason and no removal condition — which the fleet's own suppression rule forbids. Among them RUSTSEC-2023-0071 (rsa, Marvin timing attack). Several repos also went from `bans.multiple-versions = "deny"` to `"warn"` and gained nine allowed licences. fleet-ci now defaults to the repository's own deny.toml; opting into the shared config is explicit. This repin picks that up, restoring the policy this repo actually wrote. Reassuring rather than alarming: before this fix all 65 adopted repos were re-checked against their OWN deny.toml and all 65 passed. The gate was weakened, but nothing was hiding behind it. If this repin does turn a check red, that is a true finding this repo's own policy always meant to catch — fix it rather than re-pointing at the shared config. Only the pinned SHA changes. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7645891..3c61f0f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,4 +18,4 @@ jobs: # and MSRV is read from rust-version. Anything that needed configuring would be # a behaviour change smuggled in by an adoption PR, so there is nothing here. ci: - uses: SecurityRonin/fleet-ci/.github/workflows/rust-ci.yml@a62ab10603151071744cec0b4e3638aa6406d4e4 + uses: SecurityRonin/fleet-ci/.github/workflows/rust-ci.yml@f9802dca64a95eb881fd05dd3f4f16e53b97f2b3 From 3c7039bbebf7a71463147f6e5cb04fc5e26f5e1b Mon Sep 17 00:00:00 2001 From: Albert Hui Date: Fri, 7 Aug 2026 16:21:35 -0700 Subject: [PATCH 2/3] fix(msrv): pin uuid down to 1.20.0 so the declared 1.81 floor holds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new per-member MSRV matrix builds cfb-forensic at the floor it declares (1.81) instead of hiding it behind a workspace-wide build, and it refused: error: rustc 1.81.0 is not supported by the following package: uuid@1.23.3 requires rustc 1.85.0 What refused is a DEPENDENCY'S DECLARATION, not this crate's source. uuid is transitive here (uuid <- cfb 0.14 <- cfb-forensic); nothing in cfb-forensic needs 1.85. uuid raised its own floor 1.63 -> 1.85 at 1.21.0, and the lock had drifted forward onto it. So 1.81 is a truthful statement about this crate's code, and the fix is to restore it rather than to discard it: pin uuid to 1.20.0, the last release declaring 1.63. cfb's requirement is a caret `uuid = "1"`, so 1.20.0 satisfies it and no re-resolution is forced. cfb-forensic is a PUBLISHED library, so its low floor is a promise downstreams pin against — raising it would have been near-breaking, and untrue besides. Controls (cargo build -p cfb-forensic --all-features): before pin, 1.81 -> FAIL (uuid@1.23.3 requires rustc 1.85.0) after pin, 1.81 -> PASS after pin, 1.96 -> PASS (workspace, all features) Residual limit worth naming: the lock protects CI and our own builds. A downstream resolving fresh on a pre-1.84 cargo has no MSRV-aware resolver and could still pull uuid >= 1.21; cargo 1.84+ prefers 1.20.0 given our declared rust-version. No manifest cap was added, since capping uuid in a published crate would propagate a ceiling to every consumer sharing the dependency. Co-Authored-By: Claude Opus 5 --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc2d7eb..8d0f290 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -160,9 +160,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "uuid" -version = "1.23.3" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "js-sys", "wasm-bindgen", From 9b74b8a6f09ada4ebdcdc6116220de03132f3814 Mon Sep 17 00:00:00 2001 From: Albert Hui Date: Fri, 7 Aug 2026 16:57:30 -0700 Subject: [PATCH 3/3] fix(supply-chain): vet records for the versions the MSRV pin resolves MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pinning a dependency down to keep this repo's declared MSRV achievable moved the resolved set, and the vet store had no record for the versions that came out. Each takes the strongest mechanism that applies per ADR-0018: publisher trust for crates we publish or whose publisher an imported aggregate auditor already vouches for, and honest [[exemptions]] only for the remainder. An exemption asserts that nobody audited the crate — equally true before and after a version change — so refreshing one claims nothing new. No `cargo vet certify --accept-all`: a certify record asserts a human read the source, so bulk-certifying fabricates the condition being claimed. audits.toml carries zero self-certified entries after this change. `cargo vet --locked` passes. --- supply-chain/audits.toml | 42 +++++++++++++++++++++++++++++++++++++--- supply-chain/config.toml | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml index 1eabe91..c48c938 100644 --- a/supply-chain/audits.toml +++ b/supply-chain/audits.toml @@ -3,20 +3,56 @@ [audits] +[[trusted.ewf]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-03-05" +end = "2027-08-07" + +[[trusted.forensic-vfs]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-07-07" +end = "2027-08-07" + [[trusted.forensicnomicon]] criteria = "safe-to-deploy" user-id = 347968 # Albert Hui (h4x0r) start = "2026-06-05" -end = "2027-08-01" +end = "2027-08-07" [[trusted.forensicnomicon-core]] criteria = "safe-to-deploy" user-id = 347968 # Albert Hui (h4x0r) start = "2026-06-28" -end = "2027-08-01" +end = "2027-08-07" [[trusted.forensicnomicon-data]] criteria = "safe-to-deploy" user-id = 347968 # Albert Hui (h4x0r) start = "2026-06-28" -end = "2027-08-01" +end = "2027-08-07" + +[[trusted.jsonguard]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-05-21" +end = "2027-08-07" + +[[trusted.safe-decode]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-08-02" +end = "2027-08-07" + +[[trusted.safe-read]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-07-15" +end = "2027-08-07" + +[[trusted.state-history-forensic]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-06-16" +end = "2027-08-07" diff --git a/supply-chain/config.toml b/supply-chain/config.toml index 94eee55..1ae9170 100644 --- a/supply-chain/config.toml +++ b/supply-chain/config.toml @@ -68,7 +68,7 @@ version = "1.0.24" criteria = "safe-to-deploy" [[exemptions.uuid]] -version = "1.23.3" +version = "1.20.0" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen]]