fix(security): RUSTSEC-2026-0273 (manzana stubbed crypto) reds ci/security on every open PR - #2839
Merged
Merged
Conversation
…urity on every open PR Same signature as #2805: all PRs red, nothing changed in-repo. The advisory was committed to the RustSec DB at 2026-09-01T07:50:30Z -- two seconds after crates.io yanked manzana at 07:50:28Z. `ci / security` passed on #2825 at 06:44Z and has failed on #2836/#2837/ #2838 from 09:56Z. An advisory-DB catch-up, not a regression. CONTAINMENT ONLY. The block records the removal condition, and it is NOT "when a new manzana ships" -- see below. Reachability measured on a clean origin/main worktree, x86_64 Linux, absolute cargo binary (a `cargo` shell function on the dev box shadows it and redirects CARGO_TARGET_DIR): cargo tree -p aprender-gpu | grep -c manzana -> 0 cargo tree -p aprender-gpu --features metal | grep -c manzana -> 0 cargo tree --workspace | grep -c manzana -> 0 git grep -l 'secure_enclave|SecureEnclave' -- '*.rs' -> 0 files The middle line is load-bearing: manzana is BOTH optional AND declared under [target.'cfg(target_os = "macos")'.dependencies], so enabling `metal` on Linux pulls in nothing. aprender's only three call sites are `manzana::metal::*`, all behind cfg(all(target_os = "macos", feature = "metal")). The advisory is about `secure_enclave::SecureEnclaveSigner`, which this workspace never names. As with the h2 entry above it, cargo-deny passes WITHOUT an exemption because it walks the ACTIVATED graph; cargo-audit scans Cargo.lock, which lists target- and feature-gated deps unconditionally. So the ignore goes in .cargo/audit.toml ONLY -- adding it to deny.toml would be a dead exemption and fail check_deny_exemptions_live.sh. WHY AN IGNORE AND NOT AN UPGRADE. Both published versions (0.1.0, 0.2.0) are YANKED, so crates.io reports max_version 0.0.0 and there is nothing to bump to. More importantly the advisory carries `[versions] patched = []` -- NO version is considered fixed, so publishing a corrected manzana does NOT clear this gate on its own. Only amending the upstream advisory to name a patched range does. The removal condition is written that way in the file. VERIFICATION, STATED HONESTLY. This is NOT locally verified green. cargo-audit 0.22.1 on this x86_64 host does not report RUSTSEC-2026-0273 at all -- manzana surfaces only as `Warning: yanked` -- so a local run passes with OR without this ignore and proves nothing. The negative control was run and it FAILED TO FAIL, which is how the vacuity was found rather than shipped. The fix is sound by construction (CI errors on that exact id; `--ignore <id>` suppresses that id) and CI is the verifier. Refs #2805. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Same signature as #2805: all PRs red, nothing changed in-repo. The advisory was committed to the RustSec DB at
2026-09-01T07:50:30Z— two seconds after crates.io yanked manzana at07:50:28Z.ci / securitypassed on #2825 at 06:44Z and has failed on #2836/#2837/#2838 from 09:56Z. An advisory-DB catch-up, not a regression.Reachability: zero, measured
The middle line is the load-bearing one: manzana is both optional and declared under
[target.'cfg(target_os = "macos")'.dependencies], so enablingmetalon Linux pulls in nothing. aprender's only three call sites aremanzana::metal::*, all behindcfg(all(target_os = "macos", feature = "metal")). The advisory is aboutsecure_enclave::SecureEnclaveSigner, which this workspace never names.As with the h2 entry above it,
cargo deny check advisoriespasses without an exemption (it walks the activated graph);cargo-auditscansCargo.lock, which lists target- and feature-gated deps unconditionally. So the ignore goes in.cargo/audit.tomlonly — adding it todeny.tomlwould be a dead exemption and failcheck_deny_exemptions_live.sh.Why an ignore and not an upgrade
Both published versions (0.1.0, 0.2.0) are yanked — crates.io reports
max_version: 0.0.0, so there is nothing to bump to. More importantly the advisory carries:No version is considered fixed. Publishing a corrected manzana does not clear this gate on its own — only amending the upstream advisory to name a patched range does. The removal condition in the file says exactly that, because "when the new manzana ships" is the wrong trigger and would leave someone puzzled when CI stayed red.
Verification, stated honestly
This is not locally verified green.
cargo-audit0.22.1 on an x86_64 host does not report RUSTSEC-2026-0273 at all — manzana surfaces only asWarning: yanked— so a local run passes with or without this ignore and proves nothing.I ran the negative control and it failed to fail, which is how the vacuity was found rather than shipped. The fix is sound by construction — CI errors on that exact id, and
--ignore <id>suppresses that id — and CI is the verifier here, not my box.Refs #2805.