pysec-2023-142
Vulnerability from pysec
Published
2023-08-07 19:15
Modified
2023-08-17 03:22
Details

Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a .vy contract compiled with vyper versions 0.2.15, 0.2.16, or 0.3.0; a primary function that utilizes the @nonreentrant decorator with a specific key and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same key and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.

Impacted products
Name purl
vyper pkg:pypi/vyper



{
   affected: [
      {
         package: {
            ecosystem: "PyPI",
            name: "vyper",
            purl: "pkg:pypi/vyper",
         },
         ranges: [
            {
               events: [
                  {
                     introduced: "0",
                  },
               ],
               type: "ECOSYSTEM",
            },
         ],
         versions: [
            "0.1.0b1",
            "0.1.0b10",
            "0.1.0b11",
            "0.1.0b12",
            "0.1.0b13",
            "0.1.0b14",
            "0.1.0b15",
            "0.1.0b16",
            "0.1.0b17",
            "0.1.0b2",
            "0.1.0b3",
            "0.1.0b4",
            "0.1.0b5",
            "0.1.0b6",
            "0.1.0b7",
            "0.1.0b8",
            "0.1.0b9",
            "0.2.1",
            "0.2.10",
            "0.2.11",
            "0.2.12",
            "0.2.13",
            "0.2.14",
            "0.2.15",
            "0.2.16",
            "0.2.2",
            "0.2.3",
            "0.2.4",
            "0.2.5",
            "0.2.6",
            "0.2.7",
            "0.2.8",
            "0.2.9",
            "0.3.0",
            "0.3.1",
            "0.3.2",
            "0.3.3",
            "0.3.4",
            "0.3.5",
            "0.3.6",
            "0.3.7",
            "0.3.8",
            "0.3.9",
         ],
      },
   ],
   aliases: [
      "CVE-2023-39363",
      "GHSA-5824-cm3x-3c38",
   ],
   details: "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.",
   id: "PYSEC-2023-142",
   modified: "2023-08-17T03:22:33.953997+00:00",
   published: "2023-08-07T19:15:00+00:00",
   references: [
      {
         type: "EVIDENCE",
         url: "https://github.com/vyperlang/vyper/security/advisories/GHSA-5824-cm3x-3c38",
      },
      {
         type: "FIX",
         url: "https://github.com/vyperlang/vyper/security/advisories/GHSA-5824-cm3x-3c38",
      },
      {
         type: "ADVISORY",
         url: "https://github.com/vyperlang/vyper/security/advisories/GHSA-5824-cm3x-3c38",
      },
      {
         type: "EVIDENCE",
         url: "https://hackmd.io/@LlamaRisk/BJzSKHNjn",
      },
      {
         type: "WEB",
         url: "https://hackmd.io/@LlamaRisk/BJzSKHNjn",
      },
      {
         type: "EVIDENCE",
         url: "https://hackmd.io/@vyperlang/HJUgNMhs2",
      },
      {
         type: "WEB",
         url: "https://hackmd.io/@vyperlang/HJUgNMhs2",
      },
      {
         type: "FIX",
         url: "https://github.com/vyperlang/vyper/pull/2514",
      },
      {
         type: "FIX",
         url: "https://github.com/vyperlang/vyper/pull/2439",
      },
   ],
   severity: [
      {
         score: "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N",
         type: "CVSS_V3",
      },
   ],
}


Log in or create an account to share your comment.

Security Advisory comment format.

This schema specifies the format of a comment related to a security advisory.

UUIDv4 of the comment
UUIDv4 of the Vulnerability-Lookup instance
When the comment was created originally
When the comment was last updated
Title of the comment
Description of the comment
The identifier of the vulnerability (CVE ID, GHSA-ID, PYSEC ID, etc.).



Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.