Skip to content

chore(deps): move rustls-webpki to 0.103.16, webpki-root-certs and webpki-roots to 1.0.10 for three RustSec advisories - #384

Merged
Nic-dorman merged 2 commits into
mainfrom
nic/v2-1665-webpki-emsign-advisories
Oct 21, 2026
Merged

Nic-dorman merged 2 commits into
mainfrom
nic/v2-1665-webpki-emsign-advisories

Conversation

@Nic-dorman

@Nic-dorman Nic-dorman commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Linear issue

Closes V2-1665

Part of V2-1659, which tracks the same move across every affected WithAutonomi lockfile.

Risk tier

  • T0 — docs / tooling / CI / pure UX-output. Repo CI only.
  • T1 — client-only, no network-facing behavior change. CI + prod compat smoke.
  • T2 — node/client logic with behavioral surface, no protocol/format/economics change. Dev testnet + ADR.
  • T3 — protocol / storage format / payments / routing. T2 evidence + adversarial testing.

Proposed rather than asserted. Lockfile only: 3 crates move to their patched releases (rustls-webpki 0.103.15 → 0.103.16; webpki-roots and webpki-root-certs from 1.0.6–1.0.9, depending on the lockfile, → 1.0.10), with the same dependency lists. The new releases declare rust-version 1.71 (some of the old ones declared 1.64 or 1.70), still below the projects' Rust 1.82 floor. The one behaviour change is that TLS certificate paths through the distrusted emSign intermediates, or the removed emSign ECC Root CA - G3 root, no longer verify. No Autonomi protocol message changes. Same tier as the earlier rustls lockfile moves (ant-client#232, ant-node#256, ant-protocol#46, saorsa-core#177, saorsa-transport#190).

Compatibility

  • Wire: none for the Autonomi protocol. For TLS, chains through the distrusted emSign intermediates now fail verification.
  • Storage: none.
  • API: none. No manifest or source file is touched; this is the lockfile only.

Semver impact

  • breaking
  • feature
  • fix

Test evidence

