Skip to content

chore(deny): group the advisory ignores and record why each one is suppressed - #138

Open
0xrlawrence wants to merge 1 commit into
orbinum:mainfrom
0xrlawrence:chore/document-advisory-ignores
Open

chore(deny): group the advisory ignores and record why each one is suppressed#138
0xrlawrence wants to merge 1 commit into
orbinum:mainfrom
0xrlawrence:chore/document-advisory-ignores

Conversation

@0xrlawrence

Copy link
Copy Markdown

The ignore list in deny.toml carries 28 entries under two blanket headings: "cannot be resolved without upgrading polkadot-sdk or ZK crates upstream" and "Unmaintained". Several are sandbox escapes in the wasmtime engine that executes the runtime, including RUSTSEC-2026-0091 (sandbox-escaping memory access with Winch compiler backend) and RUSTSEC-2026-0092 (miscompiled guest heap access enables sandbox escape on aarch64).

Those are probably not reachable from this workspace. The problem is that the file does not say so, and an ignore list that does not record its own reasoning cannot be safely shortened later. Nobody reading it in six months can tell which entries were a considered judgement and which were added to make CI green.

What this changes

The same 28 IDs, regrouped by the argument that actually suppresses them:

  • Winch backend. Substrate compiles with Cranelift and does not enable Winch, so these are believed unreachable.
  • Component model and WASI. Substrate executes core wasm modules only and links neither surface.
  • Core engine. Neither argument above covers these, so they are called out as the group to re-read first, particularly on aarch64. I also noted the obvious counter-argument and why it does not hold: a chain with runtime upgrades does not get to treat the runtime as trusted input.
  • tracing-subscriber via ark-relations, with the condition that clears it.
  • Unmaintained crates, annotated with what pulls each one in.

Plus a preamble stating what a new entry needs (a reason, a clearing condition, a review date), a CONFIRM marker on the reasoning I could not verify against a build, and a request that new entries go in a group rather than being appended to the end.

What I deliberately left out

I did not add the review dates. Picking them is a decision for whoever owns this file, and a date I invented would be worse than none. The natural anchor for the wasmtime group is the next polkadot-sdk bump: that group has no upgrade path until then, and every entry in it should be dropped and re-run at that point rather than carried forward by habit.

I also have not verified the Cranelift and component-model reasoning against the build, which is why it is marked CONFIRM rather than asserted.

Verification

The ID set is identical before and after. I diffed the parsed advisories.ignore arrays to confirm: 28 in, 28 out, nothing added or dropped. cargo-deny behaviour is unchanged; this is comments and ordering. The file parses as valid TOML. I could not run cargo-deny locally.


Separately, I have emailed security@orbinum.net about a number of higher-severity findings from the same review pass. Those are deliberately not in this PR, in any other PR, or in a public issue.

…ppressed

The ignore list carries 28 entries under two blanket headings ("cannot be
resolved without upgrading polkadot-sdk or ZK crates upstream" and
"Unmaintained"). Several of them are sandbox escapes in the wasmtime engine
that executes the runtime, including RUSTSEC-2026-0091 and RUSTSEC-2026-0092.
Those are probably not reachable from this workspace, but the file does not say
so, and an ignore list that does not record its own reasoning cannot be safely
shortened later: nobody can tell which entries were a considered judgement and
which were added to make CI green.

Regroups the same 28 IDs, unchanged, by the argument that suppresses them:

- Winch backend advisories. Substrate compiles with Cranelift and does not
  enable Winch, so these are believed unreachable.
- Component model and WASI advisories. Substrate executes core wasm modules
  only and links neither surface.
- Core engine advisories. Neither argument above covers these, so they are
  called out as the group to re-read first, particularly on aarch64. The note
  also pushes back on the obvious counter-argument, since a chain with runtime
  upgrades does not get to treat the runtime as trusted input.
- tracing-subscriber via ark-relations, with the condition that clears it.
- Unmaintained crates, annotated with what pulls each one in.

Adds a preamble stating what a new entry needs (a reason, a clearing
condition, a review date), marks the unverified reasoning as CONFIRM rather
than asserting it, and asks that new entries go in a group instead of being
appended to the end.

The ID set is byte-identical before and after; verified by diffing the parsed
`advisories.ignore` arrays. cargo-deny behaviour is unchanged. I could not run
cargo-deny locally, but the file parses as valid TOML.

I did not add the review dates themselves, since picking them is a decision
for whoever owns this. The natural anchor for the wasmtime group is the next
polkadot-sdk bump.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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