Bug 2006105 (CVE-2021-39219) - CVE-2021-39219 wasmtime: Type confusion vulnerability
Summary: CVE-2021-39219 wasmtime: Type confusion vulnerability
Keywords:
Status: CLOSED UPSTREAM
Alias: CVE-2021-39219
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Red Hat Product Security
QA Contact:
URL:
Whiteboard:
Depends On: 2006107 2006108 2006109
Blocks:
TreeView+ depends on / blocked
 
Reported: 2021-09-20 21:15 UTC by Pedro Sampaio
Modified: 2021-09-21 00:21 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2021-09-21 00:21:13 UTC


Attachments (Terms of Use)

Description Pedro Sampaio 2021-09-20 21:15:52 UTC
Wasmtime is an open source runtime for WebAssembly & WASI. Wasmtime before version 0.30.0 is affected by a type confusion vulnerability. As a Rust library the `wasmtime` crate clearly marks which functions are safe and which are `unsafe`, guaranteeing that if consumers never use `unsafe` then it should not be possible to have memory unsafety issues in their embeddings of Wasmtime. An issue was discovered in the safe API of `Linker::func_*` APIs. These APIs were previously not sound when one `Engine` was used to create the `Linker` and then a different `Engine` was used to create a `Store` and then the `Linker` was used to instantiate a module into that `Store`. Cross-`Engine` usage of functions is not supported in Wasmtime and this can result in type confusion of function pointers, resulting in being able to safely call a function with the wrong type. Triggering this bug requires using at least two `Engine` values in an embedding and then additionally using two different values with a `Linker` (one at the creation time of the `Linker` and another when instantiating a module with the `Linker`). It's expected that usage of more-than-one `Engine` in an embedding is relatively rare since an `Engine` is intended to be a globally shared resource, so the expectation is that the impact of this issue is relatively small. The fix implemented is to change this behavior to `panic!()` in Rust instead of silently allowing it. Using different `Engine` instances with a `Linker` is a programmer bug that `wasmtime` catches at runtime. This bug has been patched and users should upgrade to Wasmtime version 0.30.0. If you cannot upgrade Wasmtime and are using more than one `Engine` in your embedding it's recommended to instead use only one `Engine` for the entire program if possible. An `Engine` is designed to be a globally shared resource that is suitable to have only one for the lifetime of an entire process. If using multiple `Engine`s is required then code should be audited to ensure that `Linker` is only used with one `Engine`.

https://crates.io/crates/wasmtime
https://github.com/bytecodealliance/wasmtime/commit/b39f087414f27ae40c44449ed5d1154e03449bff
https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-q879-9g95-56mx

Comment 1 Pedro Sampaio 2021-09-20 21:16:42 UTC
Created rust-wasmtime-cache tracking bugs for this issue:

Affects: fedora-34 [bug 2006107]


Created rust-wasmtime-environ tracking bugs for this issue:

Affects: fedora-34 [bug 2006108]


Created rust-wasmtime-fiber tracking bugs for this issue:

Affects: fedora-34 [bug 2006109]

Comment 2 Product Security DevOps Team 2021-09-21 00:21:13 UTC
This CVE Bugzilla entry is for community support informational purposes only as it does not affect a package in a commercially supported Red Hat product. Refer to the dependent bugs for status of those individual community products.


Note You need to log in before you can comment on or make changes to this bug.