Apache Thrift Go: Uncontrolled recursion in TFramedTransport and THeaderTransport
Summary
The Go bindings of Apache Thrift, specifically TFramedTransport and THeaderTransport, re-enter Read once for each received frame that carries no payload bytes. A remote peer can send such frames without authentication, so the recursion depth is unbounded. The Go stack limit is then reached as a fatal error that recover() cannot catch, which terminates the entire process.
Affected
- Apache Thrift before 0.25.0 (Go bindings, github.com/apache/thrift)
- Only Go programs that import the Thrift library and accept Thrift transport input from network peers are affected.
Fixed in
- Apache Thrift 0.25.0
Workaround
Unknown.
Exploitation
- No public proof of concept or in-the-wild exploitation known at time of writing.
- CISA SSVC: Exploitation none, Automatable yes, Technical Impact partial.
- EPSS score is low (0.00426).
Our recommendation
- Identify Go services that use github.com/apache/thrift (check go.mod files, including vendor-supplied binaries).
- Upgrade affected services to Apache Thrift 0.25.0 or later, prioritising internet-facing and partner-facing endpoints.
- Restrict which hosts can reach Thrift Go endpoints as an interim measure.
- Run Go services under a supervisor that restarts them after a crash to limit downtime.
- Recheck the NVD status of CVE-2026-83663, which was recorded as Deferred.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- Apache mailing list thread (33otcgbqd27wf6qq810q56znzbomnhg1) lists.apache.org
- Apache mailing list thread (yjz317wq7h86q9k8ws6ton0ojgl8hjct) lists.apache.org
- Tenable CVE-2026-83663 www.tenable.com
- OpenCVE CVE-2026-83663 app.opencve.io
- Grafana PR bumping Apache Thrift to v0.25.0 github.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 05:48.
Original description (NVD)
Uncontrolled Recursion vulnerability in Apache Thrift go bindings. Both Go transports satisfy a read out of a buffered frame and, when that frame yields no payload bytes, read the next frame and call `Read` again instead of looping. A peer produces such a frame for 4 bytes in `TFramedTransport` (a declared size of zero) or 18 bytes in `THeaderTransport` (a header block that fills the frame), so nothing bounds the depth. The Go stack limit is reached as a `fatal error`, which `recover()` cannot catch, so the whole process dies. This issue affects Apache Thrift: before 0.25.0. Users are recommended to upgrade to version 0.25.0, which fixes the issue.
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
