Skip to content

fix(security): RUSTSEC-2026-0273 (manzana stubbed crypto) reds ci/security on every open PR - #2839

Merged
noahgift merged 1 commit into
mainfrom
fix/rustsec-2026-0273-manzana-containment
Sep 1, 2026
Merged

fix(security): RUSTSEC-2026-0273 (manzana stubbed crypto) reds ci/security on every open PR#2839
noahgift merged 1 commit into
mainfrom
fix/rustsec-2026-0273-manzana-containment

Conversation

@noahgift

@noahgift noahgift commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

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.

Reachability: zero, measured

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 the load-bearing one: 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 check advisories passes without an exemption (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 — crates.io reports max_version: 0.0.0, so there is nothing to bump to. More importantly the advisory carries:

[versions]
patched = []

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-audit 0.22.1 on an 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.

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.

…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>
@noahgift
noahgift enabled auto-merge September 1, 2026 11:05
@noahgift
noahgift added this pull request to the merge queue Sep 1, 2026
Merged via the queue into main with commit b7bfcaf Sep 1, 2026
18 of 27 checks passed
@noahgift
noahgift deleted the fix/rustsec-2026-0273-manzana-containment branch September 1, 2026 14:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant