这篇文章主要介绍了 CVE-2024-5830 漏洞,是 Chrome 中 Javascript 引擎 v8 的类型混淆漏洞,于 2024 年 5 月报告。漏洞在 126.0.6478.56/57 版本中被修复,可通过访问恶意站点在 Chrome 渲染沙箱中实现远程代码执行(RCE)。
- 对象映射与过渡(Object map and map transitions in V8):介绍了 v8 中对象映射和过渡的相关背景知识,包括地图(或隐藏类)的概念、属性描述符数组、地图共享、属性类型处理、地图过渡等。当对象添加新属性或类型转换时,会创建新地图并通过过渡相关联。
- 漏洞(The vulnerability):
PrepareForDataProperty
函数在更新后可能导致字典映射,在对象克隆时,若原始对象有属性访问器,在克隆过程中调用该访问器可能导致克隆对象的地图过时。CreateDataProperty
在复制属性时会调用Update
,可能导致字典映射,进而引起对象损坏。 - 在 v8 堆中获取任意读写(Gaining arbitrary read and write in the v8 heap):更新后的地图用于
PrepareForDataProperty
,可能导致对只读区域的越界访问和崩溃。通过控制越界读取的索引,可以选择合适的偏移量满足条件。之后,若返回字典映射,可能导致对NameDictionary
内部字段的误写,通过覆盖elements
字段可引起越界读取,从而实现对 v8 堆的任意读写。 - 跳出堆沙箱思考(Thinking outside of the heap sandbox):v8 堆沙箱隔离了 v8 堆与其他进程内存,但通过修改 v8 中的 API 对象可导致堆外对象的类型混淆,进而实现任意内存读写和代码执行。通过混淆
DOMRect
和DOMTypedArray
,可覆盖backing_store_
指针实现任意内存访问,通过混淆embedder field
可读取重要对象的地址,进而实现任意代码执行。 - 结论(Conclusion):此漏洞是由于更新过时地图导致的快速和字典对象之间的混淆,更新过时地图会意外地使其成为字典映射,利用此漏洞可实现对 v8 堆的任意读写和在 Chrome 渲染进程中的任意代码执行。通过修改 v8 中的 API 对象可绕过 v8 堆沙箱,实现堆外的任意内存操作。
标签:[Chrome]、[exploit development]、[GitHub Security Lab]、[vulnerability research]
作者:
漏洞利用代码可在这里找到,并附有一些设置说明。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。