Default AutomaticDecompression = All routes responses through the Brotli decoder affected by CVE-2026-111497
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Start in src/RestSharp/Options/RestClientOptions.cs and read the default for AutomaticDecompression, then check the proposed resolution in linked pull request #2419. Done means the .NET default uses GZip and Deflate without advertising or decoding Brotli, with the related documentation and changelog updated.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
RestClientOptions.AutomaticDecompression defaults to DecompressionMethods.All on .NET (src/RestSharp/Options/RestClientOptions.cs). Every RestClient built with default options therefore advertises Accept-Encoding: gzip, deflate, br and auto-decodes Content-Encoding: br responses through the Brotli decoder bundled in the .NET runtime.
That decoder is affected by CVE-2026-111497 (CVSS 4.0: 9.2): an out-of-bounds write in Google Brotli 1.0.3–1.2.0 triggered by a crafted stream, leading to memory disclosure, crash, or code execution in the decoding process. Public PoCs exist and code execution has been demonstrated against Node.js through the same "malicious server → auto-decompressed response" path.
HttpClientHandler/SocketsHttpHandler default to AutomaticDecompression = None, so plain HttpClient users are not exposed. RestSharp's default opts every user in without them ever mentioning Brotli. The bug is the runtime's, but as of 2026-10-24 no .NET servicing release contains the fix and no public dotnet/runtime branch has it (vendored Brotli is 1.1.0 on release/9.0–main, 1.0.9 on release/8.0; the upstream fix's BLOCK_SWITCH error code is absent on all of them), so users have no runtime update to apply.
To Reproduce
using var client = new RestClient("https://<your-request-bin>");
await client.ExecuteAsync(new RestRequest(""));
The captured request carries Accept-Encoding: gzip, deflate, br. Any server that answers with Content-Encoding: br has its body passed to the runtime's Brotli decoder before RestSharp hands it back. Same with new RestClient(new RestClientOptions(url)) — no decompression setting touched.
Expected behavior
A default RestClient should not advertise br or decode br responses while the runtime decoder is known-vulnerable and unpatched. With AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate the request carries Accept-Encoding: gzip, deflate and a br response is returned undecoded in RawBytes — the decoder is never reached. Servers that support Brotli also support gzip, so there is no functional loss.
Stack trace
None — the issue is reachability of vulnerable code, not an exception.
Desktop (please complete the following information):
- OS: macOS
- .NET version: .NET 10 (SDK 10.0.401); applies to all
#if NETtargets (net8.0/net9.0/net10.0). .NET Framework defaults toGZipand is not affected. - Version: 114.1.0 (NuGet latest) and
dev@ 466e5f8
Additional context
Only clients constructed from a URL, Uri or RestClientOptions are affected; a caller-supplied HttpClient/handler keeps the caller's setting. Exposure is proportional to how much control outsiders have over the URLs the client calls (third-party APIs, customer-supplied webhook endpoints, config-driven hosts).
Proposed resolution in #2419: change the .NET default to GZip | Deflate (Brotli opt-in) with docs and changelog, at least until patched runtimes ship.
References:
- Node.js advisory: https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
- GHSA-9v8h-qqgm-4m35: https://github.com/advisories/GHSA-9v8h-qqgm-4m35
- Upstream fix: https://github.com/google/brotli/commit/0ed4268a4401abcb4472096340477cf4af7d1a2b
- Imperva analysis: https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution/
- Vorherrschende Sprache
- C#
- Sterne
- 9.8k
- Forks
- 2.3k
- Ø Merge
- 11 T. 21 Std.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus restsharp/RestSharp
-
RestClientOptions.UserAgent missing from requests with useClientFactory: trueEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
-
feature-request rfc
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
-
feature-request rfc
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 38/100
-
awaiting-feedback feature-request
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
Alle Issues in restsharp/RestSharp
Ähnliche Issues
-
fix(testing): HeadlessTerminal disposes services synchronouslyEvtl. vergeben @zidad hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 69/100
RazorConsole/RazorConsole#388 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
starlinghq/starling#209 ·
Maintainer antworten meist innerhalb von 1 Tag
-
affected/v17 area/frontend type/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 63/100
umbraco/Umbraco-CMS#24323 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
dotnet/roslynator#1859 ·
Maintainer antworten meist innerhalb von 1 Tag