Bug 2006114 (CVE-2021-39216) - CVE-2021-39216 wasmtime: Use-after-free bug when passing `externref`s from the host to guest Wasm content
Summary: CVE-2021-39216 wasmtime: Use-after-free bug when passing `externref`s from th...
Keywords:
Status: CLOSED UPSTREAM
Alias: CVE-2021-39216
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: 2006115 2006116 2006117
Blocks:
TreeView+ depends on / blocked
 
Reported: 2021-09-20 21:20 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:19 UTC
Embargoed:


Attachments (Terms of Use)

Description Pedro Sampaio 2021-09-20 21:20:45 UTC
Wasmtime is an open source runtime for WebAssembly & WASI. In Wasmtime from version 0.19.0 and before version 0.30.0 there was a use-after-free bug when passing `externref`s from the host to guest Wasm content. To trigger the bug, you have to explicitly pass multiple `externref`s from the host to a Wasm instance at the same time, either by passing multiple `externref`s as arguments from host code to a Wasm function, or returning multiple `externref`s to Wasm from a multi-value return function defined in the host. If you do not have host code that matches one of these shapes, then you are not impacted. If Wasmtime's `VMExternRefActivationsTable` became filled to capacity after passing the first `externref` in, then passing in the second `externref` could trigger a garbage collection. However the first `externref` is not rooted until we pass control to Wasm, and therefore could be reclaimed by the collector if nothing else was holding a reference to it or otherwise keeping it alive. Then, when control was passed to Wasm after the garbage collection, Wasm could use the first `externref`, which at this point has already been freed. We have reason to believe that the effective impact of this bug is relatively small because usage of `externref` is currently quite rare. The bug has been fixed, and users should upgrade to Wasmtime 0.30.0. If you cannot upgrade Wasmtime yet, you can avoid the bug by disabling reference types support in Wasmtime by passing `false` to `wasmtime::Config::wasm_reference_types`.

https://crates.io/crates/wasmtime
https://github.com/bytecodealliance/wasmtime/commit/101998733b74624cbd348a2366d05760b40181f3
https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-v4cp-h94r-m7xf

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

Affects: fedora-34 [bug 2006117]


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

Affects: fedora-34 [bug 2006116]


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

Affects: fedora-34 [bug 2006115]

Comment 2 Product Security DevOps Team 2021-09-21 00:21:19 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.