{"id":"CVE-2026-84748","kind":"vulnerability","aliases":["CVE-2026-84748"],"related":[],"title":"Apache bRPC: builtin services reachable from public port over protobuf protocols","description":"Improper authorization in Apache bRPC (versions < 1.18.0) on all platforms allows remote attackers to access builtin services through the public port.\n\nRoot Cause:\nServerOptions.internal_port is documented to make builtin services (and Tabbed services) reachable only from the internal port, and the HTTP/h2 dispatch path enforced this. However, all protobuf-based protocol dispatch paths (baidu_std, hulu_pbrpc, sofa_pbrpc, and the nshead-based protocols public_pbrpc, nshead_mcpack, nova_pbrpc and ubrpc2pb) computed the security_mode flag but never enforced it between method resolution and method invocation. Since builtin services share the method map with user services, a client able to reach the public port could invoke builtin services such as brpc.vars or hotspots by name over these pb protocols and disclose sensitive runtime information (metrics, flags, profiler data) that the operator intended to expose only via the internal port.\n\nAffected Scenarios:\nUse a bRPC server with ServerOptions.internal_port configured (or with builtin/Tabbed services otherwise expected to be gated by it) while the public port is reachable from an untrusted network and any pb-based protocol is enabled.\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/3511","summary":"Apache bRPC versions before 1.18.0 fail to enforce the internal_port restriction on protobuf-based protocols, so builtin services can be invoked through the public port. An attacker who can reach that port can read runtime metrics, flags and profiler data the operator meant to keep internal.","severity":"medium","cvss":null,"epss":0.00178,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["brpc","c++","microservices","package","self-hosted"],"not_affected_if":["internal-only-network","no-internal-port-config"],"how_to_check":"- Check the bRPC version your server links against; affected if below `1.18.0`.\n- Look for `ServerOptions.internal_port` being set in the server code, and confirm whether the public port is reachable from untrusted networks.\n- Check whether any pb-based protocol (baidu_std, hulu_pbrpc, sofa_pbrpc, public_pbrpc, nshead_mcpack, nova_pbrpc, ubrpc2pb) is enabled.","fix":"- Upgrade Apache bRPC to `1.18.0`.\n- Alternatively apply the patch from https://github.com/apache/brpc/pull/3511.","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:23+00:00","updated_at":"2026-10-25T05:02:23+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T05:02:23Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Apache bRPC to `1.18.0`.\n- Alternatively apply the patch from https://github.com/apache/brpc/pull/3511.","reach":"internet","title":"Apache bRPC: builtin services reachable from public port over protobuf protocols","impact":"low","summary":"Apache bRPC versions before 1.18.0 fail to enforce the internal_port restriction on protobuf-based protocols, so builtin services can be invoked through the public port. An attacker who can reach that port can read runtime metrics, flags and profiler data the operator meant to keep internal.","category":"package","nicknames":[],"who_cares":["c++","bRPC","self-hosted","microservices"],"confidence":0.8,"needs_auth":"no","worst_case":"Remote clients read runtime metrics, flags and profiler data","analyst_note":"","how_to_check":"- Check the bRPC version your server links against; affected if below `1.18.0`.\n- Look for `ServerOptions.internal_port` being set in the server code, and confirm whether the public port is reachable from untrusted networks.\n- Check whether any pb-based protocol (baidu_std, hulu_pbrpc, sofa_pbrpc, public_pbrpc, nshead_mcpack, nova_pbrpc, ubrpc2pb) is enabled.","needs_analyst":false,"not_affected_if":["internal-only-network","no-internal-port-config"],"who_is_affected":"Servers that set ServerOptions.internal_port (or rely on builtin/Tabbed services being gated by it) while the public port faces an untrusted network and a protobuf-based protocol is enabled. Servers that do not expose the public port to untrusted clients, or that run no internal_port gating, have less exposure.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000695,"input_tokens":3746,"output_tokens":641,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-84748':14A,17A '/apache/brpc/pull/3511':280C '1':264C '1.18.0':29B,79C,269C '2':274C 'abl':175C 'access':87C 'affect':216C 'allow':83C 'apach':1A,25B,76C 'appli':275C 'attack':53B,85C 'author':74C 'baidu':128C 'base':40B,124C,138C,251C 'brpc':2A,18B,26B,77C,220C,266C 'brpc.vars':187C 'builtin':3A,43B,88C,102C,164C,183C 'builtin/tabbed':228C 'c':19B 'caus':95C 'choos':258C 'client':174C 'comput':148C 'configur':225C 'could':181C 'cve':12A,15A 'data':66B,204C 'disclos':197C 'dispatch':116C,126C 'document':99C 'enabl':254C 'enforc':32B,118C,155C 'expect':231C 'expos':210C 'fail':30B 'fix':257C,271C 'flag':63B,152C,202C 'follow':262C 'gate':234C 'github.com':279C 'github.com/apache/brpc/pull/3511':278C 'host':24B 'hotspot':189C 'howev':120C 'http/h2':115C 'hulu':130C 'improp':73C 'inform':200C 'intend':208C 'intern':34B,72B,111C,214C 'invoc':162C 'invok':47B,182C 'issu':273C 'keep':71B 'make':101C 'map':169C 'mcpack':143C 'meant':69B 'method':158C,161C,168C 'metric':62B,201C 'microservic':20B 'mode':151C 'name':191C 'network':246C 'never':154C 'nova':144C 'nshead':137C,142C 'nshead-bas':136C 'one':259C 'oper':68B,207C 'option':263C 'otherwis':230C 'packag':21B 'patch':277C 'path':117C,127C 'pb':194C,250C 'pb-base':249C 'pbrpc':131C,133C,141C,145C 'platform':82C 'port':8A,35B,51B,58B,93C,97C,112C,180C,215C,224C,240C 'profil':65B,203C 'protobuf':10A,39B,123C 'protobuf-bas':38B,122C 'protocol':11A,41B,125C,139C,195C,252C 'public':7A,50B,92C,140C,179C,239C 'reach':56B,177C 'reachabl':5A,107C,242C 'read':60B 'remot':84C 'resolut':159C 'restrict':36B 'root':94C 'runtim':61B,199C 'scenario':217C 'secur':150C 'self':23B 'self-host':22B 'sensit':198C 'server':221C 'serveroptions.internal':96C,223C 'servic':4A,44B,89C,103C,106C,165C,172C,184C,229C 'share':166C 'sinc':163C 'sofa':132C 'std':129C 'tab':105C 'ubrpc2pb':147C 'untrust':245C 'upgrad':265C 'use':218C 'user':171C 'version':27B,78C,268C 'via':212C","nicknames":[],"mitigations":[],"who_affected":"Servers that set ServerOptions.internal_port (or rely on builtin/Tabbed services being gated by it) while the public port faces an untrusted network and a protobuf-based protocol is enabled. Servers that do not expose the public port to untrusted clients, or that run no internal_port gating, have less exposure.","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-84748","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-84748","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-84748","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-84748","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"}