Repository navigation
v0.9.7 — dependency & security patch (rustls, cryptoki, h2)
Dependency & security patch: rustls, cryptoki, h2
Three security advisories carried out of the dependency tree, plus one opt-in UI change. No change to the default runtime path beyond the dependency updates themselves.
To be straight about severity: none of these is known to be exploitable against macrdp for an authentication bypass — the rustls handshake transcript stays authenticated, so a network-position attacker can't alter or complete a handshake. But the headline one sits in macrdp's own TLS stack, which every client connection terminates on, so upgrading is the right call.
rustls 0.23.40 → 0.23.45 — RUSTSEC-2026-0285 (macrdp's own TLS stack)
Rustls accepted TLS 1.3 handshake messages sent at the wrong encryption level — for example a plaintext EncryptedExtensions packed into the same record as the ServerHello — where RFC 8446 §5.1 requires terminating the connection with an unexpected_message alert. The transcript is still authenticated, so the practical effect is that a peer could send in plaintext what should have been encrypted without rustls rejecting the connection. Functionally the same bug as Go's CVE-2025-61730.
This also moved the crypto provider beneath rustls: aws-lc-rs 1.16.3 → 1.18.1, aws-lc-sys 0.40.0 → 0.45.0, rustls-webpki 0.103.13 → 0.103.15.
cryptoki 0.12.0 → 0.12.1 — RUSTSEC-2026-0286
cryptoki treated the CKA_ALLOWED_MECHANISMS ulValueLen byte count as a CK_MECHANISM_TYPE element count, so a valid non-empty attribute returned through the safe Session::get_attributes API could construct an out-of-bounds slice — a crash, or disclosure of adjacent heap words. It reaches macrdp transitively, through sspi → ironrdp-connector.
h2 0.4.14 → 0.4.16 — RUSTSEC-2026-0258
chacha20 0.10.1 → 0.10.2 — a yank, not a vulnerability
0.10.0 and 0.10.1 were yanked for a correctness bug: an SSE4.1 intrinsic used in the SSE2 backend of the RNG and legacy 64-bit-counter variants (RustCrypto/stream-ciphers#580). The failure mode is an illegal instruction on an x86 CPU that has SSE2 but not SSE4.1, so macrdp's exposure was nil — Apple Silicon never compiles those backends, and every Intel Mac has SSE4.1. Cleared anyway, because a yanked crate in the lockfile is a supply-chain signal worth not carrying.
#185 — the app-switcher HUD now looks like the native Cmd+Tab (@antonmos)
The --app-switcher-hud overlay — the switcher macrdp draws on screen so the RDP client can see it — moves from its first-cut "spike" look to the system style: a light translucent slab (.popover material forced vibrant-light, continuous 28 px corner, hairline border), bigger icons that scale to fit the display (144 px for a few apps, shrinking to keep the row within ~80 % of the display width, floored at 32 px), and a subtler ring on the selected icon. Opt-in as before — nothing changes unless you pass --app-switcher-hud.
Verified before tagging
Stable and nightly cargo fmt --check, cargo clippy --all-targets -- -D warnings, and the full test suite, all clean. Because this release swaps the TLS stack underneath, the release binary was also driven through a live CredSSP/NLA handshake with a real sdl-freerdp client (scripts/test-audit-log.sh): correct password accepted, wrong password cleanly rejected, 12/12 audit assertions. cargo-deny is clean on both invocations CI runs, and the daily scheduled scan — red 2026-09-15 → 09-17 on the rustls/cryptoki pair — is green again.
Artifacts
macrdp-v0.9.7-aarch64-apple-darwin-app.zip— themacrdp.appbundle (Apple Silicon). Ad-hoc signed, so right-click → Open on first launch (or build a locally-notarized bundle withpackaging/make-app.sh). Includes the smart-card IFD handler + helpers.macrdp-v0.9.7-aarch64-apple-darwin.tar.gz— the baremacrdpbinary.SHA256SUMS—shasum -a 256 -c SHA256SUMSto verify.
Full narrative notes for every release: docs/release-history.md.
Full Changelog: v0.9.6...v0.9.7