rustsec-2024-0444
Vulnerability from osv_rustsec
A wrong assumption made when handling ECMAScript's AsyncGenerator operations can cause an uncaught exception on certain scripts.
Details
Boa's implementation of AsyncGenerator makes the assumption that the state of an AsyncGenerator object cannot change while resolving a promise created by methods of AsyncGenerator such as %AsyncGeneratorPrototype%.next, %AsyncGeneratorPrototype%.return, or %AsyncGeneratorPrototype%.throw.
However, a carefully constructed code could trigger a state transition from a getter method for the promise's then property, which causes the engine to fail an assertion of this assumption, causing an uncaught exception. This could be used to create a Denial Of Service attack in applications that run arbitrary ECMAScript code provided by an external user.
Patches
Version 0.19.0 is patched to correctly handle this case.
Workarounds
Users unable to upgrade to the patched version would want to use std::panic::catch_unwind to ensure any exceptions caused by the engine don't impact the availability of the main application.
{
"affected": [
{
"database_specific": {
"categories": [
"denial-of-service"
],
"cvss": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H",
"informational": null
},
"ecosystem_specific": {
"affected_functions": null,
"affects": {
"arch": [],
"functions": [],
"os": []
}
},
"package": {
"ecosystem": "crates.io",
"name": "boa_engine",
"purl": "pkg:cargo/boa_engine"
},
"ranges": [
{
"events": [
{
"introduced": "0.16.0"
},
{
"fixed": "0.19.0"
}
],
"type": "SEMVER"
}
],
"versions": []
}
],
"aliases": [
"GHSA-f67q-wr6w-23jq",
"CVE-2024-43367"
],
"database_specific": {
"license": "CC-BY-4.0"
},
"details": "A wrong assumption made when handling ECMAScript\u0027s AsyncGenerator operations\ncan cause an uncaught exception on certain scripts.\n\n## Details\n\nBoa\u0027s implementation of AsyncGenerator makes the assumption that the state of\nan AsyncGenerator object cannot change while resolving a promise created by\nmethods of AsyncGenerator such as %AsyncGeneratorPrototype%.next,\n%AsyncGeneratorPrototype%.return, or %AsyncGeneratorPrototype%.throw.\n\nHowever, a carefully constructed code could trigger a state transition from\na getter method for the promise\u0027s then property, which causes the engine to\nfail an assertion of this assumption, causing an uncaught exception. This\ncould be used to create a Denial Of Service attack in applications that\nrun arbitrary ECMAScript code provided by an external user.\n\n## Patches\n\nVersion 0.19.0 is patched to correctly handle this case.\n\n## Workarounds\n\nUsers unable to upgrade to the patched version would want to use\nstd::panic::catch_unwind to ensure any exceptions caused by the\nengine don\u0027t impact the availability of the main application.",
"id": "RUSTSEC-2024-0444",
"modified": "2025-12-19T06:15:15Z",
"published": "2024-08-14T12:00:00Z",
"references": [
{
"type": "PACKAGE",
"url": "https://crates.io/crates/boa_engine"
},
{
"type": "ADVISORY",
"url": "https://rustsec.org/advisories/RUSTSEC-2024-0444.html"
},
{
"type": "ADVISORY",
"url": "https://github.com/boa-dev/boa/security/advisories/GHSA-f67q-wr6w-23jq"
},
{
"type": "WEB",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-43357"
},
{
"type": "WEB",
"url": "https://github.com/boa-dev/boa/commit/69ea2f52ed976934bff588d6b566bae01be313f7"
}
],
"related": [
"CVE-2024-43357"
],
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H",
"type": "CVSS_V3"
}
],
"summary": "Uncaught exception when transitioning the state of `AsyncGenerator` objects from within a property getter of `then`"
}
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.