From 2bb89f1aa2ef8f0bdc504eaf252a35fd6a111927 Mon Sep 17 00:00:00 2001 From: Albert Hui Date: Fri, 7 Aug 2026 09:21: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 111229c8efde123eb4b1dcd8a75c542338b217bf Mon Sep 17 00:00:00 2001 From: Albert Hui Date: Fri, 7 Aug 2026 16:21:42 -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 useract-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.4 requires rustc 1.85.0 What refused is a DEPENDENCY'S DECLARATION, not this crate's source. uuid is transitive and three levels down (uuid <- cfb 0.14 <- lnk-core <- useract-forensic); nothing in useract-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 restores it rather than discarding 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. useract-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 useract-forensic --all-features): before pin, 1.81 -> FAIL (uuid@1.23.4 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 01d05a9..3e53766 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -438,9 +438,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.4" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "js-sys", "wasm-bindgen", From 4ba6b3d84b1e1ac93933bb87c54bcbbb293fdb38 Mon Sep 17 00:00:00 2001 From: Albert Hui Date: Fri, 7 Aug 2026 16:58:29 -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 | 6 +----- supply-chain/imports.lock | 18 +++++++++++++++++ 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml index be83c3c..493e9e2 100644 --- a/supply-chain/audits.toml +++ b/supply-chain/audits.toml @@ -9,23 +9,41 @@ user-id = 347968 # Albert Hui (h4x0r) start = "2026-06-13" end = "2027-08-01" +[[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.lnk-core]] criteria = "safe-to-deploy" @@ -39,6 +57,18 @@ user-id = 347968 # Albert Hui (h4x0r) start = "2026-06-13" end = "2027-08-01" +[[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.segb-core]] criteria = "safe-to-deploy" user-id = 347968 # Albert Hui (h4x0r) @@ -69,6 +99,12 @@ user-id = 347968 # Albert Hui (h4x0r) start = "2026-06-13" end = "2027-08-01" +[[trusted.state-history-forensic]] +criteria = "safe-to-deploy" +user-id = 347968 # Albert Hui (h4x0r) +start = "2026-06-16" +end = "2027-08-07" + [[trusted.winreg-artifacts]] criteria = "safe-to-deploy" user-id = 347968 # Albert Hui (h4x0r) diff --git a/supply-chain/config.toml b/supply-chain/config.toml index 3a76a17..c8597ee 100644 --- a/supply-chain/config.toml +++ b/supply-chain/config.toml @@ -144,7 +144,7 @@ version = "1.0.24" criteria = "safe-to-deploy" [[exemptions.uuid]] -version = "1.23.4" +version = "1.20.0" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen]] @@ -166,7 +166,3 @@ criteria = "safe-to-deploy" [[exemptions.web-time]] version = "1.1.0" criteria = "safe-to-deploy" - -[[exemptions.zmij]] -version = "1.0.21" -criteria = "safe-to-deploy" diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock index 2b32ca2..3713c86 100644 --- a/supply-chain/imports.lock +++ b/supply-chain/imports.lock @@ -327,3 +327,21 @@ who = "Jan-Erik Rediger " criteria = "safe-to-deploy" delta = "1.0.94 -> 1.0.106" aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" + +[[audits.mozilla.audits.zmij]] +who = "Benjamin VanderSloot " +criteria = "safe-to-deploy" +version = "1.0.20" +notes = """ +A lot of unsafe code here, included as a dependency of serde_json. +The testing is very thorough, validating all 32-bit floats, and 100m +random 64-bit floats. No unsafe imports. +""" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + +[[audits.mozilla.audits.zmij]] +who = "Ben Dean-Kawamura " +criteria = "safe-to-deploy" +delta = "1.0.20 -> 1.0.21" +notes = "Almost no code changes. No new unsafe code." +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml"