Files
Oxicloud/.cargo/audit.toml
T

189 lines
10 KiB
TOML

[advisories]
ignore = [
# paste unmaintained — transitive via azure_core 0.21.0 (latest available).
# No direct security impact; no upgrade path exists.
# keep warning "RUSTSEC-2024-0436",
# rand 0.7.3 unsound — transitive via http-types → azure_core 0.21.0.
# Only exploitable with a custom logger using rand::rng(); not applicable here.
"RUSTSEC-2026-0097",
# RUSTSEC-2023-0071 (Marvin Attack): rsa crate is a transitive dependency from jsonwebtoken.
# Not affected: This application uses HS256 for internal JWT signing and only performs
# RSA public key verification (not private key operations) for OIDC/OAuth2 tokens.
"RUSTSEC-2023-0071",
# rustls-webpki 0.101.7 — three advisories, all transitive via AWS SDK → rustls 0.21.12.
# aws-sdk-s3 1.x (latest) has not yet migrated to rustls 0.23.x; no upgrade path available.
# Severity: low — exploitation requires either a rogue CA or a MitM on AWS S3 infrastructure.
# RUSTSEC-2026-0104: DoS via panic in CRL parsing (only if CRLs are processed).
# RUSTSEC-2026-0098: URI name constraints ignored (requires CA misissuance).
# RUSTSEC-2026-0099: Wildcard name constraint bypass (requires CA misissuance).
"RUSTSEC-2026-0104",
"RUSTSEC-2026-0098",
"RUSTSEC-2026-0099",
# h2 0.3.27 — RUSTSEC-2026-0258 "unbounded empty DATA frames"
# (GHSA-q83h-524g-xf6h). Transitive via aws-smithy-http-client 1.1.12
# → hyper 0.14.32 → h2 0.3.27. The patched line is 0.4.16+, but hyper
# 0.14's `h2 = "0.3"` requirement pins us to the 0.3.x branch which
# will not receive a backport — real fix requires aws-smithy-http-client
# to migrate to hyper 1.x (which our other h2 copy — 0.4.16, already
# bumped — is on). The 0.4.x copy is fixed via `cargo update`; this
# ignore covers only the 0.3.x chain.
#
# Severity: low (advisory's own classification). Attack is empty-DATA-
# frame flooding by a malicious HTTP/2 peer → memory pressure or panic.
# In this codebase h2 0.3.x runs strictly on the CLIENT side of AWS
# SDK requests to S3 endpoints. Exploitation requires either
# compromising AWS S3 (out-of-scope) or MitM with a valid TLS cert
# for the configured S3 host (bigger problem than the DoS). No
# data-integrity or auth impact; panic path contained by
# request-level unwind.
#
# Un-ignore trigger: aws-smithy-http-client releases a version that
# switches to hyper 1.x (checkable with `cargo tree -i h2@0.3` — the
# command returns no rows once the chain is gone). Track upstream at
# https://github.com/smithy-lang/smithy-rs/issues (search "hyper 1").
"RUSTSEC-2026-0258",
# instant unmaintained — transitive via azure_core 0.21.0 (latest available).
# No direct security impact; no upgrade path exists.
"RUSTSEC-2024-0384",
# azure_core 0.21.0 writes the `authorization` header value to logs —
# `policies/transport.rs` does `debug!("…{request:#?}")` over the whole
# request. For a SharedKey entry that value is the per-request HMAC
# signature; for a SAS entry it is the token. Severity 6.5 (medium).
#
# The advisory says "upgrade to >=0.22.0". That version does not exist:
# `azure_core` jumped 0.21 → 1.x, and `azure_storage_blobs` never left
# 0.21.0 before being archived. So the stated remedy IS the official-SDK
# migration, tracked separately alongside the quick-xml pair above.
#
# Not reachable at our log levels: the line is `debug!` on the
# `azure_core::policies::transport` target, and the default filter is
# `info`. It fires only if an operator explicitly asks for
# `RUST_LOG=…,azure_core=debug`, which is not hypothetical — that is the
# invocation used to diagnose the Azurite migration hang. **Do not run
# `azure_core=debug` against a real Azure account**; it prints request
# signatures to the terminal. Against Azurite it only exposes the
# published dev key's signatures.
#
# A subscriber-level directive pinning that target off was prototyped
# and rejected 2026-09-02 — not worth carrying a filter hack for a
# dependency being replaced.
#
# Un-ignore trigger: the azure_storage_blob 1.x migration lands
# (`cargo tree -i azure_core@0.21` returns no rows).
"RUSTSEC-2026-0275",
# quick-xml 0.31.0 — transitive via azure_core 0.21.0 (unofficial SDK,
# now archived). Our direct dep is already on 0.41.0; the 0.31 copy is
# only reachable through the azure_storage_blobs chain, which parses
# XML responses received from Azure Storage over TLS. Neither CVE is
# exploitable without attacker-controlled XML, so the vector requires
# MitM of the TLS channel to Azure (or a compromised storage
# endpoint). Real fix is migrating to the official azure_core 1.0 /
# azure_storage_blob 1.0 SDK — tracked separately.
# RUSTSEC-2026-0195: unbounded ns-declaration allocation → mem-DoS
# RUSTSEC-2026-0194: quadratic dup-attribute check → CPU-DoS
"RUSTSEC-2026-0195",
"RUSTSEC-2026-0194",
# azure_core 0.21.0 — "Legacy azure_core writes the authorization
# header value to logs" (RUSTSEC-2026-0275, 6.5 medium). Same
# unofficial archived SDK, same absent upgrade path as the other
# 0.21.0-chain advisories above: the advisory's "upgrade to
# >=0.22.0" applies to the official azure_core crate line, not to
# the archived 0.21.0 we're pinned on via the unofficial
# azure_storage_blobs SDK. Real fix is the official azure_core 1.0 /
# azure_storage_blob 1.0 SDK migration tracked separately (memory
# project_azure_sdk_migration_pending) — blocked upstream by the
# 1.0 SDK dropping shared-key auth.
#
# Exposure in this codebase is narrow. The advisory covers the
# HTTP client emitting the `Authorization` header value into log
# records; for our Azure backend usage that header value is
# `SharedKey <account>:<HMAC-SHA256>` — the shared key itself
# never appears, only a per-request HMAC signature bound to the
# request's `x-ms-date` and unusable outside the ~15 min clock-skew
# window. Reaching the log path further requires (a) an Azure
# backend actually being configured (S3 and local are the
# alternatives) and (b) the tracing subscriber emitting DEBUG
# records for the `azure_core` target — production defaults are
# INFO. Under both conditions the worst-case leak is replay of
# individual object operations within the skew window by an
# attacker who already has production log read access; the shared
# key cannot be derived.
#
# Un-ignore trigger: the official azure_core 1.0 migration lands —
# at which point this entry and the other azure_core 0.21.0-chain
# entries above (RUSTSEC-2026-0097, -2024-0384, -2026-0195,
# -2026-0194) all go away together.
"RUSTSEC-2026-0275",
# wasmtime 43.0.2 — "Stores can mix up type indices between engines"
# (GHSA-hgjw-h833-99q9). Transitive via extism 1.30.0 (latest published;
# extism `main` still pins wasmtime 43, no upgrade path). The advisory
# has no patched 43.x — fix requires wasmtime >=46.0.2 or >=47.0.3, and
# forcing that via [patch.crates-io] would break extism (three major
# wasmtime API bumps between 43 and 46). Real fix waits on extism
# upstream to migrate.
#
# Runtime exposure is zero in default deployments:
# - `plugins` is an OPT-IN build feature; default builds and the CI
# release binary don't link wasmtime at all.
# - Runtime activation additionally requires OXICLOUD_ENABLE_PLUGINS=true.
# - Plugin binaries are ADMIN-SUPPLIED, not attacker input.
# - The advisory's attack pattern is multi-Engine Store-sharing;
# OxiCloud's plugin runtime creates one fresh Plugin per invocation
# with its own Store (see infrastructure/services/plugins/runtime.rs).
"RUSTSEC-2026-0222",
# wasmtime 43.0.2 — "Filesystem sandbox escape when paths or symlinks
# contain trailing slashes" (RUSTSEC-2026-0269, 8.8 high). Same crate,
# same chain and same absent upgrade path as RUSTSEC-2026-0222 above:
# extism 1.30.0 is the latest published and pins wasmtime 43, while the
# advisory's fixed releases are >=24.0.13 <25, >=36.0.14 <37,
# >=46.0.3 <47, >=47.0.4 — none in the 43.x line, so there is no
# version satisfying extism's requirement that carries the fix.
#
# NOT REACHABLE, and for a stronger reason than the build-feature
# gating: this is a WASI filesystem sandbox escape, and OxiCloud's
# plugin runtime gives plugins no filesystem to escape from.
# `plugins/runtime.rs::compile` builds every plugin with
# `.with_wasi(false)` and declares no `allowed_paths`, so there are no
# preopened directories — the escape needs one to traverse out of.
# `.disallow_all_hosts()` removes outbound network on the same path.
#
# The build-level gating from the entry above still applies on top:
# `plugins` is opt-in and absent from `default`, so the CI release
# binary does not link wasmtime; runtime activation additionally needs
# OXICLOUD_ENABLE_PLUGINS=true; and plugin binaries are admin-supplied,
# not attacker input.
#
# Un-ignore trigger: EITHER extism releases a version on wasmtime
# >=46.0.3 (check with `cargo tree -i wasmtime --features plugins`),
# OR `plugins/runtime.rs` gains `allowed_paths` / `with_wasi(true)` —
# at which point this stops being unreachable and blocks release
# rather than being ignored.
"RUSTSEC-2026-0269",
# astral-tokio-tar 0.5.6 — tar extraction advisories, transitive via
# testcontainers → testcontainers-modules, a DEV-dependency used only by
# the `--cfg integration_tests` harness to spin up throwaway Postgres
# containers. Never compiled into the production binary and never fed
# attacker-controlled tar input — the only archives extracted are the
# official Postgres images the test harness pulls. testcontainers 0.25.2
# pins astral-tokio-tar to ^0.5, so the fixed 0.6.x is not reachable
# without a testcontainers major bump (tracked separately).
# RUSTSEC-2026-0145 / -0112: PAX header desynchronization
# RUSTSEC-2026-0113: unpack_in symlink-following chmod
# RUSTSEC-2026-0066: insufficient PAX extension validation (low)
"RUSTSEC-2026-0145",
"RUSTSEC-2026-0112",
"RUSTSEC-2026-0113",
"RUSTSEC-2026-0066",
]