GHSA-vg88-3v92-rjx2: Vyper Return Inside For Loop More Vulnerability
MODERATEGHSA-vg88-3v92-rjx2 is a MODERATE return inside for loop more vulnerability (CWE-691: Insufficient Control Flow Management) affecting Vyper libraries in the PyPI ecosystem. The issue involves return inside for loop more than 1 level deep. Remediation is available by upgrading affected packages to version 0.2.3.
GHSA-vg88-3v92-rjx2 at a Glance
How to Fix GHSA-vg88-3v92-rjx2
To remediate this vulnerability, upgrade all affected Vyper dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install vyper>=0.2.3
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show vyper
How to Check if You Are Affected
To determine whether your Python environment is affected by GHSA-vg88-3v92-rjx2, inspect your installed packages using pip:
pip show vyper
Analyze the terminal output to locate any version of Vyper in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.2.3), your application is affected.
Note: The pip show vyper command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-691: Insufficient Control Flow Management, where the code does not sufficiently manage its control flow during execution, creating conditions in which the control flow can be modified in unexpected ways. In Vyper, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
GHSA-vg88-3v92-rjx2 Affected Vyper Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
vyper
|
PyPI |
≥ 0.1.0b10
< 0.2.3
|
0.2.3
|
References
Frequently Asked Questions
What is GHSA-vg88-3v92-rjx2?
Which Vyper versions are affected?
What version fixes GHSA-vg88-3v92-rjx2?
Is vyper affected?
What CWE is associated with GHSA-vg88-3v92-rjx2?
How can I check PyPI dependencies for GHSA-vg88-3v92-rjx2?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-vg88-3v92-rjx2",
"modified" : "2026-10-06T15:20:11Z",
"published" : "2026-10-06T15:20:10Z",
"aliases" : [ ],
"summary" : "Vyper: Return inside for loop more than 1 level deep",
"details" : "# VVE-2020-0002\nEarlier today, we received a responsible disclosure of a potential issue from @michwill (developer of @curvefi) for Vyper users who use return statements inside for loops of nested internal calls. Returning inside a for loop causes an invalid jump dest, reverting the transaction unnecessarily.\n\nMWE:\n```python\n@internal\ndef _baz():\n for i in range(1):\n return # Stack underflow happens here\n\n@internal\ndef _bar():\n self._baz()\n\n@external\ndef foo():\n self._bar()\n```\n\n### Impact\nImpact is minor, it is unlikely a user would encounter this problem unless they were working with nested calls, and return statements inside calls. Even in that scenario, you would encounter a revert which should be noticeable with adequate testing. In limited circumstances, this could cause a DoS attack for public contracts under certain conditions.\n\n### Patches\nFixed in https://github.com/vyperlang/vyper/pull/2110. Please upgrade to [Vyper 0.2.3](https://pypi.org/project/vyper/)\n\n### Workarounds\nNot returning inside a for loop nested 2+ internal calls deep works as is:\n```python\n@internal\ndef _baz():\n for i in range(1):\n pass\n return # This works fine\n\n@internal\ndef _bar():\n self._baz()\n\n@external\ndef foo():\n self._bar()\n```\n\n### For more information\nIf you have any questions or comments about this advisory:\n* Chat with us in [our gitter ](https://gitter.im/vyperlang/community)\n* Open an issue in [https://github.com/vyperlang/vyper](https://github.com/vyperlang/vyper)\n* Email us at [security@vyperlang.org](mailto:security@vyperlang.org)",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "vyper"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.1.0b10"
}, {
"fixed" : "0.2.3"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/vyperlang/vyper/security/advisories/GHSA-vg88-3v92-rjx2"
}, {
"type" : "WEB",
"url" : "https://github.com/vyperlang/vyper/pull/2110"
}, {
"type" : "WEB",
"url" : "https://github.com/vyperlang/vyper/commit/a1d92e5eb968a34a23850359656aee23334adb90"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/vyperlang/vyper"
}, {
"type" : "WEB",
"url" : "https://github.com/vyperlang/vyper/releases/tag/v0.2.3"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-691" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-10-06T15:20:10Z",
"nvd_published_at" : null
}
}