---
id: CVE-2020-37289
title: Vyper before 0.3.1 Improper Input Validation of uint8 Interface Return Values
summary: >-
  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 man…
severity: low
cvss: 3.7
cvssVector: 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N'
cvssSource: cna
cwe:
  - CWE-20
vendor: vyperlang
product: vyper
affected:
  - vyper < 0.3.1
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-10-28T15:45:04.773773Z'
published: '2026-10-21'
updated: '2026-10-28'
sourceUpdated: '2026-10-28T15:45:18.052Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2020-37289'
references:
  - url: 'https://github.com/vyperlang/vyper/security/advisories/GHSA-mr6r-mvw4-736g'
    label: GitHub Security Advisory (GHSA-mr6r-mvw4-736g)
  - url: >-
      https://www.vulncheck.com/advisories/vyper-before-0.3.1-improper-input-validation-of-uint8-interface-return-values
    label: >-
      VulnCheck Advisory: Vyper before 0.3.1 Improper Input Validation of uint8
      Interface Return Values
tags:
  - cve.org
  - osv
  - pip
epss: 0.00261
epssPercentile: 0.17915
aliases:
  - GHSA-mr6r-mvw4-736g
ecosystem: pip
ingestedAt: '2026-10-21T01:37:08.049Z'
---

## Overview

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.

## Affected

- `vyper < 0.3.1`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Package advisory (CVE-2020-37289)

Affected packages:

- `vyper <= 0.1.0b16`

Source: https://osv.dev/vulnerability/GHSA-mr6r-mvw4-736g
