{"id":"CVE-2026-114114","kind":"vulnerability","aliases":["CVE-2026-114114"],"related":[],"title":"Vyper compiler: multi-byte characters can silently alter compiled numeric constants","description":"Vyper 0.1.0b1 before 0.1.0b12, 0.1.0b14, and 0.4.1 through 0.5.0b1 mix character-based line offsets with Python's UTF-8 byte col_offset values in vyper/ast/parse.py, so multi-byte characters shift the source slices used to reconstruct later numeric literals. An attacker contributing source with non-ASCII identifiers that NFKC-normalize to ASCII, or an invisible byte-order mark, can silently substitute addresses, integers or other constants in compiled code.","summary":"Vyper mixes character offsets with UTF-8 byte offsets when rebuilding numeric literals, so non-ASCII source can shift the slices it reads. An attacker who supplies such source can get addresses, integers or other constants silently replaced in the compiled bytecode.","severity":"medium","cvss":6.0,"epss":0.00183,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","python","smart-contracts","vyper"],"not_affected_if":["ascii-only-source","trusted-source-only"],"how_to_check":"- Run `vyper --version` and check whether it is below `0.1.0b12`, `0.1.0b14`, or in the range `0.4.1` to `0.5.0b1`\n- Look for Vyper in `requirements.txt`, `pyproject.toml` or `poetry.lock` and check the pinned version\n- Review whether any contract source you compile comes from outside your team and contains non-ASCII identifiers or a byte-order mark","fix":"- Upgrade the Vyper package to a version at or past `0.1.0b12` for the 0.1.0b line, `0.1.0b14`, or `0.5.0b2` or later for the 0.5 line (exact patched release unknown from sources)\n- Recompile and diff deployed bytecode against source for contracts built with an affected version","status":"open","published_at":"2026-10-21T01:17:37+00:00","first_seen_at":"2026-10-23T21:57:28+00:00","triaged_at":"2026-10-25T04:05:33+00:00","updated_at":"2026-10-25T04:05:33+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T04:05:33Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade the Vyper package to a version at or past `0.1.0b12` for the 0.1.0b line, `0.1.0b14`, or `0.5.0b2` or later for the 0.5 line (exact patched release unknown from sources)\n- Recompile and diff deployed bytecode against source for contracts built with an affected version","reach":"unknown","title":"Vyper compiler: multi-byte characters can silently alter compiled numeric constants","impact":"high","summary":"Vyper mixes character offsets with UTF-8 byte offsets when rebuilding numeric literals, so non-ASCII source can shift the slices it reads. An attacker who supplies such source can get addresses, integers or other constants silently replaced in the compiled bytecode.","category":"package","nicknames":[],"who_cares":["vyper","smart-contracts","python"],"confidence":0.6,"needs_auth":"no","worst_case":"compiled contracts silently contain attacker-chosen addresses or constants","analyst_note":"Confirm patched release numbers and whether the 0.5.0b1 boundary is inclusive, from the NVD entry and the Vyper release notes.","how_to_check":"- Run `vyper --version` and check whether it is below `0.1.0b12`, `0.1.0b14`, or in the range `0.4.1` to `0.5.0b1`\n- Look for Vyper in `requirements.txt`, `pyproject.toml` or `poetry.lock` and check the pinned version\n- Review whether any contract source you compile comes from outside your team and contains non-ASCII identifiers or a byte-order mark","needs_analyst":true,"not_affected_if":["ascii-only-source","trusted-source-only"],"who_is_affected":"Teams that compile Vyper contracts with an affected compiler version are exposed, most of all when they compile source written or modified by someone outside the team. Projects that only compile their own ASCII-only source in a trusted pipeline face much less risk. Teams on other compilers or on versions outside the listed ranges can skip it.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"unknown"},"cost_usd":0.000714,"input_tokens":3469,"output_tokens":734,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-114114':15A,18A '-2026':14A,17A '-8':31B,91C '0.1.0':69C,72C,74C '0.4.1':77C '0.5.0':79C 'address':57B,138C 'alter':9A 'ascii':41B,120C,127C 'attack':50B,114C 'b1':70C,80C 'b12':73C 'b14':75C 'base':84C 'byte':5A,32B,92C,101C,132C 'byte-ord':131C 'bytecod':67B 'charact':6A,27B,83C,102C 'character-bas':82C 'code':145C 'col':93C 'compil':2A,10A,66B,144C 'constant':12A,61B,142C 'contract':23B 'contribut':115C 'cve':13A,16A 'get':56B 'identifi':121C 'integ':58B,139C 'invis':130C 'later':110C 'line':85C 'liter':37B,112C 'mark':134C 'mix':26B,81C 'multi':4A,100C 'multi-byt':3A,99C 'nfkc':124C 'nfkc-normal':123C 'non':40B,119C 'non-ascii':39B,118C 'normal':125C 'numer':11A,36B,111C 'offset':28B,33B,86C,94C 'order':133C 'packag':19B 'python':20B,88C 'read':48B 'rebuild':35B 'reconstruct':109C 'replac':63B 'shift':44B,103C 'silent':8A,62B,136C 'slice':46B,106C 'smart':22B 'smart-contract':21B 'sourc':42B,54B,105C,116C 'substitut':137C 'suppli':52B 'use':107C 'utf':30B,90C 'valu':95C 'vyper':1A,24B,25B,68C 'vyper/ast/parse.py':97C","nicknames":[],"mitigations":[],"who_affected":"Teams that compile Vyper contracts with an affected compiler version are exposed, most of all when they compile source written or modified by someone outside the team. Projects that only compile their own ASCII-only source in a trusted pipeline face much less risk. Teams on other compilers or on versions outside the listed ranges can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T01:17:37+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/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-114114","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114114","severity":null,"published_at":"2026-10-21T01:17:37+00:00","modified_at":"2026-10-22T17:00:33+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-114114","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-114114","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"}