Description
Vyper before 0.3.1 lacks a uint8 type, allowing interface return values declared as uint8, such as ERC20.decimals(), to be stored in uint256 variables without bounds checking. Malicious contracts can return values greater than 255 to manipulate or bypass contract logic that relies on these values.
Published: 2026-10-21
Score: 6.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Unchecked uint8 return values can cause logic manipulation in contracts
Action: Update
AI Analysis

Impact

The vulnerability in Vyper before 0.3.1 stems from the absence of a uint8 type. Interface return values declared as uint8, such as ERC20.decimals(), are stored in uint256 variables without bounds checking. A malicious contract can return a value larger than 255, allowing the caller to manipulate or bypass logic that depends on these values. This flaw enables attackers to subvert contract behavior and (inferred) potentially conduct fraudulent transactions.

Affected Systems

The issue affects all Vyper contracts compiled with vyperlang:vyper before version 0.3.1. Any deployment that relies on uint8 return values from external contracts is vulnerable.

Risk and Exploitability

The CVSS score of 6.3 indicates a medium severity issue. The lack of an EPSS score suggests no current exploitation data, and the vulnerability is not listed in the CISA KEV catalog. An attacker would need to interact with a malicious contract that returns out‑of‑range values, so exploitation is confined to smart‑contract interactions. The risk is primarily to the integrity of contract logic rather than to confidentiality or availability, but it could lead to significant financial loss.

Generated by OpenCVE AI on October 21, 2026 at 12:23 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade Vyper to version 0.3.1 or later to enforce proper type checks.
  • If an upgrade is not immediately possible, audit contracts to ensure any uint8 contract calls are validated and that return values are checked against 255 before use.
  • Implement local bounds checks in the calling contract to reject values above 255, thereby preventing malicious data from affecting your logic.

Generated by OpenCVE AI on October 21, 2026 at 12:23 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 28 Oct 2026 16:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 21 Oct 2026 00:45:00 +0000

Type Values Removed Values Added
Description Vyper before 0.3.1 lacks a uint8 type, allowing interface return values declared as uint8, such as ERC20.decimals(), to be stored in uint256 variables without bounds checking. Malicious contracts can return values greater than 255 to manipulate or bypass contract logic that relies on these values.
Title Vyper before 0.3.1 Improper Input Validation of uint8 Interface Return Values
First Time appeared Vyperlang
Vyperlang vyper
Weaknesses CWE-20
CPEs cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:*:*:*
Vendors & Products Vyperlang
Vyperlang vyper
References
Metrics cvssV3_1

{'score': 3.7, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N'}

cvssV4_0

{'score': 6.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-10-28T15:45:18.052Z

Reserved: 2026-10-20T21:53:41.760Z

Link: CVE-2020-37289

cve-icon Vulnrichment

Updated: 2026-10-28T15:45:11.066Z

cve-icon NVD

Status : Deferred

Published: 2026-10-21T01:17:18.830

Modified: 2026-10-28T16:16:59.827

Link: CVE-2020-37289

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-21T18:30:13Z

Weaknesses
  • CWE-20

    Improper Input Validation