{"id":"CVE-2026-123828","kind":"vulnerability","aliases":["CVE-2026-123828"],"related":[],"title":"Node.js: HTTP/2 Alt-Svc overflow lets remote requests corrupt process memory","description":"A one-byte heap buffer overflow in Node.js HTTP/2 Alt-Svc handling lets a remote, unauthenticated attacker corrupt process memory. When an application passes an attacker-controlled value such as a request's :authority header to Http2Session.altsvc(), the AltSvc implementation in src/node_http2.cc allocates a buffer sized to the origin length and then writes it with a null terminator, placing one byte past the end of the allocation. A single request carrying a long but syntactically valid :authority triggers the out-of-bounds write, which aborts the process and serves as a remote heap-corruption primitive. This vulnerability affects Node.js 26.x and 24.x.","summary":"Node.js writes one byte past a heap buffer in HTTP/2 Alt-Svc handling when an app passes an attacker-controlled value such as the :authority header to Http2Session.altsvc(). A single long but valid request can abort the process and corrupt heap memory.","severity":"medium","cvss":5.9,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"Node.js","fixed":[],"affected":"","ecosystem":"runtime"}],"ecosystems":["runtime"],"tags":["http2","nodejs","runtime","servers"],"not_affected_if":["no-altsvc-with-request-input"],"how_to_check":"- Run `node --version` and check whether it reports 24.x or 26.x.\n- Search the codebase for calls to `Http2Session.altsvc(` and check whether the origin comes from request headers such as :authority.","fix":null,"status":"open","published_at":"2026-11-11T19:17:30+00:00","first_seen_at":"2026-11-11T19:28:45+00:00","triaged_at":"2026-11-11T19:30:27+00:00","updated_at":"2026-11-11T19:30:27+00:00","category":"runtime","confidence":0.7,"triage":{"at":"2026-11-11T19:30:27Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"Node.js: HTTP/2 Alt-Svc overflow lets remote requests corrupt process memory","impact":"medium","summary":"Node.js writes one byte past a heap buffer in HTTP/2 Alt-Svc handling when an app passes an attacker-controlled value such as the :authority header to Http2Session.altsvc(). A single long but valid request can abort the process and corrupt heap memory.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["nodejs","http2","servers"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"Remote request aborts the process and corrupts heap memory","analyst_note":"","how_to_check":"- Run `node --version` and check whether it reports 24.x or 26.x.\n- Search the codebase for calls to `Http2Session.altsvc(` and check whether the origin comes from request headers such as :authority.","plain_action":"","product_name":"Node.js","needs_analyst":false,"not_affected_if":["no-altsvc-with-request-input"],"who_is_affected":"Exposure requires an HTTP/2 server built on Node.js 24.x or 26.x that passes attacker-controlled input, such as the :authority header, into Http2Session.altsvc(). Applications that do not call altsvc() with request-derived values are not described as affected. The sources do not state a fixed version.","user_interaction":"no","product_ecosystem":"runtime","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.001204,"input_tokens":4698,"output_tokens":1468,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-123828':15A,18A '-2026':14A,17A '24':175C '26':172C 'abort':61B,156C 'affect':170C 'alloc':113C,137C 'alt':4A,35B,79C 'alt-svc':3A,34B,78C 'altsvc':109C 'app':40B 'applic':92C 'attack':44B,86C,96C 'attacker-control':43B,95C 'author':50B,104C,147C 'bound':153C 'buffer':31B,73C,115C 'byte':27B,71C,131C 'carri':141C 'control':45B,97C 'corrupt':10A,65B,87C,166C 'cve':13A,16A 'end':134C 'handl':37B,81C 'header':51B,105C 'heap':30B,66B,72C,165C 'heap-corrupt':164C 'http/2':2A,33B,77C 'http2':20B 'http2session.altsvc':53B,107C 'implement':110C 'length':120C 'let':7A,82C 'long':56B,143C 'memori':12A,67B,89C 'node.js':1A,19A,24B,76C,171C 'nodej':21B 'null':127C 'one':26B,70C,130C 'one-byt':69C 'origin':119C 'out-of-bound':150C 'overflow':6A,74C 'pass':41B,93C 'past':28B,132C 'place':129C 'primit':167C 'process':11A,63B,88C,158C 'remot':8A,84C,163C 'request':9A,59B,102C,140C 'runtim':22B 'serv':160C 'server':23B 'singl':55B,139C 'size':116C 'src/node_http2.cc':112C 'svc':5A,36B,80C 'syntact':145C 'termin':128C 'trigger':148C 'unauthent':85C 'valid':58B,146C 'valu':46B,98C 'vulner':169C 'write':25B,123C,154C 'x':173C,176C","nicknames":[],"mitigations":[],"who_affected":"Exposure requires an HTTP/2 server built on Node.js 24.x or 26.x that passes attacker-controlled input, such as the :authority header, into Http2Session.altsvc(). Applications that do not call altsvc() with request-derived values are not described as affected. The sources do not state a fixed version.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"businesses","plain_action":null,"pkeys":["nodejs"],"ptokens":["nodejs"],"labels":["http2","medium","nodejs","runtime","servers"],"campaign_type":null,"search_a":"'-123828':15A,18A '-2026':14A,17A 'alt':4A 'alt-svc':3A 'corrupt':10A 'cve':13A,16A 'http/2':2A 'let':7A 'memori':12A 'node.js':1A,19A 'overflow':6A 'process':11A 'remot':8A 'request':9A 'svc':5A","search_b":"'abort':61B 'alt':35B 'alt-svc':34B 'app':40B 'attack':44B 'attacker-control':43B 'author':50B 'buffer':31B 'byte':27B 'control':45B 'corrupt':65B 'handl':37B 'header':51B 'heap':30B,66B 'http/2':33B 'http2':20B 'http2session.altsvc':53B 'long':56B 'memori':67B 'node.js':24B 'nodej':21B 'one':26B 'pass':41B 'past':28B 'process':63B 'request':59B 'runtim':22B 'server':23B 'singl':55B 'svc':36B 'valid':58B 'valu':46B 'write':25B","search_c":"'24':175C '26':172C 'abort':156C 'affect':170C 'alloc':113C,137C 'alt':79C 'alt-svc':78C 'altsvc':109C 'applic':92C 'attack':86C,96C 'attacker-control':95C 'author':104C,147C 'bound':153C 'buffer':73C,115C 'byte':71C,131C 'carri':141C 'control':97C 'corrupt':87C,166C 'end':134C 'handl':81C 'header':105C 'heap':72C,165C 'heap-corrupt':164C 'http/2':77C 'http2session.altsvc':107C 'implement':110C 'length':120C 'let':82C 'long':143C 'memori':89C 'node.js':76C,171C 'null':127C 'one':70C,130C 'one-byt':69C 'origin':119C 'out-of-bound':150C 'overflow':74C 'pass':93C 'past':132C 'place':129C 'primit':167C 'process':88C,158C 'remot':84C,163C 'request':102C,140C 'serv':160C 'singl':139C 'size':116C 'src/node_http2.cc':112C 'svc':80C 'syntact':145C 'termin':128C 'trigger':148C 'unauthent':85C 'valid':146C 'valu':98C 'vulner':169C 'write':123C,154C 'x':173C,176C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-11T19:17:30+00:00","kev":null,"cvss_vector":"CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","cvss_by":"ce714d77-add3-4f53-aff5-83d477b104bb","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-123828","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123828","severity":null,"published_at":"2026-11-11T19:17:30+00:00","modified_at":"2026-11-11T19:17:30+00:00","first_seen_at":"2026-11-11T19:28:45+00:00","fetched_at":"2026-11-11T19:28:45+00:00","note":null}],"documents":[],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}