从对象转换到 Chrome 渲染器中的远程代码执行(RCE)

这篇文章主要介绍了 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 对象可导致堆外对象的类型混淆,进而实现任意内存读写和代码执行。通过混淆DOMRectDOMTypedArray,可覆盖backing_store_指针实现任意内存访问,通过混淆embedder field可读取重要对象的地址,进而实现任意代码执行。
  • 结论(Conclusion):此漏洞是由于更新过时地图导致的快速和字典对象之间的混淆,更新过时地图会意外地使其成为字典映射,利用此漏洞可实现对 v8 堆的任意读写和在 Chrome 渲染进程中的任意代码执行。通过修改 v8 中的 API 对象可绕过 v8 堆沙箱,实现堆外的任意内存操作。

标签:[Chrome]、[exploit development]、[GitHub Security Lab]、[vulnerability research]
作者:Man Yue Mo
漏洞利用代码可在这里找到,并附有一些设置说明。

阅读 11
0 条评论