Repository navigation
Conversation
Add docs/SUPPLY_CHAIN.md with one row for each of the 34 direct dependencies on the network and TLS path: unsafe code, native code, build script, proc macros, the untrusted input that reaches it, maintenance, RustSec history, cargo-crev and the cargo-vet audit that covers the locked version. Unsafe, build-script, proc-macro and native-code facts come from the published sources and from the shipped build's dependency tree; every published source was compared with its upstream commit. Four crates are covered by imported audits; the other 30 stay under exemptions. Signed-off-by: Ken Smith <ken@mangoleafstudios.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.
What
Adds
docs/SUPPLY_CHAIN.md, the risk record for the dependencies on the network and TLS path: one row for each of 34 direct dependencies (axum, tower, tower-http, http-body, httpdate, tokio, socket2, tokio-tungstenite, futures-core, futures-util, reqwest, rustls, tokio-rustls, rustls-native-certs, x509-parser, rcgen, p12-keystore, ldap3, if-addrs, url, percent-encoding, form_urlencoded, serde_urlencoded, opentelemetry, opentelemetry_sdk, opentelemetry-prometheus, opentelemetry-otlp, tracing-opentelemetry, prometheus, secrecy, pbkdf2, sha1, sha2, base64). Each row records the locked version, unsafe code (count and where), native or C code, build script, proc macros, the untrusted input that reaches the crate in Ferrofin, maintenance state, RustSec history,cargo crev crate verify, and thecargo-vetaudit that covers the locked version. A legend defines every column and an Evidence section says how each fact was read.No audits are written.
supply-chain/is unchanged. Four crates are covered by imported audits (futures-core,httpdate,percent-encoding,form_urlencoded); the other 30 stay under[[exemptions]], and each such row says "Exempted, not audited".Upgrade note: none.
Why
Nobody had recorded what each network and TLS crate is trusted with, or which audit stands behind its version. This is the first of three risk-record phases of the dependency-audit work (gl-1367); the other two cover parsers of untrusted media and files, and native code, build-time, WASM-runtime and remaining crates, and will add their own sections to the same file.
The audit half of the phase is not done, on purpose. Ferrofin is not writing audits of its own, so the exemptions that cannot be retired by an import stay. The 30 that stay, and why: axum, tower, tower-http, http-body, tokio, socket2, tokio-tungstenite, futures-util, reqwest, rustls, tokio-rustls, rustls-native-certs, x509-parser, rcgen, p12-keystore, ldap3, if-addrs, url, serde_urlencoded, opentelemetry, opentelemetry_sdk, opentelemetry-prometheus, opentelemetry-otlp, tracing-opentelemetry, prometheus, secrecy, pbkdf2, sha1, sha2 and base64 have no imported audit at their locked version. None of the six organisations Ferrofin imports audits them (only base64 0.22.1 and sha2 0.10.9 have an audit of an older version), and the three other organisations in the
cargo-vetpublic registry (Actix, Ariel OS, Fermyon) audit none of them either. An exemption leaves when an import starts to cover its version (cargo vet, thencargo vet prune).How
Everything is in the one new file. How the facts were read, so a reviewer can re-run it:
.cargo_vcs_info.jsonwas fetched and diffed against the published source: nothing differs (apart from cargo's own.cargo-ok).http-body,percent-encodingandform_urlencodedwere published from a dirty tree; only their manifests differ (a version and a category spelling).cargo tree -p ferrofin-server -e normal,build --target x86_64-unknown-linux-gnu --no-dedupe, the shipped build, not fromcargo metadata.cargo metadataunifies dev-dependency features and wrongly showed AWS-LC belowx509-parser; the two dev-only crates (rcgen,tokio-tungstenite0.30.0) are marked as test-build facts.cargo-denyuses; every locked version carries the fixes for the advisories filed against it, including the October 2026rustls(0.23.46) andtokio(1.54.1) releases.prometheus's five sites are behind features Ferrofin leaves off.Worth a close look: the legend (the column definitions the other two phases will reuse), the
base64row (0.23's defaultsimd-unsafefeature compiles the opt-in SIMD engines in, but nothing in the shipped tree selects one), and thetokio-tungsteniterow (Ferrofin's 0.30.0 is test-only; the WebSocket stack that ships isaxum's 0.29.0).No real problem was found, so no issue is linked from a row.
Verification
crates/,apps/,scripts/,.github/orCargo.*, so the cargo gates are skipped (docs-only exception). No handler or core path is touched, so there is no parity row to write.cargo vet --locked(cargo-vet 0.10.3, the CI version):Vetting Succeeded (137 fully audited, 2 partially audited, 406 exempted), the same as on the base.Cargo.lock, the advisory database,supply-chain/and Ferrofin's own call sites. Each round's factual corrections are in the file (thebase64description, AWS-LC belowx509-parser, the proc-macro closures, consumer lists and counts).docs/SUPPLY_CHAIN.md; whichever merges second keeps both sections.Checklist
type(scope): subject) and are signed off (git commit -s)