Files
buzz/deny.toml
Luke Tornquist c9b8f1176e fix(deps): clear RUSTSEC-2026-0433 and RUSTSEC-2026-0429 from the dependency policy (#8922)
Two RustSec advisories published after Oct 30 turned the `Security /
Dependency policy` (`cargo-deny check`) job red on every PR. This clears
both.

## Changes

- **`pulldown-cmark` 0.13.5 → 0.13.6**
([RUSTSEC-2026-0433](https://rustsec.org/advisories/RUSTSEC-2026-0433)).
Lockfile only — `crates/buzz-relay/Cargo.toml` already allows `0.13.4`+.
Not exploitable here regardless: the advisory needs
`Options::ENABLE_WIKILINKS`, and our only caller
(`crates/buzz-relay/src/api/invites.rs`) uses the default `Parser::new`.
- **Ignore
[RUSTSEC-2026-0429](https://rustsec.org/advisories/RUSTSEC-2026-0429)**
for `zip` 8.6.0 in `deny.toml`, next to the existing
RUSTSEC-2026-0367/0368/0369 entries for the same path. The only path is
the dev-only `buzz-mesh-smoke` crate → mesh-llm v0.76.2 → zip 8. The
advisory is in `ZipArchive::extract`. Both mesh-llm zip readers at
v0.76.2 (`mesh-llm-plugin-manager/src/archive.rs`,
`mesh-llm-system/src/autoupdate/release_fetch.rs`) iterate `by_index`
and `io::copy` each entry by hand and never call `extract`. We can't
bump past it yet:
[Mesh-LLM/mesh-llm#2471](https://github.com/Mesh-LLM/mesh-llm/pull/2471)
moved mesh-llm to zip 9, but the latest release (v0.78.1) still locks
zip 8.6.0. The existing comment already says to remove these ignores on
the mesh-llm bump that ships it.

## Testing

On a Linux workstation at the PR head: `cargo-deny check` passes, `cargo
check --locked -p buzz-relay` builds, and the `buzz-relay` invite tests
(the `pulldown-cmark` caller) pass.

## Simpler?

No new concepts: one lockfile bump and one ignore entry that joins an
existing, already-documented group with the same removal trigger.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Luke Tornquist <tornquist@squareup.com>
Co-authored-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 10:30:07 -05:00

131 lines
6.8 KiB
TOML

[advisories]
ignore = [
# instant 0.1.13 — unmaintained crate. Transitive dep: nostr → instant.
# Will be resolved when nostr crate updates its dependencies.
{ id = "RUSTSEC-2024-0384", reason = "transitive dep via nostr; no upstream fix available" },
# paste 1.0.15 — unmaintained. Transitive dep: mesh-llm → iroh → netlink-* → paste.
# No safe upgrade available; tracked for upstream (iroh/netlink) replacement.
{ id = "RUSTSEC-2024-0436", reason = "transitive dep via mesh-llm → iroh → netlink; no upstream fix available" },
# quick-xml < 0.41: quadratic runtime on duplicate-attribute check (0194) and
# unbounded namespace-declaration allocation in NsReader (0195). Both DoS-class,
# requiring attacker-controlled XML. Our two locked versions only parse trusted
# input: 0.38.4 (rust-s3/aws-creds — responses from our own S3/MinIO endpoint)
# and 0.39.4 (mesh-llm → iroh → netdev → plist — local macOS system plists).
# Patched release (>= 0.41.0) is unreachable until rust-s3 and plist/netdev bump;
# remove these when upstream catches up.
{ id = "RUSTSEC-2026-0194", reason = "transitive via rust-s3 and mesh-llm→plist; trusted-input XML only; no upstream fix available yet" },
{ id = "RUSTSEC-2026-0195", reason = "transitive via rust-s3 and mesh-llm→plist; trusted-input XML only; no upstream fix available yet" },
# unsafe-libyaml 0.2.11 — unmaintained (repository archived 2024-03-25), not a
# vulnerability report. Transitive dep: serde_yaml → unsafe-libyaml. The serde_yaml_ng
# fork uses the same crate, so removing it means migrating YAML parsing in
# buzz-agent, buzz-persona, buzz-relay, buzz-workflow and desktop.
{ id = "RUSTSEC-2024-0449", reason = "transitive via serde_yaml; unmaintained, not vulnerable; removal needs a YAML parser migration" },
# NetEQ =0.8.3 declares ringbuf but its published Rust sources never use it,
# so Consumer::skip/clear and their panic-unsafe Drop path are unreachable.
# NetEQ 0.9.1 still declares ringbuf 0.3; ringbuf itself is fixed in 0.5.2.
# Keep the exact NetEQ pin and the wrapper ban below together. Re-audit or
# remove this exception when NetEQ removes/updates the unused dependency.
{ id = "RUSTSEC-2026-0293", reason = "unused dependency of audited, exactly pinned neteq 0.8.3; no Rust references to ringbuf; other consumers forbidden by bans.deny" },
# zip 8.6.0 < 9: extraction keeps setuid/setgid bits (0367), creates
# symlinks that escape the destination (0368), applies permissions through
# symlinks (0369), and aborts the process when sizing a symlink target from
# an attacker-declared length (0429). Only path: buzz-mesh-smoke → mesh-llm v0.76.2 →
# mesh-llm-host-runtime / mesh-llm-plugin-manager / mesh-llm-system → zip 8.
# mesh-llm's zip readers copy entries manually and never call
# ZipArchive::extract; recheck if that changes. Remove on the mesh-llm bump
# that ships Mesh-LLM/mesh-llm#2471.
{ id = "RUSTSEC-2026-0367", reason = "zip 8.6.0 via buzz-mesh-smoke → mesh-llm v0.76.2; manual entry copy, never extracts; fix in unreleased mesh-llm#2471" },
{ id = "RUSTSEC-2026-0368", reason = "zip 8.6.0 via buzz-mesh-smoke → mesh-llm v0.76.2; manual entry copy, never extracts; fix in unreleased mesh-llm#2471" },
{ id = "RUSTSEC-2026-0369", reason = "zip 8.6.0 via buzz-mesh-smoke → mesh-llm v0.76.2; manual entry copy, never extracts; fix in unreleased mesh-llm#2471" },
{ id = "RUSTSEC-2026-0429", reason = "zip 8.6.0 via buzz-mesh-smoke → mesh-llm v0.76.2; manual entry copy, never extracts; fix in unreleased mesh-llm#2471" },
# zbus 5 D-Bus crates (zvariant, zbus_names, zvariant_derive) — unmaintained,
# not vulnerable. Only path: buzz-mesh-smoke → mesh-llm → keyring 4 →
# zbus-secret-service-keyring-store / secret-service 5 → zbus 5.
# Remove when mesh-llm's keyring stack moves off zbus 5.
{ id = "RUSTSEC-2026-0370", reason = "zvariant via buzz-mesh-smoke → mesh-llm → keyring 4 → secret-service 5 → zbus 5; unmaintained, not vulnerable" },
{ id = "RUSTSEC-2026-0371", reason = "zbus_names via buzz-mesh-smoke → mesh-llm → keyring 4 → secret-service 5 → zbus 5; unmaintained, not vulnerable" },
{ id = "RUSTSEC-2026-0372", reason = "zvariant_derive via buzz-mesh-smoke → mesh-llm → keyring 4 → secret-service 5 → zbus 5; unmaintained, not vulnerable" },
# webpki-roots 0.26.11 bundles no certificates: it re-exports webpki-roots 1,
# which the lockfile pins at the patched 1.0.10. tokio-tungstenite 0.28/0.29
# (via axum and nostr-sdk) still require ^0.26, and no patched 0.26 release
# exists. Remove when those consumers move to webpki-roots 1.
{ id = "RUSTSEC-2026-0381", reason = "only webpki-roots 0.26.11 remains: a shim re-exporting the patched 1.0.10; required by tokio-tungstenite 0.28/0.29" },
]
[licenses]
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"Unicode-3.0",
"Unicode-DFS-2016",
"Zlib",
"OpenSSL",
"CC0-1.0",
"CDLA-Permissive-2.0",
"MITNFA",
"MPL-2.0",
"BSL-1.0",
"Unlicense",
# minicbor's permissive, OSI-approved license. Used for strict App Attest
# assertion CBOR parsing and also transitively by appattest.
"BlueOak-1.0.0",
# bzip2/libbzip2's permissive BSD-like license. New via desktop zip/bzip2
# transitive deps; compatible with Apache-2.0 distribution.
"bzip2-1.0.6",
]
confidence-threshold = 0.8
# mesh-llm workspace crates (pinned git dep) omit a per-crate `license` field in
# their manifests, so cargo-deny reports them as unlicensed. The mesh-llm repo is
# licensed "MIT OR Apache-2.0" (workspace Cargo.toml + top-level LICENSE = Apache-2.0);
# clarify each pulled-in member to that expression. Remove once mesh sets the field
# upstream (filed).
[[licenses.clarify]]
crate = "mesh-llm-config"
expression = "MIT OR Apache-2.0"
license-files = []
[[licenses.clarify]]
crate = "mesh-llm-gpu-bench"
expression = "MIT OR Apache-2.0"
license-files = []
[[licenses.clarify]]
crate = "mesh-llm-host-runtime"
expression = "MIT OR Apache-2.0"
license-files = []
[[licenses.clarify]]
crate = "mesh-llm-plugin"
expression = "MIT OR Apache-2.0"
license-files = []
[[licenses.clarify]]
crate = "mesh-llm-system"
expression = "MIT OR Apache-2.0"
license-files = []
[[licenses.clarify]]
crate = "mesh-mixture-of-agents"
expression = "MIT OR Apache-2.0"
license-files = []
[[licenses.clarify]]
crate = "buzz-desktop"
expression = "Apache-2.0"
license-files = []
[licenses.private]
ignore = true
[bans]
multiple-versions = "warn"
wildcards = "allow"
deny = [
{ name = "ringbuf", version = "<0.5.2", wrappers = ["neteq"], reason = "only audited NetEQ may declare this unused vulnerable dependency; all other consumers must use a patched release" },
]