Run on this branch: one commit on top of main at 848a2f8. RustSec database at 4b587f00 (2026-10-21), cargo-audit 0.22.1, cargo 1.97.1.

  • cargo audit -f <lockfile>: on main's lockfiles it reports RUSTSEC-2026-0381, RUSTSEC-2026-0382, RUSTSEC-2026-0383; on this branch none of them, and every other finding is unchanged.
  • The diff is exactly the version and checksum lines of the moved entries: antd/Cargo.lock 8 lines, antd-rust/Cargo.lock 14 lines, ffi/node/Cargo.lock 12 lines, ffi/rust/Cargo.lock 12 lines (the extra 2 in antd-rust are the wrapper's reference to its parent). No entry is added or removed.
  • cargo metadata --locked accepts every changed lockfile. Each moved release has the same dependency list as the version it replaces, checked entry by entry.
  • cargo update -p <crate> --precise <version> also re-picked some unrelated multi-version edges (getrandom, windows-sys). The lockfile was reduced to the target entries, so those edges stay as main has them.
  • Not run locally: builds, Clippy and tests are left to this PR's CI. No production compat smoke was run, because nothing on an Autonomi protocol path changes.

New dependency

None. Existing lockfile entries move to their patched releases (one or several patch releases, depending on the lockfile); none is added or removed.

ADR

n/a, Tier 1.

Mitigation / rollback

Revert the commit. It touches only lockfiles, so there is nothing to migrate either way.


What this is

Three RustSec advisories published on 2026-10-19 and 2026-10-20 cover one incident, CVE-2026-111943: the private keys of some emSign intermediate CAs are now well known, so certificate paths through them must stop verifying. This lockfile is affected by:

  • RUSTSEC-2026-0382 (rustls-webpki, fixed in 0.103.16): rejects certificate paths that contain the distrusted emSign intermediate public keys.
  • RUSTSEC-2026-0383 (webpki-root-certs, fixed in 1.0.10): drops the emSign ECC Root CA - G3 root.
  • RUSTSEC-2026-0381 (webpki-roots, fixed in 1.0.10): drops the same root.
Lockfile Moves
antd/Cargo.lock rustls-webpki 0.103.15 → 0.103.16, webpki-root-certs 1.0.7 → 1.0.10
antd-rust/Cargo.lock rustls-webpki 0.103.15 → 0.103.16, webpki-root-certs 1.0.7 → 1.0.10, webpki-roots 1.0.7 → 1.0.10
ffi/node/Cargo.lock rustls-webpki 0.103.15 → 0.103.16, webpki-root-certs 1.0.9 → 1.0.10, webpki-roots 1.0.9 → 1.0.10
ffi/rust/Cargo.lock rustls-webpki 0.103.15 → 0.103.16, webpki-root-certs 1.0.6 → 1.0.10, webpki-roots 1.0.8 → 1.0.10

rustls-webpki is rustls's certificate-path verifier, compiled in through rustls, rustls-platform-verifier and rustls-post-quantum. webpki-root-certs is the bundled root store rustls-platform-verifier uses.

In antd-rust, the webpki-roots 0.26.11 compatibility wrapper stays (it is unaffected and re-exports its 1.x parent); its dependency reference moves to the 1.0.10 parent. In ffi/node and ffi/rust, webpki-roots is the root store reqwest/hyper-rustls compile in. The zip 2.4.2 findings in antd and the ffi lockfiles are V2-1634 and are unchanged here.

🤖 Generated with Claude Code

…bpki-roots to 1.0.10 for three RustSec advisories

The emSign distrust (CVE-2026-111943): RUSTSEC-2026-0382 (rustls-webpki), RUSTSEC-2026-0383 (webpki-root-certs) and
RUSTSEC-2026-0381 (webpki-roots) fail the
Security Audit job. Each entry moves one patch release; nothing else in the
lockfile changes.

Closes V2-1665

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@dirvine dirvine left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE — no verified blocking defect

Reviewed WithAutonomi/ant-sdk #384 at 2bee0162a3ed9a2e725c3ba2140a61ce66f53a69, against f06b671fac28b625567f6c2b39e3358ef0b38072. Scope: every changed hunk in all four Cargo.lock files; no source or manifest changes.

Verified

  • The affected lockfiles resolve rustls-webpki to 0.103.16 and webpki-root-certs / webpki-roots, where present, to 1.0.10. These meet the patched floors for RUSTSEC-2026-0382, 0383 and 0381. The older webpki-roots wrapper resolves to the patched 1.x package.
  • Registry checksums match the downloaded crate archives and lock entries. New releases are not yanked. Published dependency and feature sections are unchanged, including optional and target-specific dependencies. The new Rust 1.71 floor remains below the projects' Rust 1.82 floor.
  • cargo metadata --locked passes for all four manifests. Reproduction from the exact base is byte-identical for antd-rust and ffi/node. For antd and ffi/rust, Cargo also rewrites unrelated windows-sys edges; the PR deliberately retains their existing valid resolution.
  • Local macOS cargo test --locked --manifest-path antd-rust/Cargo.toml exits 0: 170 unit tests, 1 proto-drift test, 5 example tests, 3 doc tests. The two live integration tests return early without service configuration; this is not live-network evidence.
  • Current-head CI confirms locked tests: 154 passed for antd; 23 passed, 1 ignored for ant-ffi, plus successful locked release builds and binding generation. Windows Node 20 and 22 tests and Windows x86_64/ARM64 builds pass.

Panel and dissent

6/6 role reviews completed: GLM 5.3, Qwen 3.8 and DS4, each in correctness and adversarial roles. 4 APPROVE; 2 CHANGES_REQUIRED. This is not unanimous.

Qwen objects in both roles because two lockfiles differ from fresh Cargo update output, and predicts locked builds/CI will fail. I do not promote that prediction to a blocking defect: unchanged published dependencies, successful locked metadata, and the actual current-head antd locked CI and ant-ffi locked CI contradict it. The resolver-normalisation difference remains a maintenance caveat; Qwen's dissent is retained, not counted as approval.

Caveats and next step

  • Raw audits clear the targeted advisories and introduce no new findings. antd-rust now exits 0. The other three still exit 1 because of inherited zip advisories; existing warnings are unchanged. Green filtered CI is not a clean raw audit.
  • Please correct the description's “one patch” and “same rust-version” claims: some updates span several patch releases, and some old releases declare Rust 1.64/1.70, not 1.71. These are non-blocking description errors.
  • At the pre-submission CI snapshot, 40/41 checks pass; still pending: build aarch64-apple-darwin. Leave merge gated on CI completion. No merge or release performed. No production TLS smoke test performed.

Authored by Hermes. The six independent role receipts share frozen evidence SHA256 e09ffc0ce21560bf473a1e44de1c610670647f700e4a79d1e87e4aa6087f5870. One narrative MSRV typo in that packet was checked against its correct raw registry records; the conclusion is unchanged.

@Nic-dorman
Nic-dorman merged commit 6c30f00 into main Oct 21, 2026
41 checks passed
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.

2 participants