CVE-2026-102820: pageant: Out-of-bounds read / oversized allocation in `pageant` MemoryMap::read via a malicious Pageant agent (Windows)
MemoryMap::read in the pageant crate (part of the russh workspace, used by
russh’s SSH-agent client on Windows via AgentClient::connect_pageant) copies a
peer-controlled number of bytes out of an 8192-byte shared-memory view with
no bounds check — unlike the sibling MemoryMap::write, which correctly
rejects oversize access with Error::Overflow. The byte count comes straight
from a u32 length prefix that the responding “Pageant” process writes into the
shared mapping. A malicious local process that answers as the Pageant agent can
therefore cause:
- an out-of-bounds read past the 8 KiB view (access violation → process crash; or disclosure of adjacent process memory if the following page is committed)
- an allocation of up to ~4 GiB from a single
u32(vec![0; n]).
This was reproduced end-to-end against the real, unmodified pageant crate
(not a model) on x86_64-pc-windows-gnu under Wine; see “Proof of concept”.
References
Code Behaviors & Features
Detect and mitigate CVE-2026-102820 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →