{"id":"CVE-2026-82231","kind":"vulnerability","aliases":["CVE-2026-82231"],"related":[],"title":"bRPC Thrift client: malformed server reply crashes the whole process","description":"A Thrift client in Apache bRPC (version < 1.18.0, built with WITH_THRIFT which is off by default) can be crashed by the server peer it talks to. When the server returns a T_EXCEPTION reply whose exception struct is malformed, the client decodes it without catching what Apache Thrift throws (TProtocolException, TTransportException or std::length_error). The exception unwinds out of the bthread task function and the process calls std::terminate(), terminating the whole process along with every other in-flight RPC.\n\nThis is the client response path, so the adversary is the server peer, which THREAT_MODEL.md treats as untrusted. It requires a WITH_THRIFT build (off by default).\n\nHow to Fix:\n1. Upgrade bRPC to version 1.18.0, which fixes this issue.\n2. Apply this patch: https://github.com/apache/brpc/pull/3500","summary":"A Thrift client in Apache bRPC built with WITH_THRIFT does not catch Thrift decode exceptions when a server returns a malformed T_EXCEPTION reply. The uncaught exception calls std::terminate(), which kills the process and every other in-flight RPC.","severity":"medium","cvss":null,"epss":0.00147,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["brpc","c++","package","rpc-clients","thrift"],"not_affected_if":["brpc-1.18.0-or-later","default-config","no-thrift-client"],"how_to_check":"- Check the bRPC version in use, for example with `grep -i brpc` in your build files or `ldd` on the binary, and confirm whether it is below `1.18.0`.\n- Check whether the build enabled Thrift support: look for `WITH_THRIFT=ON` in the build configuration or CMake cache.\n- Confirm the process uses the Thrift client protocol to talk to servers you do not fully control.","fix":"- Upgrade bRPC to `1.18.0`.\n- Or apply the patch from https://github.com/apache/brpc/pull/3500 if you cannot upgrade yet.\n- Or rebuild without `WITH_THRIFT` if Thrift client support is not needed.","status":"open","published_at":"2026-10-21T13:20:03+00:00","first_seen_at":"2026-10-23T21:57:28+00:00","triaged_at":"2026-10-25T05:02:31+00:00","updated_at":"2026-10-25T05:02:31+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T05:02:31Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade bRPC to `1.18.0`.\n- Or apply the patch from https://github.com/apache/brpc/pull/3500 if you cannot upgrade yet.\n- Or rebuild without `WITH_THRIFT` if Thrift client support is not needed.","reach":"network","title":"bRPC Thrift client: malformed server reply crashes the whole process","impact":"medium","summary":"A Thrift client in Apache bRPC built with WITH_THRIFT does not catch Thrift decode exceptions when a server returns a malformed T_EXCEPTION reply. The uncaught exception calls std::terminate(), which kills the process and every other in-flight RPC.","category":"package","nicknames":[],"who_cares":["brpc","c++","thrift","rpc-clients"],"confidence":0.8,"needs_auth":"no","worst_case":"A malicious or compromised server peer crashes the client process and all in-flight RPCs.","analyst_note":"","how_to_check":"- Check the bRPC version in use, for example with `grep -i brpc` in your build files or `ldd` on the binary, and confirm whether it is below `1.18.0`.\n- Check whether the build enabled Thrift support: look for `WITH_THRIFT=ON` in the build configuration or CMake cache.\n- Confirm the process uses the Thrift client protocol to talk to servers you do not fully control.","needs_analyst":false,"not_affected_if":["default-config","no-thrift-client","bRPC-1.18.0-or-later"],"who_is_affected":"Only builds of Apache bRPC below 1.18.0 compiled with WITH_THRIFT enabled are exposed, which is off by default. The risk applies when the process acts as a Thrift client to a server peer that can send a malformed T_EXCEPTION reply, so a client talking only to trusted internal servers has lower exposure. Teams not using bRPC's Thrift client can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000707,"input_tokens":3551,"output_tokens":704,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':12A,15A '-82231':13A,16A '/apache/brpc/pull/3500':195C '1':179C '1.18.0':73C,184C '2':189C 'adversari':157C 'along':141C 'apach':28B,70C,113C 'appli':190C 'brpc':1A,17B,29B,71C,181C 'bthread':128C 'build':172C 'built':30B,74C 'c':18B 'call':52B,134C 'catch':36B,111C 'client':3A,22B,26B,68C,107C,152C 'crash':7A,85C 'cve':11A,14A 'decod':38B,108C 'default':82C,175C 'error':121C 'everi':60B,143C 'except':39B,47B,51B,99C,102C,123C 'fix':178C,186C 'flight':64B,147C 'function':130C 'github.com':194C 'github.com/apache/brpc/pull/3500':193C 'in-flight':62B,145C 'issu':188C 'kill':56B 'length':120C 'malform':4A,45B,105C 'packag':19B 'patch':192C 'path':154C 'peer':89C,161C 'process':10A,58B,133C,140C 'repli':6A,48B,100C 'requir':168C 'respons':153C 'return':43B,96C 'rpc':21B,65B,148C 'rpc-client':20B 'server':5A,42B,88C,95C,160C 'std':53B,119C,135C 'struct':103C 'talk':91C 'task':129C 'termin':54B,136C,137C 'threat_model.md':163C 'thrift':2A,23B,25B,33B,37B,67C,77C,114C,171C 'throw':115C 'tprotocolexcept':116C 'treat':164C 'ttransportexcept':117C 'uncaught':50B 'untrust':166C 'unwind':124C 'upgrad':180C 'version':72C,183C 'whole':9A,139C 'whose':101C 'without':110C","nicknames":[],"mitigations":[],"who_affected":"Only builds of Apache bRPC below 1.18.0 compiled with WITH_THRIFT enabled are exposed, which is off by default. The risk applies when the process acts as a Thrift client to a server peer that can send a malformed T_EXCEPTION reply, so a client talking only to trusted internal servers has lower exposure. Teams not using bRPC's Thrift client can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T13:20:03+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-82231","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-82231","severity":null,"published_at":"2026-10-21T13:20:03+00:00","modified_at":"2026-10-22T16:56:37+00:00","first_seen_at":"2026-10-23T21:57:28+00:00","fetched_at":"2026-10-23T22:29:01+00:00","note":null},{"source":"epss","external_id":"CVE-2026-82231","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-82231","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T13:15:54+00:00","fetched_at":"2026-10-24T13:15:54+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}