Skip to content

chore(deps): tokio 1.53.3 for RUSTSEC-2026-0386 and zod 4.6.7 for GHSA-mrhx-c7xc-m3w5 - #71

Merged
jamesyong-42 merged 2 commits into
mainfrom
deps/tokio-rustsec-2026-0386-zod
Oct 24, 2026
Merged

jamesyong-42 merged 2 commits into
mainfrom
deps/tokio-rustsec-2026-0386-zod

Conversation

@jamesyong-42

@jamesyong-42 jamesyong-42 commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Both audits went red on main after #70's checks. Two advisories entered their databases on 2026-10-23, both after main's last clean audits at 09:06Z. This PR moves the two lockfiles and changes no source or manifest.

50343dd: tokio 1.53.3 for RUSTSEC-2026-0386.

  • The advisory: dated 2026-10-13, it entered the RustSec database at 14:42Z on 2026-10-23. It is informational "unsound": tokio's safe AsyncFd constructors (new, with_interest, try_new, try_with_interest) accept any T: AsRawFd, so safe code can register a descriptor it does not own.
  • The fix upstream: tokio 1.51.6 and 1.53.3 patch it by deprecating those constructors in favor of the unsafe AsyncFd::register. 1.52.3 is affected.
  • Why the audit fails: .cargo/audit.toml denies warnings.
  • Path: tokio 1.52.3 ← truffle-core 0.7.19, ghosttea, ghosttead and ghosttea-truffle, and through tokio-util, quinn and tokio-tungstenite.
  • Exposure read: there is no AsyncFd call in ghosttea's Rust sources, in truffle-core 0.7.19, or in tokio-util 0.7.18, quinn 0.11.11 and tokio-tungstenite 0.29.0. The rest of the dependency tree was not checked.
  • The change: cargo update -p tokio --precise 1.53.3, and cargo metadata --locked agrees. tokio 1.53.3 needs Rust 1.71, under the workspace's 1.88.

