{"id":"CVE-2026-82425","kind":"vulnerability","aliases":["CVE-2026-82425"],"related":[],"title":"Apache bRPC: assertion lets a remote peer crash the client process","description":"A reachable assertion in Apache bRPC (version < 1.18.0) on all platforms allows a malicious remote peer to crash the process, resulting in denial of service.\n\nRoot Cause:\nWhen a Socket with health checking enabled fails, Socket::WaitAndReset closes its file descriptor while the event dispatcher may still be delivering an input event (EPOLLIN/EVFILT_READ) that was fetched for the just-closed fd. If the health check then succeeds and revives the Socket, Socket::Address succeeds again while the fd is still -1 (the next write reconnects on demand). In that window, Socket::OnInputEvent hits CHECK(!(events & EPOLLIN)) (or the kqueue equivalent) because the Socket is addressable but has no fd. CHECK failures terminate the process when bRPC is built with glog or when the gflag -crash_on_fatal_log is enabled (CHECK always terminates in OFFICIAL_BUILD/NDEBUG builds as well).\n\nAffected Scenarios:\nApplications using bRPC clients with health check enabled (-health_check_interval). A malicious remote peer that the client connects to can deliberately abort connections and immediately accept the health check probes, racing connection teardown against health check revival to trigger the assertion and abort the process.\n\nHow to Fix:\n(Choose one of the following options)\n1. Upgrade bRPC to version 1.18.0, which fixes this issue.\n2. Apply this patch:  https://github.com/apache/brpc/pull/3510 \n\nNote:\nAfter applying the fix, stale input events on a Socket revived without an fd are silently dropped instead of triggering the assertion. No user-visible interface or wire protocol is changed.","summary":"A race in bRPC's socket health checking can trigger a failed assertion when a remote peer aborts connections while health checks revive them. The client process terminates, causing denial of service.","severity":"unknown","cvss":null,"epss":0.00147,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["brpc","c++","package","rpc-clients","self-hosted"],"not_affected_if":["health-check-disabled","trusted-peers-only"],"how_to_check":"- Check the bRPC version in use: `unknown` for the exact command, the sources do not say how it is pinned\n- Check whether clients start with `-health_check_interval` set to a positive value\n- Check whether `-crash_on_fatal_log` is enabled or bRPC is built with glog","fix":"- Upgrade bRPC to `1.18.0`\n- Or apply the patch from https://github.com/apache/brpc/pull/3510","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:30+00:00","updated_at":"2026-10-25T05:02:30+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T05:02:30Z","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/3510","reach":"network","title":"Apache bRPC: assertion lets a remote peer crash the client process","impact":"low","summary":"A race in bRPC's socket health checking can trigger a failed assertion when a remote peer aborts connections while health checks revive them. The client process terminates, causing denial of service.","category":"package","nicknames":[],"who_cares":["bRPC","c++","rpc-clients","self-hosted"],"confidence":0.7,"needs_auth":"no","worst_case":"A remote peer crashes the client process, causing denial of service.","analyst_note":"","how_to_check":"- Check the bRPC version in use: `unknown` for the exact command, the sources do not say how it is pinned\n- Check whether clients start with `-health_check_interval` set to a positive value\n- Check whether `-crash_on_fatal_log` is enabled or bRPC is built with glog","needs_analyst":false,"not_affected_if":["health-check-disabled","trusted-peers-only"],"who_is_affected":"Applications that run bRPC clients with health checking enabled (`-health_check_interval`) and connect to peers that may be malicious or untrusted. The crash needs a peer that deliberately aborts connections and answers health probes at the right moment. Servers only, or clients with health checking off, are not described as exposed.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000649,"input_tokens":3825,"output_tokens":533,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-1':140C '-2026':13A,16A '-82425':14A,17A '/apache/brpc/pull/3510':272C '1':256C '1.18.0':66C,261C '2':266C 'abort':44B,223C,244C 'accept':227C 'address':132C,164C 'affect':199C 'allow':70C 'alway':191C 'apach':1A,63C 'appli':267C,275C 'applic':201C 'assert':3A,39B,61C,242C,295C 'brpc':2A,18B,30B,64C,175C,203C,258C 'build':196C 'build/ndebug':195C 'built':177C 'c':19B 'caus':55B,85C 'chang':305C 'check':34B,48B,91C,124C,153C,169C,190C,207C,210C,230C,237C 'choos':250C 'client':10A,23B,52B,204C,218C 'close':96C,119C 'connect':45B,219C,224C,233C 'crash':8A,76C,184C 'cve':12A,15A 'deliber':222C 'deliv':107C 'demand':146C 'denial':56B,81C 'descriptor':99C 'dispatch':103C 'drop':290C 'enabl':92C,189C,208C 'epollin':155C 'epollin/evfilt_read':111C 'equival':159C 'event':102C,110C,154C,280C 'fail':38B,93C 'failur':170C 'fatal':186C 'fd':120C,137C,168C,287C 'fetch':114C 'file':98C 'fix':249C,263C,277C 'follow':254C 'gflag':183C 'github.com':271C 'github.com/apache/brpc/pull/3510':270C 'glog':179C 'health':33B,47B,90C,123C,206C,209C,229C,236C 'hit':152C 'host':26B 'immedi':226C 'input':109C,279C 'instead':291C 'interfac':300C 'interv':211C 'issu':265C 'just-clos':117C 'kqueue':158C 'let':4A 'log':187C 'malici':72C,213C 'may':104C 'next':142C 'note':273C 'offici':194C 'one':251C 'oninputev':151C 'option':255C 'packag':20B 'patch':269C 'peer':7A,43B,74C,215C 'platform':69C 'probe':231C 'process':11A,53B,78C,173C,246C 'protocol':303C 'race':28B,232C 'reachabl':60C 'reconnect':144C 'remot':6A,42B,73C,214C 'result':79C 'reviv':49B,128C,238C,284C 'root':84C 'rpc':22B 'rpc-client':21B 'scenario':200C 'self':25B 'self-host':24B 'servic':58B,83C 'silent':289C 'socket':32B,88C,94C,130C,131C,150C,162C,283C 'stale':278C 'still':105C,139C 'succeed':126C,133C 'teardown':234C 'termin':54B,171C,192C 'trigger':36B,240C,293C 'upgrad':257C 'use':202C 'user':298C 'user-vis':297C 'version':65C,260C 'visibl':299C 'waitandreset':95C 'well':198C 'window':149C 'wire':302C 'without':285C 'write':143C","nicknames":[],"mitigations":[],"who_affected":"Applications that run bRPC clients with health checking enabled (`-health_check_interval`) and connect to peers that may be malicious or untrusted. The crash needs a peer that deliberately aborts connections and answers health probes at the right moment. Servers only, or clients with health checking off, are not described as exposed.","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-82425","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-82425","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-82425","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-82425","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"}