{"id":"CVE-2026-126406","kind":"vulnerability","aliases":["CVE-2026-126406"],"related":[],"title":"Wasmtime: reused response headers let requests smuggle past access controls","description":"The wasmtime-wasi-http p2 implementation in Wasmtime before 36.0.20, 37.0.0 before 48.0.8, 49.0.0 before 49.0.5, and 50.0.0 before 50.0.1 can send conflicting content-length headers, or ones not matching the body, in outgoing requests. A guest that reuses a received response's headers resource to send a bodyless request can enable request smuggling against non-compliant servers, potentially bypassing embedder destination access controls.","summary":"Wasmtime's WASI HTTP p2 code can send outgoing requests with conflicting or mismatched content-length headers when a guest reuses a received response's headers. A non-compliant server can then treat the request as smuggled, which may bypass the embedder's destination access controls.","severity":"medium","cvss":6.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["runtime","wasi","wasmtime","webassembly"],"not_affected_if":["no-outgoing-requests","no-wasi-http","versions-patched"],"how_to_check":"- Check the Wasmtime version in use, for example with `wasmtime --version` or the wasmtime crate version in `Cargo.lock`.\n- Look for use of `wasmtime-wasi-http` with the p2 HTTP implementation and guest code that sends outgoing requests.","fix":"- Move to `36.0.20` on the 36 line, `48.0.8` on the 48 line, `49.0.5` on the 49 line, or `50.0.1` on the 50 line.","status":"open","published_at":"2026-11-13T10:17:45+00:00","first_seen_at":"2026-11-13T10:47:19+00:00","triaged_at":"2026-11-13T10:55:18+00:00","updated_at":"2026-11-13T10:55:18+00:00","category":"runtime","confidence":0.6,"triage":{"at":"2026-11-13T10:55:18Z","model":"claude-haiku-5-5","output":{"fix":"- Move to `36.0.20` on the 36 line, `48.0.8` on the 48 line, `49.0.5` on the 49 line, or `50.0.1` on the 50 line.","reach":"network","title":"Wasmtime: reused response headers let requests smuggle past access controls","impact":"medium","summary":"Wasmtime's WASI HTTP p2 code can send outgoing requests with conflicting or mismatched content-length headers when a guest reuses a received response's headers. A non-compliant server can then treat the request as smuggled, which may bypass the embedder's destination access controls.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["wasmtime","wasi","webassembly"],"confidence":0.6,"fix_status":"available","needs_auth":"unknown","worst_case":"Requests smuggle past destination access controls to non-compliant servers","analyst_note":"Ecosystem and product name are not listed; check the vendor advisory on github.com for exact affected ranges.","how_to_check":"- Check the Wasmtime version in use, for example with `wasmtime --version` or the wasmtime crate version in `Cargo.lock`.\n- Look for use of `wasmtime-wasi-http` with the p2 HTTP implementation and guest code that sends outgoing requests.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["no-wasi-http","no-outgoing-requests","versions-patched"],"who_is_affected":"Only embedders running Wasmtime with the wasmtime-wasi-http p2 implementation, where guest code sends outgoing HTTP requests, are exposed. The flaw depends on a guest reusing a response's headers and on the destination server being non-compliant with content-length handling. Teams not using WASI HTTP outgoing requests can skip it.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000798,"input_tokens":4684,"output_tokens":660,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-126406':13A,16A '-2026':12A,15A '36.0.20':79C '37.0.0':80C '48.0.8':82C '49.0.0':83C '49.0.5':85C '50.0.0':87C '50.0.1':89C 'access':9A,67B,134C 'bodi':102C 'bodyless':119C 'bypass':62B,131C 'code':26B 'compliant':51B,128C 'conflict':32B,92C 'content':36B,94C 'content-length':35B,93C 'control':10A,68B,135C 'cve':11A,14A 'destin':66B,133C 'embedd':64B,132C 'enabl':122C 'guest':41B,107C 'header':4A,38B,47B,96C,114C 'http':24B,73C 'implement':75C 'length':37B,95C 'let':5A 'match':100C 'may':61B 'mismatch':34B 'non':50B,127C 'non-compli':49B,126C 'one':98C 'outgo':29B,104C 'p2':25B,74C 'past':8A 'potenti':130C 'receiv':44B,111C 'request':6A,30B,57B,105C,120C,123C 'resourc':115C 'respons':3A,45B,112C 'reus':2A,42B,109C 'runtim':17B 'send':28B,91C,117C 'server':52B,129C 'smuggl':7A,59B,124C 'treat':55B 'wasi':18B,23B,72C 'wasmtim':1A,19B,21B,71C,77C 'wasmtime-wasi-http':70C 'webassembl':20B","nicknames":[],"mitigations":[],"who_affected":"Only embedders running Wasmtime with the wasmtime-wasi-http p2 implementation, where guest code sends outgoing HTTP requests, are exposed. The flaw depends on a guest reusing a response's headers and on the destination server being non-compliant with content-length handling. Teams not using WASI HTTP outgoing requests can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","runtime","wasi","wasmtime","webassembly"],"campaign_type":null,"search_a":"'-126406':13A,16A '-2026':12A,15A 'access':9A 'control':10A 'cve':11A,14A 'header':4A 'let':5A 'past':8A 'request':6A 'respons':3A 'reus':2A 'smuggl':7A 'wasmtim':1A","search_b":"'access':67B 'bypass':62B 'code':26B 'compliant':51B 'conflict':32B 'content':36B 'content-length':35B 'control':68B 'destin':66B 'embedd':64B 'guest':41B 'header':38B,47B 'http':24B 'length':37B 'may':61B 'mismatch':34B 'non':50B 'non-compli':49B 'outgo':29B 'p2':25B 'receiv':44B 'request':30B,57B 'respons':45B 'reus':42B 'runtim':17B 'send':28B 'server':52B 'smuggl':59B 'treat':55B 'wasi':18B,23B 'wasmtim':19B,21B 'webassembl':20B","search_c":"'36.0.20':79C '37.0.0':80C '48.0.8':82C '49.0.0':83C '49.0.5':85C '50.0.0':87C '50.0.1':89C 'access':134C 'bodi':102C 'bodyless':119C 'bypass':131C 'compliant':128C 'conflict':92C 'content':94C 'content-length':93C 'control':135C 'destin':133C 'embedd':132C 'enabl':122C 'guest':107C 'header':96C,114C 'http':73C 'implement':75C 'length':95C 'match':100C 'non':127C 'non-compli':126C 'one':98C 'outgo':104C 'p2':74C 'potenti':130C 'receiv':111C 'request':105C,120C,123C 'resourc':115C 'respons':112C 'reus':109C 'send':91C,117C 'server':129C 'smuggl':124C 'wasi':72C 'wasmtim':71C,77C 'wasmtime-wasi-http':70C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-10-29T19:06:42+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126406","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126406","severity":null,"published_at":"2026-11-13T10:17:45+00:00","modified_at":"2026-11-13T10:17:45+00:00","first_seen_at":"2026-11-13T10:47:19+00:00","fetched_at":"2026-11-13T10:47:19+00:00","note":null}],"documents":[{"id":145055,"url":"https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-h4wp-g4x3-7398","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-29T19:06:42+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":145056,"url":"https://www.vulncheck.com/advisories/wasmtime-before-36.0.20-http-request-smuggling-via-wasi-http-p2-content-length","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"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"}