如何进行Firefox信息泄漏漏洞的技术分析


这篇文章将为大家详细讲解有关如何进行Firefox信息泄漏漏洞的技术分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。研究发现,JavaScript JIT编辑器中的Array.prototype.push有多个存在安全问题的参数,而这些参数共同导致了这个信息泄漏漏洞的出现。这个漏洞会将内存地址泄露给一个相关调用函数,攻击者将能够使用这个地址来进一步实施攻击。这个安全漏洞已经在Firefox 62.0.3和Firefox ESR 60.2.2版本中得到了修复。CVE-2018-12387BrunoKeith和NiklasBaumstark,独立安全研究员,在发现该漏洞之后他们便将漏洞信息上报给了Beyond Security的SecuriTeam安全披露项目。Firefox 62.0Firefox ESR 60.2在对Spidermonkey(Mozilla的JavaScript引擎,采用C++编写)进行模糊测试的过程中,我们用下面这段代码成功触发了一次调试断言(Debug Assertion):上述代码触发了如下所示的断言(Assertion):在运行JIT编译器生成的代码时,函数f生成了上述断言。接下来,我们一起看一看JIT代码中的IR(中间表示):我们可以看到上图中的arraypusht指令,关于该指令的内容可参考【这篇文档】。函数中的注释信息表示,调用push命令的参数将会被分成多个单独的arraypush{t,v}指令。此时会触发断言,因为在调用函数时,栈指针没有被正确恢复。在了解了错误发生的场景之后,我们需要从BaselineCompiler.cpp中寻找到负责执行syncStack(0)的操作码Handler,并通过peek()来获取栈地址值:这个操作码会被下列JavaScript代码执行:Handler告诉了我们这个操作码是如何被编译的:R0被设置为了stack[top-1] = o,R1被设置为了stack[top] = y,接下来内部缓存会设置R0.a = R1。由于栈地址偏移,在下面的代码中会执行stack[top].a = stack[top+1],因此我们可以在栈外获取一个JSValue:指令48只会将一个函数push进堆内存中,这样一来指令85(funcall)将不会抛出异常,因为它会尝试从栈中获取Array.prototype.push.call,但是有8字节的偏移量。并在我们的系统上打印出了2.11951350117067e-310,它是整型值0免费云主机域名x27044d565235的double类型表示,而这是一个返回地址。最终的漏洞利用代码将能够利用这个缺陷来泄漏堆地址、栈地址和xul.dll的基地址。关于如何进行Firefox信息泄漏漏洞的技术分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: 电信运营商在三网融合中的“舍”与“得”

博威创智商业咨询部柳旗事件背景7月5日,湖南省政府召开新闻发布会,公布了长株潭地区“三网融合”开展试点的时间表。至此,长株潭“三网融合”转入执行阶段。据当地媒体报道,湖南省有线电视网络集团一位相关工作人员透露,实施细则正在制定当中,如无意外,本月就可能出台。博…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/04 10:54
下一篇 02/04 10:54