Coordinated Disclosure Timeline
- 2024-03-27: Issue reported to Chromium security team as 331383939
- 2024-04-16: Issue fixed in version 124.0.6367.60/.61 as CVE-2024-3833
Summary
Opening a malicious website in affected versions of Chrome can lead to object corruption that can be exploited to gain code execution in Chrome’s renderer.
Project
Chromium
Tested Version
Chromium version 123.0.6312.58
Details
JS object corruption in WasmJs::InstallTypeReflection (GHSL-2024-070
)
In InstallConditionalFeatures, a check is in place to check that the WebAssembly
object does not contain the Function
property to avoid adding duplicate properties in the object:
void WasmJs::InstallConditionalFeatures(Isolate* isolate,
Handle<NativeContext> context) {
...
// Install Wasm type reflection features (if not already done).
Handle<String> function_string = v8_str(isolate, "Function");
if (!JSObject::HasRealNamedProperty(isolate, webassembly, function_string)
.FromMaybe(true)) {
InstallTypeReflection(isolate, context);
}
}
}
However, InstallTypeReflection
also adds properties in various other objects, and those are not checked:
void WasmJs::InstallTypeReflection(Isolate* isolate,
Handle<NativeContext> context) {
Handle<JSObject> webassembly(context->wasm_webassembly_object(), isolate);
#define INSTANCE_PROTO_HANDLE(Name) \
handle(JSObject::cast(context->Name()->instance_prototype()), isolate)
InstallFunc(isolate, INSTANCE_PROTO_HANDLE(wasm_table_constructor), "type",
WebAssemblyTableType, 0, false, NONE,
SideEffectType::kHasNoSideEffect);
InstallFunc(isolate, INSTANCE_PROTO_HANDLE(wasm_memory_constructor), "type",
WebAssemblyMemoryType, 0, false, NONE,
SideEffectType::kHasNoSideEffect);
InstallFunc(isolate, INSTANCE_PROTO_HANDLE(wasm_global_constructor), "type",
WebAssemblyGlobalType, 0, false, NONE,
SideEffectType::kHasNoSideEffect);
InstallFunc(isolate, INSTANCE_PROTO_HANDLE(wasm_tag_constructor), "type",
WebAssemblyTagType, 0);
#undef INSTANCE_PROTO_HANDLE
...
In the above, the type
property is added to the prototype
of wasm_table_constructor
etc., without checking that the properties already exists. This leads to issues like 40056206 where duplicate properties are installed on objects.
Impact
This issue can be exploited to gain RCE in Chrome renderer.
CVE
- CVE-2024-3833
Credit
This issue was discovered and reported by GHSL team member @m-y-mo (Man Yue Mo).
Contact
You can contact the GHSL team at securitylab@github.com
, please include a reference to GHSL-2024-070
in any communication regarding this issue.