Cargo also re-points six windows-sys edges. The same command makes cargo's resolver move six packages' windows-sys edge from 0.61.2 to 0.52.0: errno 0.3.14, quinn-udp 0.5.15, rustix 1.1.4, rustls-platform-verifier 0.7.0, tempfile 3.27.0 and winapi-util 0.1.11.

  • Each of the six declares a windows-sys range that admits both versions.
  • Both versions were already in the lock, and no package is added or removed. tokio's own edge stays on 0.61.2.
  • It affects Windows targets only. This PR's Windows gate and lifecycle soak exercise it.
  • It is not avoidable without hand-editing the lock. Setting the ghosttea-config patch line aside (f17a0ff's method) gives the same lock, and so does tokio 1.54.1.

The iOS inventory records the lock's hash, so its documented chain regenerated it, as #69 did. Only cargoLockSha256 and the hashes derived from it move. tokio is not an iOS component.

f88df38: zod 4.6.7 for GHSA-mrhx-c7xc-m3w5 (CVE-2023-54404, high): "Zod can exhaust memory while validating oversized constrained collections", zod < 4.6.6.

  • Timing: it was first published on 2026-10-01 unreviewed. GitHub reviewed it at 18:26Z on 2026-10-23, and that is when npm audit --audit-level=high began failing on it.
  • Dev-only: zod 4.4.3 comes in through eslint-plugin-react-hooks 7.1.1 (zod: ^3.25.0 || ^4.0.0) and zod-validation-error 4.0.2. The lock marks it dev. No published package ships zod, so nothing a consumer installs changes.
  • The change: npm update zod --package-lock-only --ignore-scripts moves zod alone to 4.6.7, the newest 4.x. No manifest changes.
  • Left as they are: three dev-only moderates, @vitest/mocker (through vitest) and fast-uri 3.1.8.

Expected red: audit-published. This tree's Apple native source digest (0c82a3a6…) still differs from the pinned 0.13.1 artifact's (fa08d019…), as it has since #69. Cargo.lock is one of that digest's inputs. 0.13.2 republishes the artifact.

Checks

  • Desktop gates 40044989270 and iOS release hardening 40044991615 run on the head, and this PR's own checks run as well.
  • Local checks:
    • cargo audit is clean (263 crates), and npm audit at high is 0;
    • the iOS BOM, release-resources and App Store checks pass, and so does check:swiftpm:manifests;
    • Prettier over format:check's paths passes.
  • Both audits ran in the push command itself, and the push ran only because both exited 0.
  • No source file changes.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

jamesyong-42 and others added 2 commits October 23, 2026 17:25
…ed, an unsound AsyncFd constructor

- RUSTSEC-2026-0386 (dated 2026-10-13; it entered the advisory database 2026-10-23 14:42Z, after
  main's 09:06Z audit was clean): tokio, informational "unsound". `AsyncFd::new`, `with_interest`,
  `try_new` and `try_with_interest` accept any `T: AsRawFd`, so safe code can register a descriptor it
  does not own. Patched in 1.51.6 and 1.53.3, which deprecate them for the `unsafe` `AsyncFd::register`;
  1.52.3 is affected. audit.toml denies warnings, so `cargo audit` fails on it. The path here is tokio
  1.52.3 <- truffle-core 0.7.19, ghosttea, ghosttead and ghosttea-truffle (and tokio-util, quinn and
  tokio-tungstenite).
- Exposure read: no `AsyncFd` call in ghosttea's Rust sources, in truffle-core 0.7.19, or in tokio-util
  0.7.18, quinn 0.11.11 and tokio-tungstenite 0.29.0. The rest of the dependency tree was not checked.
- `cargo update -p tokio --precise 1.53.3`. tokio's version and checksum move, and cargo's resolver
  re-points six packages' windows-sys edge from 0.61.2 to 0.52.0: errno 0.3.14, quinn-udp 0.5.15,
  rustix 1.1.4, rustls-platform-verifier 0.7.0, tempfile 3.27.0 and winapi-util 0.1.11. Each declares
  a windows-sys range that admits both, both versions were already locked, no package is added or
  removed, and tokio's own edge stays on 0.61.2. It affects Windows targets only.
  - Setting the ghosttea-config patch line aside (f17a0ff's method) gives the same lock, and so does
    tokio 1.54.1. A lock with tokio alone would have to be hand-written.
  - `cargo metadata --locked` agrees. tokio 1.53.3's rust-version is 1.71, under the workspace's 1.88.
- The iOS inventory records the lock's hash, so its documented chain regenerated it, as b09caeb did.
  Only cargoLockSha256 and the hashes derived from it move. tokio is not an iOS component.
- Expected red: Cargo.lock is an Apple artifact source input, so this tree's digest (0c82a3a6...) still
  does not match the pinned 0.13.1 artifact's (fa08d019...). `audit-published` fails until 0.13.2
  republishes the artifact, as it has since #69.
- Checks here: cargo audit is clean (263 crates); the iOS BOM, release-resources and App Store checks
  and `check:swiftpm:manifests` pass. npm audit at high is 0 once the zod commit above this one lands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, dev tooling only

- GHSA-mrhx-c7xc-m3w5 (CVE-2023-54404, high): "Zod can exhaust memory while validating oversized
  constrained collections", zod < 4.6.6. GitHub reviewed it 2026-10-23 18:26Z, which is when npm audit
  began reporting it, after main's 09:06Z audit was clean. `npm audit --audit-level=high` fails on it,
  in dependency-audit and in publish-release's validate.
- Dev-only: zod 4.4.3 comes in through eslint-plugin-react-hooks 7.1.1 (`zod: ^3.25.0 || ^4.0.0`) and
  zod-validation-error 4.0.2. The lock marks it `dev`, and no published package depends on it.
- `npm update zod --package-lock-only --ignore-scripts`: package-lock.json moves zod alone, to 4.6.7,
  the newest 4.x (its version, resolved URL and integrity). No manifest changes.
- npm audit at high is 0. Three moderates remain, all dev tooling and out of scope here: @vitest/mocker
  (through vitest) and fast-uri 3.1.8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jamesyong-42
jamesyong-42 merged commit 4b03895 into main Oct 24, 2026
14 of 15 checks passed
@jamesyong-42
jamesyong-42 deleted the deps/tokio-rustsec-2026-0386-zod branch October 24, 2026 00:53
jamesyong-42 added a commit that referenced this pull request Oct 24, 2026
- Package.swift and apple-native-artifact.lock.json now name
  ghosttea-apple-native-21a593e3611b. ghosttea-apple-native-artifact.yml
  run 40047394201 built it from the clean release commit 8263cf0
  (release/0.13.2), then:
  - qualified it: the complete SwiftPM suite (298 tests), and a
    local-artifact consumer linking all 18 public library products
    against the candidate;
  - attested it (attestation 59304697);
  - published it after promotion through the protected release
    environment.
- The fields come from the SERVED release, not the run. The lock's tag,
  url, checksum, size, contentDigest, sourceDigest, entries and slices equal
  the published GhostteaAppleNative.xcframework.zip.json, field for field.
  - Here: the served archive's SHA-256 41e7a5ec… equals
    `swift package compute-checksum`, and its size is 45310278. The source
    digest 0c9f828e… is `nativeSourceDigest()` of this tree, and
    `check:apple-native-artifact` and `check:swiftpm:manifests` pass.
  - In CI: the promotion job re-downloaded the published assets and
    re-derived from those bytes the checksum, the content digest 21a593e3…
    (137 entries), the three slice digests and the source digest
    (`verify:ghosttea-apple-native-package`).
- `check:apple-native-artifact:release` was not run here, because this
  release has no local build window. The release PR's `audit-published`
  runs it against this lock, with the published-artifact consumer.
- It supersedes ghosttea-apple-native-6c5898e91c6a, the 0.13.1 artifact.
  #69's ctutils move, #71's tokio move and the 0.13.2 bump moved the native
  source digest (fa08d019… to 369b5f27…, 0c82a3a6…, then 0c9f828e…)
  through Cargo.lock, Cargo.toml, native/ghosttea/Cargo.toml, and
  ghosttea-core's and ghosttea-vt's Cargo.toml. A field-only update was not
  possible. #70's soak change and the audit.toml line are outside the
  digest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jamesyong-42 jamesyong-42 mentioned this pull request Oct 24, 2026
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.

1 participant