Supply-chain follow-ups¶
Situation¶
While landing deterministic supply-chain scanners (see
PLAN-supply-chain-scanning.md) the initial cargo deny
check run against develop surfaced a set of advisories
and unmaintained crates. Two were fixable in-place and
were folded into the scanners PR:
RUSTSEC-2026-0098+RUSTSEC-2026-0099— rustls-webpki 0.103.10 name-constraint bypass vulnerabilities. Resolved bycargo update -p rustls-webpkito 0.103.12.
The remaining five items have been added to the
[advisories].ignore list in deny.toml with inline
rationale so that cargo deny check passes against
develop. This plan tracks the debt so we can pay it down.
Each ignore entry in deny.toml has a matching section
below. When an ignore is resolved, delete both the
deny.toml entry and the section here in the same PR.
Tracked debt¶
1. openh264-sys2 0.6.6 heap overflow (RUSTSEC-2025-0008)¶
- Ignore rationale: the upstream fix is in version
0.8.0, which is a semver-incompatible upgrade from 0.6.6.
Whatever pulls
openh264into our tree (most likely a transitive viawebrtc,gstreamer, or a test dep) needs to be audited and either updated to a version that takesopenh264 >= 0.8, or swapped for a different H.264 decoder. - Attack surface: heap overflow in H.264 decoding. If the SPICE server streams H.264 to us (not current, but possible in future), a malicious server could trigger the overflow. Low current exposure, rising.
- Action plan:
- Identify the inclusion path
(
cargo tree -i openh264-sys2). - Check whether the direct dependent has a newer release tracking openh264 0.8+.
- If yes, update the direct dep. If no, evaluate whether we need that crate at all — ryll does not currently use H.264 decoding so this may be removable.
- Remove ignore when:
openh264-sys2 >= 0.8.0or the transitive inclusion is removed.
2. paste 1.0.15 unmaintained (RUSTSEC-2024-0436)¶
- Ignore rationale: the author archived the crate but
did not publish a fix or a CVE. A drop-in fork (
pastey) exists with the same API.pastereaches us transitively. - Attack surface: none direct; it is a proc-macro for identifier pasting used at compile time. The risk is only that it no longer receives bug fixes.
- Action plan:
cargo tree -i pasteto find direct dependents.- For each direct dependent we control, swap to
pasteyif they accept the patch, or vendor-patch. - For upstream dependents we don't control, wait for their migration. Re-check every 6 months.
- Remove ignore when:
pasteno longer appears incargo tree, or the RustSec advisory is withdrawn.
3. rand 0.8.5 unsound with custom logger (RUSTSEC-2026-0097)¶
- Ignore rationale: the unsoundness requires a custom
logger that calls
rand::rng()(orrand::thread_rng()) in the log emission path. ryll's logging usestracingwithout any code path that calls intorand, so the trigger condition is not met. The fix requiresrand >= 0.8.6(or 0.9.3 / 0.10.1), which is blocked by the transitive pull viarsa 0.9.10. - Attack surface: none in our configuration.
- Action plan:
- Track the
rsacrate migration path (see item 4). Anrsaupdate will likely bringrandforward. - If we add a custom logger in the future, re-audit before this ignore is in place.
- Remove ignore when:
randin our tree is=0.8.6 / 0.9.3 / 0.10.1.
4. rsa 0.9.10 Marvin timing attack (RUSTSEC-2023-0071)¶
- Ignore rationale: no fixed version is available in the ecosystem. The RustSec advisory has been open since
- The attack requires timing observation of RSA operations performed by the ryll client; the attacker would need to be on the same machine or have a high-precision network timing side-channel.
- Attack surface: whatever uses
rsain our tree — likely TLS key operations or SPICE ticket decryption. Needs confirmation viacargo tree -i rsa. - Action plan:
- Identify direct dependents via
cargo tree -i rsa. - Check whether our usage performs RSA operations on attacker-observable timing (SPICE ticket decrypt is a plausible candidate).
- If yes, consider constant-time RSA alternatives
(
rustls's crypto provider,boring-rs, etc.) or switch the SPICE auth path to a non-RSA scheme. - Track the
rsacrate for a fix — subscribe to the RustSec advisory or thersacrate releases. - Remove ignore when: a patched
rsaversion ships, or we migrate off thersacrate.
5. rustls-pemfile 2.2.0 unmaintained (RUSTSEC-2025-0134)¶
- Ignore rationale: the repository was archived in
August 2025. Functionality has been incorporated into
rustls-pki-types >= 1.9.0via thePemObjecttrait. The latestrustls-pemfileis effectively a re-export shim. Migration is a code change in whatever uses it. - Attack surface: PEM parsing surface for our TLS setup. No known exploit — the advisory is unmaintained-status, not a vulnerability.
- Action plan:
cargo tree -i rustls-pemfileto find our usage.- Migrate our TLS setup to
rustls-pki-typesPemObjectAPIs. This may be a direct code change in ryll or may need to wait for an upstream dep to migrate. - Drop
rustls-pemfilefromCargo.toml. - Remove ignore when:
rustls-pemfileno longer appears incargo tree.
Also tracked: duplicate-version warnings¶
cargo deny check currently reports ~45 duplicate-version
warnings (set to warn, not deny). Most are in the
Windows / Wayland / macOS backend ecosystems and come from
eframe pulling in multiple versions of the same
platform-integration crates. These are noise for now;
tightening multiple-versions from warn to deny is a
later goal once we understand the baseline.
No individual action item for this — review the list quarterly and pick off easy wins (e.g. crates where upgrading one direct dep resolves the duplicate).
Success criteria¶
This plan is complete when:
- All five
[advisories].ignoreentries indeny.tomlhave been removed. - Each corresponding section above has been deleted from this plan file.
cargo deny checkstill passes with no ignores in place.- Separately tracked: duplicate-version policy has been
tightened to
deny(not a gate for this plan, but the natural next step).
Future work¶
- Evaluate adding
cargo vetonce the current debt is cleared and we understand how noisy our baseline is. - Consider a recurring monthly cron that opens an issue if
new advisories appear (
cargo auditin CI produces the signal; we need a mechanism to route it).