{"id":"GHSA-h2v8-394m-p7vv","revision":"ee8e40a10944493280ec12309b5e229a","records":[{"revision":"ee8e40a10944493280ec12309b5e229a","observedAt":"2026-10-27T16:45:46.193+00:00","statement":{"source":"osv","id":"GHSA-h2v8-394m-p7vv","aliases":["RUSTSEC-2026-0348"],"title":"Rustls: Brotli certificate decompression can allocate an attacker-controlled amount of memory up to 1 GiB before authentication.","description":"### Summary\n\nThe built-in (but disabled by default) Brotli certificate decoder bounds the output buffer but accepts an input-selected history window. A header of five bytes can specify a 1 GiB window allocation. A peer can abort a process whose allocator cannot satisfy that request. A client must enable Brotli and connect to the peer; a server must enable Brotli and request a client certificate. Neither direction requires a trusted attacker certificate.\n\n### Details\n\nrustls calls `BrotliDecompress` which enables Brotli's large-window extension. rustls applies a limit to certificates, but this applies to the decompressed result, and not to any internal allocations the process requires.\n\n### Impact\n\nClient applications that enable the `brotli` feature will be vulnerable to malicious servers. Server applications that enable the `brotli` feature and enable client authentication will be vulnerable to malicious clients.\n\nPotential for denial of service due to memory exhaustion from peers sending malicious Brotli-encoded certificates, for applications that enable Brotli decompression.\n\n### Acknowledgement\nThanks to OpenAI [OutboundDisclosures@openai.com](mailto:OutboundDisclosures@openai.com) for the disclosure.","state":0,"publishedAt":"2026-10-27T16:08:36+00:00","modifiedAt":"2026-10-27T16:15:05.3378195+00:00","affected":[{"ecosystem":"crates.io","name":"rustls","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"0.23.46"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"crates.io","name":"rustls","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.24.0-dev.1"},{"kind":"fixed","version":"0.24.0-dev.2"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"LOW"}],"references":["https://github.com/rustls/rustls/security/advisories/GHSA-h2v8-394m-p7vv","https://github.com/rustls/rustls/pull/3297","https://github.com/rustls/rustls/pull/3354","https://github.com/rustls/rustls/commit/1aa987af37d0d79b98781d345895ac0059ce345c","https://github.com/rustls/rustls/commit/402b7b78b7ae87d59e19cf07ee07f3fc19e6537e","https://github.com/rustls/rustls","https://github.com/rustls/rustls/releases/tag/v/0.23.46","https://rustsec.org/advisories/RUSTSEC-2026-0348.html"],"sourceUrl":"https://github.com/advisories/GHSA-h2v8-394m-p7vv","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-h2v8-394m-p7vv","identifiers":["GHSA-h2v8-394m-p7vv","RUSTSEC-2026-0348"]},"retained":false,"historicalAffected":[]}],"coverage":[]}