悬垂引用(dangling reference)是如何危害系统安全的?
浏览器悬垂引用漏洞攻击实现原理
悬垂引用本身是指代码中指向某块内存的引用/指针,在对应内存被释放回收后没有被置空,仍可被调用访问的内存管理缺陷,在浏览器场景下的攻击路径可分为以下四个核心步骤:
- 漏洞触发前置:恶意网页中的JS/WebAssembly代码首先构造特殊调用逻辑,诱导浏览器的渲染引擎、JS引擎分配指定规格的内存块,通常用来存储DOM节点对象、类型化数组、自定义JS对象等,随后主动触发该内存块的正常释放流程,若浏览器底层的C/C++代码存在内存管理疏漏,未同步清除指向该内存的所有引用,就会形成可被利用的悬垂引用。
- 内存占位劫持:恶意代码立即批量申请和刚释放内存块大小完全一致的新内存,利用浏览器堆内存分配的「最近优先匹配」规则,让新申请的恶意可控内存恰好占用之前被释放、仍被悬垂引用指向的内存区域,此时攻击者可以完全自定义这块内存的全部内容。
- 安全机制绕过:攻击者通过悬垂引用访问这块已经被替换成恶意内容的内存时,浏览器默认仍会按照原本的合法对象权限处理,不会做额外的安全校验。攻击者可以通过修改内存中的权限标记位、内置函数指针、内存边界标识等内容,直接绕过浏览器的沙箱隔离、地址空间随机化(ASLR)、数据执行保护(DEP)等系统级安全机制。
- 恶意代码执行:攻击者通常会将内存中原有的合法内置函数指针,替换为提前注入到内存中的shellcode地址,当浏览器按照原有逻辑调用该函数时,就会跳转执行攻击者的恶意代码,直接突破浏览器沙箱限制,拿到当前设备的系统级执行权限。
这类漏洞仅存在于浏览器底层用C/C++编写的引擎代码中,上层运行的JS代码自带自动垃圾回收机制,本身不会产生可被利用的悬垂引用缺陷。
内容的提问来源于stack exchange,提问作者Bartłomiej Stasiak
相关产品推荐
相关产品推荐

