{"id":44040,"date":"2026-10-21T20:38:33","date_gmt":"2026-10-21T12:38:33","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-78058"},"modified":"2026-10-21T20:38:33","modified_gmt":"2026-10-21T12:38:33","slug":"cve-2026-78058","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-78058","title":{"rendered":"CVE-2026-78058 &#8211; Uncontrolled resource consumption in the HTTP\/2 (h2) receive path of Apache bRPC (version"},"content":{"rendered":"<p>Uncontrolled resource consumption in the HTTP\/2 (h2) receive path of Apache bRPC (version &lt; 1.18.0) on all platforms allows a remote unauthenticated attacker to crash the server or grow its memory without bound by sending crafted HTTP\/2 frames.<\/p>\n<p>Root Cause:<br \/>\nThe h2 parser, enabled by default on every bRPC server port and used by h2\/gRPC clients, trusts the peer to respect receive-side limits that bRPC advertises but never enforces:<br \/>\n1. SETTINGS_MAX_CONCURRENT_STREAMS defaulted to unlimited and was never checked on the server, letting a peer pin an unbounded number of pending streams per connection (~100x memory amplification).<br \/>\n2. SETTINGS_MAX_HEADER_LIST_SIZE defaulted to unlimited and was never enforced; 1-byte HPACK indexed references amplify a small HEADERS frame ~4000x into an unbounded decoded header list (&quot;HPACK bomb&quot;), and a never-completed HEADERS\/CONTINUATION block accumulates memory without limit.<br \/>\n3. Control-frame acks (PING\/SETTINGS acks, RST_STREAM, GOAWAY, WINDOW_UPDATE) unconditionally bypassed the -socket_max_unwritten_bytes write cap, so a PING flood combined with withheld TCP reads grew the connection buffer without the documented bound.<br \/>\n4. The HPACK dynamic table size update was validated against the protocol default (4096) instead of the advertised SETTINGS_HEADER_TABLE_SIZE, which together with the dynamic-table queue\/accounting issue can desynchronize the decoder and dereference NULL (crash).<\/p>\n<p>Affected scenarios:<br \/>\nAny bRPC server serving HTTP\/h2\/gRPC to an untrusted network, and any bRPC h2\/gRPC client connecting to an untrusted backend. The h2 parser runs before any Authenticator check on the shared port.<\/p>\n<p>How to fix:<br \/>\nUpgrade bRPC, or apply the patch in https:\/\/github.com\/apache\/brpc\/pull\/3474.<\/p>\n<p>Note:<br \/>\nAfter applying the fix the following limits are enforced by default:<br \/>\n&#8211; max_concurrent_streams: 1024 per connection (4294967295 restores unlimited).<br \/>\n&#8211; max_header_list_size: 1 MiB decoded size per stream (4294967295 restores unlimited; -h2_client_max_header_list_size for clients).<br \/>\n&#8211; h2 control-frame acks respect -socket_max_unwritten_bytes (-h2_ack_ignore_eovercrowded restores the old behavior).<br \/>\nRequests exceeding these limits are rejected (RST_STREAM(REFUSED_STREAM) or a connection error).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uncontrolled resource consumption in the HTTP\/2 (h2) receive path of Apache bRPC (version &lt; 1.18.0) on all platforms allows a remote unauthenticated attacker to crash the server or grow its memory wit<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-44040","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/44040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}