Repository navigation
chore(deps): move rustls to 0.23.46 and quinn-proto to 0.11.18 for RustSec advisories - #46
Conversation
`cargo audit` fails on RUSTSEC-2026-0346, RUSTSEC-2026-0347, RUSTSEC-2026-0348 and RUSTSEC-2026-0349 against `rustls` 0.23.45. All four are fixed in 0.23.46. They reached the RustSec database on 2026-10-14. Only the `rustls` entry in `Cargo.lock` changes (version and checksum). 0.23.45 and 0.23.46 declare the same dependencies and `rust-version`, every existing requirement on `rustls` already allows the new patch, and the unique package lines of `cargo tree --locked --workspace --all-features --target all -e normal,build,dev --prefix none` differ only in the `rustls` version. `cargo audit` still fails after this change, on five advisories against `quinn-proto` 0.11.16 (RUSTSEC-2026-0338 to RUSTSEC-2026-0342). That entry is left for a separate change; `quinn-proto` is in the lockfile only and `cargo tree` does not list it, so no build compiles it.
dirvine
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES — inherited Security Audit failure
Reviewed exact head 19479c67d8896828b34786772c7926df3932e712 against base 9ae38dd37d213e9b303e7d78cf682242d55dff37.
The Rustls update itself is correct. The remaining blocker is the failed Security Audit job at this head. Cargo.lock still selects quinn-proto 0.11.16, which matches RUSTSEC-2026-0338, 0339, 0340, 0341 and 0342. These findings are inherited from the base; this Rustls change did not introduce them. Quinn is retained only in the lockfile and is absent from the reviewed all-feature/all-target compiled dependency trees, so this is an audit-gate finding, not a claim of demonstrated runtime exposure.
Concrete minimal fix
cargo update -p quinn-proto --precise 0.11.18
cargo metadata --locked --format-version 1 --all-features
cargo audit --jsonCommit the resulting narrow lockfile change and rerun CI. Alternatively, land that fix in a separate prerequisite PR, then rebase this PR and rerun CI.
I exercised this fix in a disposable checkout of this exact head. Whole-lockfile comparison found only Quinn's version and checksum changed; its dependency list stayed identical. Locked metadata exited 0. Cargo audit exited 0 with zero vulnerability matches. Existing non-fatal unmaintained/unsound/yanked warnings remain; this is not a warning-free result. No fix has been pushed, and CI has not run on that disposable change.
Checks on the submitted Rustls change
- Complete diff: only
rustls 0.23.45 -> 0.23.46and its checksum inCargo.lock. - New checksum matches both the official registry index and the downloaded crate archive SHA256. Published dependency tables, features and MSRV are unchanged.
- Locked all-feature metadata and all-target dependency-tree checks pass on base and head.
- The four Rustls advisory matches are cleared. The other observed CI jobs passed; Security Audit remains red.
Review coverage
The required panel is incomplete: GLM 5.3 completed the risk role; Qwen 3.8 completed both roles. GLM's verification role produced no complete final verdict, and DS4 has no completed role review. This is 3/6 completed roles from 2/3 named models, not full-panel consensus.
This request is based on the independently verified failed audit and exercised minimal fix, not on missing panel seats. The incomplete panel still prevents approval. Human risk-tier confirmation, merge and release decisions remain separate.
`cargo audit` fails on RUSTSEC-2026-0338, RUSTSEC-2026-0339, RUSTSEC-2026-0340, RUSTSEC-2026-0341 and RUSTSEC-2026-0342 against `quinn-proto` 0.11.16. 0.11.18 is the first release that fixes all five. Only the `quinn-proto` entry in `Cargo.lock` changes (version and checksum). 0.11.16 and 0.11.18 declare the same dependencies, features and `rust-version`, and `quinn` 0.11.11, the only lockfile entry that depends on it, requires `^0.11.15`. `quinn-proto` is in the lockfile only: `cargo tree --all-features --target all -i quinn-proto` prints nothing, so no build compiles it, and the unique package lines of `cargo tree --locked --workspace --all-features --target all -e normal,build,dev --prefix none` are the same before and after. With this change `cargo audit` reports no vulnerabilities.
dirvine
left a comment
There was a problem hiding this comment.
APPROVE — prior Security Audit blocker resolved
Re-reviewed #46 at head 19fd80ce9481ef02eca79e2c0807d4471ff9b851, against base 9ae38dd37d213e9b303e7d78cf682242d55dff37. This supersedes my earlier REQUEST_CHANGES.
Verified
- The incremental commit changes only the
quinn-protoversion/checksum:0.11.16 → 0.11.18, as requested. The complete PR changes onlyCargo.lock: that update plusrustls 0.23.45 → 0.23.46. No other package blocks, manifests or source files change. - Both new checksums match the official crates.io index and SHA-256 of downloaded crate archives. Both releases are non-yanked. Published dependency requirements, features and declared Rust minimum versions are unchanged.
- Starting from the pristine base, the two precise Cargo updates reproduce the submitted lockfile byte-for-byte.
- Local
cargo audit --jsonexits 0 with zero vulnerability matches, versus nine on the base, using RustSec DB999ec89d5d3f10f20be14750ec8c2d8b44e0ac9b. All five Quinn and four Rustls matches are cleared. The same eight existing warnings remain; this is not a warning-free result. - Local checks on macOS/aarch64, Rust/Cargo 1.96.0: locked all-feature metadata, formatting and
git diff --checkpass.cargo test --locked --all-features -- --test-threads=1passes 109 tests, zero failures or ignored tests, including Anvil-backed tests, withRUSTFLAGS=-D warnings. - Exact-head CI is green: 15 successful check records, 12 distinct check names, none pending. Job steps/logs confirm Security Audit, Ubuntu/macOS all-feature tests, no-default-feature and portable-RPC tests, Clippy, docs, format, WASM and publish dry-run passed.
Panel coverage and caveat checks
6/6 substantive role reviews from 3/3 named models: GLM 5.3/OpenRouter (z-ai/glm-5.3), local Qwen 3.8 (qwen38-27b) and local DS4 Flash (deepseek-v4-flash), each in correctness/verification and adversarial/security roles. All six recommend APPROVE; no blocker dissent.
Two non-blocking panel caveats were checked against source rather than accepted as facts: Qwen suggested an MSRV increase, but both Quinn versions declare Rust 1.85 and this crate declares 1.91; DS4 questioned Quinn's absence from the compiled tree, but reqwest's optional HTTP/3 feature is disabled. Its presence only in the lockfile is expected.
Rustls may tighten TLS acceptance. I did not independently repeat the author's production smoke test. This root-lockfile change does not update downstream applications' lockfiles. No remaining blocker identified; merge and release remain separate human actions.
Linear issue
Closes V2-1595
Risk tier
Proposed rather than asserted. A library's
Cargo.lockis only used when this repo is the workspace root: crates that depend on ant-protocol resolve their own lockfiles, so this changes what this repo's CI and tests build, not what ships downstream. Besides the four advisory fixes, 0.23.46 tightens TLS handling (stricter handshake checks, key-update and I/O fixes); the code builds unchanged on it and the tests below pass. WithAutonomi/saorsa-transport#190 made the samerustlsmove as T1. The second commit movesquinn-proto, which no build here compiles, the same kind of lockfile-only move as WithAutonomi/ant-node#251 (T1).Compatibility
quinn-protois not compiled, so its move changes nothing that is built.Semver impact
Test evidence
Run on this branch, two commits on top of
mainat9ae38dd3, with the RustSec database at its current head (999ec89d).cargo audit: onmain's ownCargo.lockit reports nine vulnerabilities, the fourrustlsadvisories (RUSTSEC-2026-0346 to RUSTSEC-2026-0349) and the fivequinn-protoadvisories (RUSTSEC-2026-0338 to RUSTSEC-2026-0342). After the first commit only the fivequinn-protoones remain; at this head it reports none and exits 0. The same eight warnings (unmaintained, unsound or yanked crates) appear onmainand at every step; they do not fail the job.cargo tree --locked --workspace --all-features --target all -e normal,build,dev --prefix none | sort -u: 586 unique lines onmainand on this branch, identical exceptrustls v0.23.45becomingrustls v0.23.46. Thequinn-protocommit changes nothing in that output.cargo metadata --lockedaccepts the lockfile on cargo 1.88 (older than the 1.91 MSRV), 1.95, 1.98 and 1.99, andcargo update --dry-runfinds nothing to change for either-p rustls --precise 0.23.46or-p quinn-proto --precise 0.11.18.rustls-0.23.46.cratehashes to48e13bd8…andquinn-proto-0.11.18.cratetoa9746dbd…, each the same as the crates.io sparse index, and neither release is yanked.rust-version(1.71). The publishedquinn-proto0.11.16 and 0.11.18 have the same dependency requirements, features andrust-version(1.85), andquinn0.11.11, the only lockfile entry that depends on it, requires^0.11.15. So both entries' dependency lists are still correct.cargo fmt --all -- --check,cargo clippy --locked --all-targets --all-features -- -D warnings(CI's flags, plus--locked),cargo clippy --locked -- -D warnings,cargo doc --locked --all-features --no-depswithRUSTDOCFLAGS=--deny=warnings,cargo build --locked --no-default-featuresandcargo publish --locked --dry-run: all exit 0. Both Clippy runs, the documentation build and the test runs below also print Cargo's future-incompatibility note forproc-macro-error22.0.1, a dependency this PR leaves asmainhas it.--locked:--all-features109 passed, including the Anvil-backedpayment::single_nodetests;--no-default-features105 passed;--no-default-features --features rpc105 passed.antbinary built from ant-client commit33b78931(this change's ant-client counterpart, linkingrustls0.23.46) connected to the production network (six peers) and downloaded a 54,903,201-byte public file in 78.4 s. Separately, ant-node v0.21.0, v0.22.0, v0.23.0-rc.1 and v0.23.0 all lockrustls0.23.45; the smoke log does not record which versions the peers it fetched from run.New dependency
None. Two existing lockfile entries move:
rustlsfrom 0.23.45 to 0.23.46 andquinn-protofrom 0.11.16 to 0.11.18. No entry is added or removed.ADR
n/a, Tier 1.
Mitigation / rollback
Revert the two commits, together or either one alone. They touch only
Cargo.lock, so there is nothing to migrate either way.What this is
The Security Audit job fails on four advisories against
rustls0.23.45, all fixed in 0.23.46, and on five againstquinn-proto0.11.16, all fixed in 0.11.18. This PR moves both lockfile entries, one commit each.rustlsThe four advisories reached the RustSec database on 2026-10-14.
Debugimpls of client session values print the TLS 1.2 master secret or TLS 1.3 resumption PSK.Exposure depends on configuration. The
brotlifeature is off, so 0348 cannot trigger, and nothing in this repo or in the compiled crates that userustlshere (saorsa-transport, reqwest, hyper-rustls, tokio-rustls, rustls-platform-verifier, rustls-post-quantum;quinnandquinn-protoalso depend on it but are lockfile-only and never compiled) enables ECH or implements a customClientSessionStore, so 0346 and 0347 do not apply. 0349 is the one that can apply: client session resumption is on by default, so an on-path attacker could make later connections to a server name use classical-only key exchange, as long as the genuine server accepts that share.quinn-protoThe five advisories (RUSTSEC-2026-0338 to RUSTSEC-2026-0342) were already reported on
main's lockfile, so the Security Audit job stayed red after therustlscommit. The review asked for them to be fixed in this PR withcargo update -p quinn-proto --precise 0.11.18, which is what the second commit is. 0.11.18 is the first release that fixes all five; the newer 0.11.19 declares the same dependencies, and 0.11.18 is kept because it is the version the review tested. Only the entry's version and checksum change.quinn-protois in the lockfile only:cargo tree --all-features --target all -i quinn-protolists nothing, so no build compiles it. It is there becausequinn, its only dependent, is an optional dependency ofreqwestbehind thehttp3feature, which nothing enables; Cargo still records it in the lockfile. This commit therefore clears an audit finding; it does not change any compiled code.